我有一个如下的设置:
+
| +------------+
+---------+ +---+-----+ | +---------+ Remote Host|
|Client 1 +--+--------------->Server 1 | | | | 10.19.2.2 |
|10.19.1.2| +---------------|10.19.1.1| | | +------------+
+---------+ | +------------v-------+-+ | |
+---------+ | | | +-----------+ |
|Client 2 | | | ^ | +--------------------+
|10.19.1.3+--+ | | | | | Switch |
+---------+ | | v | | |
+---------+ | | | +-+---------+
|Client 3 +-----+ +--++-----+ | |
|10.19.1.4| |Server 2 | | |
+---------+ |10.19.2.1| <----+ |
+---------+ |
|
|
|
++
我使用的是 OpenVPN。服务器一设置为 24 位子网上的地址 10.19.1.1,将 IP 租给客户端 1-3。服务器 1 也连接到服务器 2,并在服务器 2 的 24 位子网上拥有第二个 IP 地址。服务器 2 的客户端/服务器设置与服务器 1 相同。它在 24 位子网上拥有 IP 地址 10.19.2.1,将 IP 租给远程主机。
每个服务器都有两个接口:
+---+--------+
|Server 1 +-+tun0 10.19.1.0/24
| |
| +-+tun1 10.19.2.0/24
+------------+
+------------+
|Server 2 +-+tun0 10.19.2.0/24
| |
| +-+tun1 10.19.1.0/24
+------------+
其中 tun0 是其服务器接口,而 tun1 是其客户端接口。如何让这两个网络使用路由表与服务器 1 和服务器 2 进行通信?我已经能够在服务器 1 上实现这一点,以便客户端 1 可以 ping 远程主机,但反之则不行。
我通过从服务器 1 向客户端推送路由来实现此目的,以便 10.19.0.0/16 通过服务器 1 路由,然后我在 tun1 上为服务器 1 设置伪装。我尝试对服务器 2 进行相同的设置,但它不允许远程主机 ping 各个客户端。
答案1
如果我理解正确的话,您希望在两个 VPN 子网之间实现路由 (L3) 连接。无需添加任何额外路由,服务器 1 和 2 应该已经知道如何在两个网络之间路由数据包,因为它们具有连接到两个网络的接口。所缺少的只是通知各自的 VPN 客户端如何到达另一个网络。
具体来说,需要通知服务器 1(位于 10.19.1.0/24 上)的客户端,可以通过 10.19.1.1 访问网络 10.19.2.0/24;需要通知服务器 2(位于 10.19.2.0/24 上)的客户端,可以通过 10.19.2.1 访问网络 10.19.1.0/24。两台服务器上都无需配置 NAT 伪装。
OpenVPN 服务器允许您将路由命令推送到客户端。我认为在服务器 1 上输入 OpenVPN 服务器配置文件的命令是:
push "route 10.19.2.0 255.255.255.0"
服务器 2 上的相应配置为:
push "route 10.19.1.0 255.255.255.0"
答案2
事实证明,Server2 上的 IPV4 转发已关闭。我仍然必须使用 NAT,我认为这是因为 OpenVPN 需要身份验证,并且所有客户端都连接到 OpenVPN 服务器。一旦在 Server2 上启用 IPV4 转发,一切都可以双向进行。