我正在尝试在两个 openvpn 服务器之间路由流量;我希望有以下连接:
客户端 --> OpenVpnServer1 --> OpenVpnServer2 --> 互联网
我有两台服务器在单独运行和工作,但我尝试配置 OpenVpnServer1 以使用 iptables 将其所有客户端流量转发到 OpenVpnServer2,但失败了。
OpenVpnServer1 接口和配置:
eth0——公共互联网
tun0——用于连接到此服务器的客户端
tun1——第二台服务器的连接接口(使用 openvpn 客户端连接时处于活动状态)
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.0.0/8 -o eth0 -j MASQUERADE
COMMIT
OpenVpnServer2 接口和配置:
ens33——公共互联网
tun0——用于连接到此服务器的客户端
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o ens33 -j MASQUERADE
COMMIT
更新:
我已经测试了 server1 和 sever2 之间的连接,server1 可以从其 tun1 适配器 ping google。问题是我不知道如何在不更改 server1 上的默认路由的情况下转发流量。如果我将默认路由更改为 tun1,则客户端无法连接到 server1。
答案1
好的,首先介绍一些基础知识。客户端打开与 Server1 的 VPN 连接。服务器与 server2 有活动连接,并且此连接配置为默认路由(您这样做了,对吗?)
首先,我会将 server1 和 server2 之间的这个隧道配置为站点到站点的 VPN - 但这是另一个主题。
在 server1 上,你的 iptables 规则是错误的。正确的规则应该是:
iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
为什么?
如果希望此设置有效,您需要假装所有通过 VPN 隧道从服务器 1 到服务器 2 的流量都是由服务器 1 发起的,具体来说,具有您的 tun1 接口的 IP,以便回复到达服务器 1,并可以正确路由回客户端。这就是规则的作用。相比之下,您的规则只会伪装所有进入公共互联网的流量,而不会伪装通过任何 VPN 的流量。