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