我正在尝试设置以下网络:
Host1 ---(VPN1)--- Host2 ---(VPN2)--- Host3
在哪里
Host1
10.0.0.1/16
接口上有 IPtun-vpn1
;Host2
10.0.0.2/16
在 接口 上有 IPtun-vpn1
,10.1.0.1/16
在 接口 上有 IPtun-vpn2
;Host3
10.1.0.2/16
接口上有 IPtun-vpn2
。
具体来说,Host1
是具有网络的 OpenVPN 服务器,10.0.0.0/16
是Host2
其客户端。因此,它们从 连接10.0.0.1 --- 10.0.0.2
。
类似地,Host2
是具有网络的 OpenVPN 服务器,10.1.0.0/16
是Host3
其客户端。因此,它们从 连接10.1.0.1 --- 10.1.0.2
。
现在,我尝试Host1
ping Host3
。我尝试做的第一件事是从Host1
pingHost2
其接口tun-vpn2
。因此,Host1
我
ping 10.1.0.1
这是行不通的。
然后我尝试设置一条Host1
路线
ip route add 10.1.0.0/16 via 10.0.0.2 dev tun-vpn1
我还是没有成功。tcpdump 显示没有数据包到达Host2
,尽管它们Host1
从接口离开tun-vpn1
。
我该如何设置这个路由?
谢谢。
您需要在 Host1 服务器上另外定义 OpenVPN 内部路由
iroute
,这些路由进入接口并由 OpenVPN 软件处理后。如果我没记错的话,这些路由会进入client-config-dir
特定客户端的文件中。或者,将 OpenVPN 连接切换到
dev tap
具有更熟悉的以太网行为的连接。tun
接口模拟点对点接口,不携带任何允许via ...
参数工作的 MAC 层(又称 L2)寻址(与“tap”或物理以太网接口相反)。因此,当您通过“tun”接口路由任何内容时,via
网关地址实际上会被忽略。但由于 OpenVPN 并非真正的点对点链接,而更像是点对多点链接,这意味着如果数据包与任何对等点的主地址不直接匹配,OpenVPN 服务器就无法自动知道将数据包转发到哪个对等点。服务器知道
Host1
应该将 10.1.0.0/16 转发给Host2
客户端的唯一方法是。OpenVPN 对于 1 个客户端设置没有特殊情况(因为没有什么可以阻止它在任何时候获取第二个客户端并且您也不希望这彻底改变路由行为),因此即使在这样的设置中它也不会“将所有内容转发”到它拥有的一个客户端;您仍然需要使用
iroute
。(由于 OpenVPN 客户端始终只有一个对等体:服务器,因此问题可能不会在另一个方向发生。)
WireGuard 接口的用途
AllowedIPs
完全相同(当需要“清晰”的点对点隧道时,通常将其设置为 /0)。