如何使用 ISC KEA DHCP (DHCPv4) 服务器将路由推送到客户端?

如何使用 ISC KEA DHCP (DHCPv4) 服务器将路由推送到客户端?

问题:

我的基础设施有 5 台服务器(服务器 #1、#2、#3、#4 和 #5)。我正在尝试使用具有 ISC KEA DHCP (DHCPv4) 的服务器(服务器 #5)(https://kea.isc.org/wiki)将路由推送到其他服务器(服务器#1、#2、#3 和#4)。目标是所有服务器都可以使用服务器 #2 和 3# 之间的 LAN(VPN 隧道)与其他服务器( 、 等)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

谢谢!

答案1

关于这个答案(教程):

本教程旨在演示 ISC KEA DHCP (DHCPv4) 配置和部署的“成功案例”。重点演示向DHCP客户端推送路由。其他要点也针对具体案例进行了考虑,以使演示更具指导性。

在特定情况下(使用 VirtualBox 进行模拟),我们使用 OpenVPN 隧道,并演示如何进行路由以在 LAN 到 LAN 基础设施中以两种方式使用它。

本教程的构建考虑了这样一种场景:我们在 Internet 上有一台服务器 (Serverloft),在 VPN 的一端运行虚拟机管理程序 (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'

重要提示:我们仅考虑拟议基础设施中 OPENVPN 操作所必需的配置(“server.conf”和“client0”)。还需要其他设置。有关更多信息,请查看 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/network'

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. 默认情况下,“仅主机”网络无法访问互联网(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 上的互联网访问 ( ) 除外(请参阅 3);

  5. 当执行网络测试(ping、ssh 等)时,应在主机上禁用诸如“dnsmasq”和“iptables”之类的服务(参见 3);

  6. 一般来说,在测试期间,除了服务器 #5 上的 DHCP 之外,网络的第 2 层上不应存在 DHCP。


使用 tun 或 tap (OpenVPN) - 讨论:

我们在这个答案中转置了 @Eduardo Lucio 和 @Isaac 之间关于部署模型的聊天 (chat.stackexchange.com) 的以下部分。目前,我们(@Eduardo Lucio)选择使用“tun”,尽管这是一个“更费力”的配置。但是,如果您希望 VPN 两侧的网络之间实现真正透明的集成,请选择 Tap(及其所有优点和缺点)。我相信 @Isaac 的澄清对于决定使用什么(tap 或 tun)非常相关,因此在这里转置,以便它可以覆盖更多人。

爱德华多·卢西奥 周六 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。

相关内容