Routing

如何使用 ISC KEA DHCP (DHCPv4) 伺服器向客戶端推送路由?

  • August 7, 2018

問題:

我有一個包含 5 台伺服器(伺服器 #1、#2、#3、#4 和 #5)的基礎架構。我正在嘗試使用帶有 ISC KEA DHCP (DHCPv4) ( https://kea.isc.org/wiki ) 的伺服器 (伺服器 #5) 將路由推送到其他伺服器 (伺服器 #1、#2、#3 和 # 4)。目標是所有伺服器都可以使用伺服器#2 和 3#(VPN 隧道)之間的 LAN 與其他伺服器(ping、、ssh等)通信。


伺服器:

Server #1 - DHCPv4 Client;
Server #2 - DHCPv4 Client and OpenVPN Server;
Server #3 - DHCPv4 Client and OpenVPN Client;
Server #4 - DHCPv4 Client;
Server #5 - ISC KEA DHCP (DHCPv4).

子網:

192.168.56.0/24
10.1.2.0/24
10.1.4.0/24
10.1.6.0/24
10.8.0.1/24 (VPN tunnel)

伺服器設置:

注意:這裡介紹的基礎設施是我在 VirtualBox 上創建的用於執行測試的測試環境的一部分(不是真實環境)。例如,192.168.56.0/24 網路存在於所有伺服器上。

有關每台伺服器的 LAN(網路介面)的資訊…

伺服器 #1

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:56:84:1f brd ff:ff:ff:ff:ff:ff
   inet 10.1.6.3/24 brd 10.1.6.255 scope global noprefixroute dynamic enp0s8
      valid_lft 3514sec preferred_lft 3514sec
   inet6 fe80::a00:27ff:fe56:841f/64 scope link 
      valid_lft forever preferred_lft forever
3: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:12:26:e2:6c brd ff:ff:ff:ff:ff:ff
   inet 192.168.56.3/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s17
      valid_lft 3606sec preferred_lft 3606sec
   inet6 fe80::a00:12ff:fe26:e26c/64 scope link 
      valid_lft forever preferred_lft forever

伺服器 #2

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:2c:d1:58 brd ff:ff:ff:ff:ff:ff
   inet 10.1.6.4/24 brd 10.1.6.255 scope global noprefixroute dynamic enp0s8
      valid_lft 3856sec preferred_lft 3856sec
   inet6 fe80::a00:27ff:fe2c:d158/64 scope link 
      valid_lft forever preferred_lft forever
3: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:1c:a6:b9:59 brd ff:ff:ff:ff:ff:ff
   inet 192.168.56.4/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s17
      valid_lft 3897sec preferred_lft 3897sec
   inet6 fe80::a00:1cff:fea6:b959/64 scope link 
      valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
   link/none 
   inet 10.8.0.1/24 brd 10.8.0.255 scope global tun0
      valid_lft forever preferred_lft forever
   inet6 fe80::ec75:f69e:e65c:1215/64 scope link flags 800 
      valid_lft forever preferred_lft forever

伺服器 #3

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:71:77:07 brd ff:ff:ff:ff:ff:ff
   inet 10.1.4.5/24 brd 10.1.4.255 scope global noprefixroute dynamic enp0s8
      valid_lft 3741sec preferred_lft 3741sec
   inet6 fe80::a00:27ff:fe71:7707/64 scope link 
      valid_lft forever preferred_lft forever
3: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:ea:4e:40:ae brd ff:ff:ff:ff:ff:ff
   inet 192.168.56.5/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s17
      valid_lft 3766sec preferred_lft 3766sec
   inet6 fe80::a00:eaff:fe4e:40ae/64 scope link 
      valid_lft forever preferred_lft forever
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
   link/none 
   inet 10.8.0.6/24 brd 10.8.0.255 scope global tun0
      valid_lft forever preferred_lft forever
   inet6 fe80::6763:9d85:a754:bf0f/64 scope link flags 800 
      valid_lft forever preferred_lft forever

伺服器#4

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:e0:d2:c8 brd ff:ff:ff:ff:ff:ff
   inet 10.1.4.6/24 brd 10.1.4.255 scope global noprefixroute dynamic enp0s8
      valid_lft 3907sec preferred_lft 3907sec
   inet6 fe80::a00:27ff:fee0:d2c8/64 scope link 
      valid_lft forever preferred_lft forever
3: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:aa:e7:60 brd ff:ff:ff:ff:ff:ff
   inet 192.168.56.6/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s17
      valid_lft 3907sec preferred_lft 3907sec
   inet6 fe80::a00:27ff:feaa:e760/64 scope link 
      valid_lft forever preferred_lft forever

伺服器 #5

[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
      valid_lft forever preferred_lft forever
   inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:63:ce:c5 brd ff:ff:ff:ff:ff:ff
   inet 10.1.2.2/24 brd 10.1.2.255 scope global noprefixroute enp0s8
      valid_lft forever preferred_lft forever
   inet6 fe80::a00:27ff:fe63:cec5/64 scope link 
      valid_lft forever preferred_lft forever
3: enp0s9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:98:ee:35 brd ff:ff:ff:ff:ff:ff
   inet 10.1.4.2/24 brd 10.1.4.255 scope global noprefixroute enp0s9
      valid_lft forever preferred_lft forever
   inet6 fe80::a00:27ff:fe98:ee35/64 scope link 
      valid_lft forever preferred_lft forever
4: enp0s10: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:b6:6b:50 brd ff:ff:ff:ff:ff:ff
   inet 10.1.6.2/24 brd 10.1.6.255 scope global noprefixroute enp0s10
      valid_lft forever preferred_lft forever
   inet6 fe80::a00:27ff:feb6:6b50/64 scope link 
      valid_lft forever preferred_lft forever
5: enp0s17: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether 08:00:27:78:ed:d4 brd ff:ff:ff:ff:ff:ff
   inet 192.168.56.2/24 brd 192.168.56.255 scope global noprefixroute enp0s17
      valid_lft forever preferred_lft forever
   inet6 fe80::a00:27ff:fe78:edd4/64 scope link 
      valid_lft forever preferred_lft forever

謝謝!

關於這個答案(教程):

本教程旨在展示 ISC KEA DHCP (DHCPv4) 配置和部署的“成功案例”。特別展示了向 DHCP 客戶端推送路由。針對具體案例還考慮了其他要點,這些要點是為了使展示更具說教性。

在特定情況下(使用 VirtualBox 進行模擬),我們使用 OpenVPN 隧道,並展示如何在 LAN-TO-LAN 基礎設施中進行路由以兩種方式使用它。

本教程的建構考慮了這樣一個場景:我們在 Internet 上的伺服器 (Serverloft) 在 VPN 的一端執行 Hypervisor (Xen),在 VPN 的另一端執行公司 LAN,其中兩個網路的所有伺服器都能夠以透明的方式進行溝通。

本教程中還考慮了其他注意事項,我們建議您完整閱讀。

我們覺得有必要做這個教程,因為在網際網路上找不到像它這樣“實用”的東西。本教程還針對像我們這樣對此處介紹的基本概念有更大困難的受眾。

在我們繼續之前,我們要感謝在此過程中提供幫助的許多人。我們特別感謝使用者:@Filipe Brandenburger、@Rui F Ribeiro、@AB、@Isaac、@slm 和其他使用者(不幸的是,我們不能引用每個人的話)。

本教程中的伺服器:

Server #1 - DHCPv4 Client (ips ending with 3);
Server #2 - DHCPv4 Client and OpenVPN Server (ips ending with 4);
Server #3 - DHCPv4 Client and OpenVPN Client (ips ending with 5);
Server #4 - DHCPv4 Client (ips ending with 6);
Server #5 - ISC KEA DHCP (DHCPv4) Server (ips ending with 2).

注意:所有伺服器都是 CentOS 7。

子網:

192.168.56.0/24
10.1.2.0/24
10.1.4.0/24
10.1.6.0/24
10.8.0.1/24 (VPN tunnel)

伺服器 #5 - ISC KEA DHCP (DHCPv4) 伺服器:

. 在 CentOS 7 上安裝 ISC KEA DHCP (DHCPv4)

yum -y install gcc-c++ openssl-devel wget

cd /usr/local/src/
wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.gz
tar -zxvf boost_1_67_0.tar.gz
cd boost_1_67_0
./bootstrap.sh
./b2 install
rm -rf /usr/local/src/boost_1_67_0*

cd /usr/local/src/
wget https://github.com/log4cplus/log4cplus/releases/download/REL_2_0_1/log4cplus-2.0.1.tar.gz
tar zxvf log4cplus-2.0.1.tar.gz
cd log4cplus-2.0.1
./configure
make
make install
rm -rf /usr/local/src/log4cplus-2.0.1*

cd /usr/local/src/
wget https://ftp.isc.org/isc/kea/1.4.0/kea-1.4.0.tar.gz
tar zxvf kea-1.4.0.tar.gz
cd kea-1.4.0
./configure --enable-shell
make
make install
rm -rf /usr/local/src/kea-1.4.0*

. 在 systemd (systemctl) 中為 KEA 服務創建設置(啟動設置)…

vi ‘/usr/lib/systemd/system/kea-dhcp4.service’

[Unit]
Description=Kea DHCPv4 Server
Documentation=man:kea-dhcp4(8)
Wants=network-online.target
After=network-online.target
After=time-sync.target

[Service]
ExecStart=/usr/local/sbin/kea-dhcp4 -c /usr/local/etc/kea/kea-dhcp4.conf

[Install]
WantedBy=multi-user.target

vi ‘/usr/lib/systemd/system/kea-dhcp6.service’

[Unit]
Description=Kea DHCPv6 Server
Documentation=man:kea-dhcp6(8)
Wants=network-online.target
After=network-online.target
After=time-sync.target

[Service]
ExecStart=/usr/local/sbin/kea-dhcp6 -c /usr/local/etc/kea/kea-dhcp6.conf

[Install]
WantedBy=multi-user.target

vi ‘/usr/lib/systemd/system/kea-dhcp-ddns.service’

[Unit]
Description=Kea DHCP-DDNS Server
Documentation=man:kea-dhcp-ddns(8)
Wants=network-online.target
After=network-online.target
After=time-sync.target

[Service]
ExecStart=/usr/local/sbin/kea-dhcp-ddns -c /usr/local/etc/kea/kea-dhcp-ddns.conf

[Install]
WantedBy=multi-user.target

. 創建(調整)配置文件“/usr/local/etc/kea/kea-dhcp4.conf”…

cp '/usr/local/etc/kea/kea-dhcp4.conf' '/usr/local/etc/kea/kea-dhcp4.conf_BAK'

vi ‘/usr/local/etc/kea/kea-dhcp4.conf’

{
   "Dhcp4": {
       "interfaces-config": {
           "interfaces": ["enp0s8", "enp0s9", "enp0s10", "enp0s17"]
       },
       "control-socket": {
           "socket-type": "unix",
           "socket-name": "/tmp/kea-dhcp4-ctrl.sock"
       },
       "lease-database": {
           "type": "memfile",
           "lfc-interval": 1800
       },
       "expired-leases-processing": {
           "reclaim-timer-wait-time": 10,
           "flush-reclaimed-timer-wait-time": 25,
           "hold-reclaimed-time": 3600,
           "max-reclaim-leases": 100,
           "max-reclaim-time": 250,
           "unwarned-reclaim-cycles": 5
       },
       "valid-lifetime": 4000,
       "renew-timer": 1000,
       "rebind-timer": 2000,

       // Defines the "rfc3442-classless-static-routes" option.
       // More details https://unix.stackexchange.com/a/460147/61742 .
       "option-def": [{
               "name": "rfc3442-classless-static-routes",
               "code": 121,
               "space": "dhcp4",
               "type": "record",
               "array": true,
               "record-types": "uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8"
           }
       ],

       "subnet4": [{
               "interface": "enp0s8",
               "subnet": "10.1.2.0/24",
               "pools": [{
                       "pool": "10.1.2.3 - 10.1.2.254"
                   }
               ]
           }, {
               "interface": "enp0s9",
               "subnet": "10.1.4.0/24",
               "pools": [{
                       "pool": "10.1.4.3 - 10.1.4.254"
                   }
               ],

               // Reserve ips for the interfaces that have these MAC ADDRESS on that network.
               "reservations": [{
                       // Server 3# (4)
                       "hw-address": "08:00:27:71:77:07",
                       "ip-address": "10.1.4.5"
                   }, {
                       // Server 4# (6)
                       "hw-address": "08:00:27:e0:d2:c8",
                       "ip-address": "10.1.4.6"
                   }
               ],

               // Defines a route to be pushed to this subnet.
               // More details https://unix.stackexchange.com/a/460147/61742 .
               "option-data": [{
                       "name": "rfc3442-classless-static-routes",
                       "data": "24,10,1,6,10,1,4,5"
                   }
               ]

           }, {
               "interface": "enp0s10",
               "subnet": "10.1.6.0/24",
               "pools": [{
                       "pool": "10.1.6.3 - 10.1.6.254"
                   }
               ],

               // Reserve ips for the interfaces that have these MAC ADDRESS on that network.
               "reservations": [{
                       // Server 1# (3)
                       "hw-address": "08:00:27:56:84:1f",
                       "ip-address": "10.1.6.3"
                   }, {
                       // Server 2# (4)
                       "hw-address": "08:00:27:2c:d1:58",
                       "ip-address": "10.1.6.4"
                   }
               ],

               // Defines a route to be pushed to this subnet.
               // More details https://unix.stackexchange.com/a/460147/61742 .
               "option-data": [{
                       // Server 3# (4) e Server 4# (6)
                       "name": "rfc3442-classless-static-routes",
                       "data": "24,10,1,4,10,1,6,4"
                   }
               ]

           }, {
               "interface": "enp0s17",
               "subnet": "192.168.56.0/24",
               "pools": [{
                       "pool": "192.168.56.3 - 192.168.56.254"
                   }
               ],
               "option-data": [{
                       "name": "domain-name-servers",
                       "data": "192.168.56.1"
                   }, {
                       "name": "routers",
                       "data": "192.168.56.1"
                   }
               ],

               // Reserve ips for the interfaces that have these MAC ADDRESS on that network.
               "reservations": [{
                       // Server 1# (3)
                       "hw-address": "08:00:12:26:e2:6c",
                       "ip-address": "192.168.56.3"
                   }, {
                       // Server 2# (4)
                       "hw-address": "08:00:1c:a6:b9:59",
                       "ip-address": "192.168.56.4"
                   }, {
                       // Server 3# (5)
                       "hw-address": "08:00:ea:4e:40:ae",
                       "ip-address": "192.168.56.5"
                   }, {
                       // Server 4# (6)
                       "hw-address": "08:00:27:aa:e7:60",
                       "ip-address": "192.168.56.6"
                   }
               ]
           }
       ]
   },
   "Logging": {
       "loggers": [{
               "name": "kea-dhcp4",
               "output_options": [{
                       "output": "/usr/local/var/log/kea-dhcp4.log"
                   }
               ],
               "severity": "INFO",
               "debuglevel": 0
           }
       ]
   }
}

. 配置網路介面

這些網路介面將為所有機器提供 DHCP 伺服器(參見上面的“kea-dhcp4.conf”)。

注意:在真實世界場景中,“OpenVPN 伺服器端網路”上的機器將擁有一個 DHCP 伺服器,而“OpenVPN 客戶端網路”上的機器將擁有另一個 DHCP 伺服器。當我們談論 OSI 模型的“第 2 層”時,此劃分完美執行,因此與“第 3 層”隔離,其中將有“路由”、“IP 轉發”等,這將是兩者之間集成的一部分兩個網路。

vi ‘/etc/sysconfig/network-scripts/ifcfg-enp0s17’

BOOTPROTO=static
DEVICE=enp0s17
DNS1=192.168.56.1
GATEWAY=192.168.56.1
IPADDR=192.168.56.2
IPV6INIT=NO
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
USERCTL=NO

vi ‘/etc/sysconfig/network-scripts/ifcfg-enp0s8’

BOOTPROTO=static
DEVICE=enp0s8
IPADDR=10.1.2.2
IPV6INIT=NO
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
USERCTL=NO

vi ‘/etc/sysconfig/network-scripts/ifcfg-enp0s9’

BOOTPROTO=static
DEVICE=enp0s9
IPADDR=10.1.4.2
IPV6INIT=NO
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
USERCTL=NO

vi ‘/etc/sysconfig/network-scripts/ifcfg-enp0s10’

BOOTPROTO=static
DEVICE=enp0s10
IPADDR=10.1.6.2
IPV6INIT=NO
NETMASK=255.255.255.0
NM_CONTROLLED=yes
ONBOOT=yes
USERCTL=NO

伺服器 #2 - 客戶端 DHCPv4 和 OpenVPN 伺服器:

. OpenVPN 伺服器設置

vi ‘/etc/openvpn/server/server.conf’

重要提示:我們只考慮建議的基礎設施(“server.conf”和“client0”)中 OPENVPN 操作所必需的配置。需要其他設置。有關更多資訊,請查看 OpenVPN 文件。有關此連結此處解決的需求的更多詳細資訊https://openvpn.net/index.php/open-source/documentation/howto.html#scope

dev tun
topology subnet
server 10.8.0.0 255.255.255.0
push "route 10.1.6.0 255.255.255.0"
push "route 10.1.4.0 255.255.255.0"
client-to-client
ifconfig 10.8.0.1 255.255.255.0

. OpenVPN 客戶端設置

注意:這些設置由伺服器端的客戶端使用。

vi ‘/etc/openvpn/ccd/client0’

ifconfig-push 10.8.0.6 255.255.255.0
iroute 10.1.4.0 255.255.255.0
route 10.1.4.0 255.255.255.0

伺服器 #3 - 客戶端 DHCPv4 和 OpenVPN 客戶端

. OpenVPN 客戶端設置

vi ‘/etc/openvpn/client/client0.conf’

dev tun
remote 192.168.56.4 1194

伺服器 #2 和 #3:

. 打開“OpenVPN”的防火牆(伺服器#2 和#3)

注意:Openvpn 不是執行緒的重點,所以我們不會在這裡詳細介紹!

firewall-cmd --permanent --add-service openvpn
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload

. 啟用“ip_forward”(伺服器 #2 和 #3)

echo -n "net.ipv4.ip_forward=1

" >> /etc/sysctl.d/ip_forward.conf
sysctl -w net.ipv4.ip_forward=1

伺服器 #1、#2、#3 和 #4:

. 配置網路介面

vi ‘/etc/sysconfig/network-scripts/ifcfg-enp0s8’

注意:所有機器中的所有介面都遵循相同的模型,因為網路配置將由伺服器 #5(KEA DHCP 伺服器)提供。

BOOTPROTO=dhcp
DEVICE=enp0s8
IPV6INIT=NO
ONBOOT=yes
ZONE=public

vi ‘/etc/sysconfig/網路’

NETWORKING=yes

測試:

. 如果所有這些測試都是肯定的,則本教程將成功執行:

Server #1
   ping 10.1.4.5 # (#3)
   ssh <USER>@10.1.4.5 # (#3)
   ping 10.1.4.6 # (#4)
   ssh <USER>10.1.4.6 # (#4)
Server #2
   ping 10.1.4.5 # (#3)
   ssh <USER>10.1.4.5 # (#3)
   ping 10.1.4.6 # (#4)
   ssh <USER>10.1.4.6 # (#4)
Server #3
   ping 10.1.6.3 # (#1)
   ssh <USER>10.1.6.3 # (#1)
   ping 10.1.6.4 # (#2)
   ssh <USER>10.1.6.4 # (#2)
Server #4
   ping 10.1.6.3 # (#1)
   ssh <USER>10.1.6.3 # (#1)
   ping 10.1.6.4 # (#2)
   ssh <USER>10.1.6.4 # (#2)

尖端:

網際網路 (WAN) 測試

curl http://www.google.com

更新客戶端上的 DHCP

dhclient -r

從客戶端刪除 DHCP 租約設置:

注意:測試 DHCP 伺服器的操作很重要。

rm -rf $(find /var/lib/NetworkManager/ -name "*.lease" | egrep <NETWORK_INTERFACE_NAME>)

從伺服器中刪除 DHCP 租約設置:

注意:測試 DHCP 伺服器的操作很重要。

rm -rf /usr/local/var/kea/kea-leases4.csv*

其他指南:

一般準則和關於本教程使用的環境:

  1. 本配置教程是在使用 VirtualBox 的測試環境中搭建的;
  2. 所有正在使用的網路都是“僅限主機”,其中一個(192.168.56.0/24)有網際網路(見 3)。他們都不應該啟用 VirtualBox DHCP;
  3. 預設情況下,“僅主機”網路無法訪問 Internet ( https://www.virtualbox.org/manual/ch06.html#networkingmodes )。但是,在本教程https://forum.manjaro.org/t/manjaro-and-virtualbox-host-only-with-internet/28722/12我教如何“規避”這個限制;
  4. 只有在必要時才必須啟動 192.168.56.0/24 網路的網際網路 (WAN)。必須禁用執行測試,除了檢查curl http://www.google.com伺服器 #1、#2、#3 和 #4 上的 Internet 訪問 ( )(參見 3);
  5. 執行網路測試(ping、ssh 等)時,應在主機上禁用“dnsmasq”和“iptables”等服務(參見 3);
  6. 一般來說,在測試期間,網路的第 2 層上不應存在 DHCP,但伺服器 #5 上的除外。

使用 tun 或 tap (OpenVPN) - 討論:

我們在@Eduardo Lucio 和@Isaac 之間關於此答案中的部署模型的部分聊天(chat.stackexchange.com)下方進行了轉置。我們(@Eduardo Lucio)目前選擇使用“tun”,儘管它是一個“更費力”的配置。但是,如果您想在 VPN 兩側的網路之間實現真正透明的集成,請選擇 tap(具有所有優點和缺點)。我相信@Isaac 的說明對於決定使用什麼(tap 或 tun)非常相關,因此在這裡轉置,以便它可以接觸到更多人。

Eduardo Lucio 週六 15:22 @Isaac https://serverfault.com/questions/21157/should-i-use-tap-or-tun-for-openvpn/21168#21168 我相信這是完成任務的方法路由器。看:“如果您需要在兩個不同位置橋接兩個乙太網段 - 然後使用 tap。在這種設置中,您可以在 vpn 的兩端擁有相同 ip 子網(例如 10.0.0.0/24)中的電腦”。所以“vpn 就像乙太網交換機一樣”。但是還有另一個問題……例如,使用這個模型,我可以讓網路 10.7.1.0/24(VPN 端 A)中的機器與網路 192.168.58.0/24(VPN 端 B)透明通信?

以撒 星期六 22:19 你開始提出正確的問題。

但是您確實在每個網路上都有一個路由器!嗯,有點。

數據包只有兩種方式到達電腦:(1)電腦與另一台電腦(相同的第 2 層範圍)屬於同一條線路的一部分,例如(簡單)交換機的所有埠(或舊名稱集線器)或屬於同一個 VLAN(如果您沒有使用 VLAN 的經驗,請保留此數據點以供將來參考,暫時忘記我曾經提到過它)。

Isaac Sat 22:52 (2) 數據包通過路由器在兩個第 2 層範圍之間路由**。**通過遵循交換機的路由表來決定是否路由數據包。

到目前為止,這只是一般的網路描述,您可能會發現它與您的特定案例無關,直到您也意識到當您告訴電腦轉發時電腦充當路由設備的數據包,簡而言之,路由器。該路由器需要有路由表。例如,假設(您在每個問題上確實有一堆不同的數字,很難具體說明)作為 VPN 客戶端的伺服器 4(位於 10.1.4.6)應該已經前向啟動並且必須設置為將它看到的以 10.1.6.x 作為目標的所有數據包路由到 tun 介面。數據包將進入 VPN,並從另一端退出 VPN。伺服器 3(在 10.1.4.5 的同一網路範圍 10.1.4.y 上)只需要有一個預設(網關)路由即可將所有不在其自身網路範圍(10.1.4.0/24)內的數據包發送到 GW 10.1.4.6 的。

一旦來自 VPN 的數據包到達另一台電腦伺服器 2(位於 10.1.6.4),它們也必須路由到辦公室的路由器,並且辦公室的路由器必須有一個路由條目來發送目標為 10.1.4 的任何數據包。 x 到伺服器 2。伺服器 2 必須在內部路由(並具有這樣的路由條目)它接收到的所有數據包到 tun 介面。解釋清楚了嗎?所有這些路由都是必需的,因為使用的設備是 tun(第 3 層設備)。

一個更簡單(也更不安全)的設備是 Tap(第 2 層設備)。將其視為您添加電腦的交換機。它將轉發它收到的所有數據包,無論是定向到任何(3 級)IP 地址的數據包,還是那些廣播數據包、ARP 解析等。從這個意義上說,這將使您辦公室 LAN 上的電腦受到來自 VPN 另一端電腦的 ARP 攻擊。VPN 兩側的所有電腦都將成為一個幸福的大家庭(每個人都相互信任)。話雖如此,那麼源自 IP 地址 10.7.1.0/24 的數據包將出現在 VPN 的另一端。但是您表達問題的方式:(位於 10.7.1.0/24 和 192.168.58.0/24 的機器將能夠通信?)強制回答“否”。不同(專用)網路中的電腦可以相互通信的唯一方法是,它們的本地地址通過 NAT(網路地址轉換)或類似方法轉換為外部(遠端)地址。因此,NAT 的每一端都將看到相同的網路範圍。以上所有內容僅涵蓋 IPv4。您將需要查看它並擴展 IPv6。

引用自:https://unix.stackexchange.com/questions/458502