我似乎无法弄清楚这一点。服务器在具有私有网络的 VPS 上运行。我需要通过 OpenVPN 服务器从客户端访问同一数据中心的另一个 VPS。服务器的 LAN IP 是 10.128.182.211,我需要访问的框是 10。我可以从客户端 ping 服务器的 LAN。我正在推送路由,我可以在客户端中看到它:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.2.1 0.0.0.0 UG 303 0 0 wlan0
10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0
10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
128.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun
192.168.2.0 0.0.0.0 255.255.255.0 U 303 0 0 wlan0
192.168.14.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
我在服务器上尝试了以下两条规则:
iptables -A FORWARD -i tun0 -o ens4v1 -j ACCEPT
iptables -A FORWARD -i ens4v1 -o tun0 -j ACCEPT
但仍然没有结果。我目前通过 VPN 路由所有客户端的流量,并且 IP 转发已启用并正常工作。
更新
搞清楚了……真的太明显了。我需要一个 MASQUERADE 规则,就像我上网时使用的规则一样。
-A POSTROUTING -o ens3 -j MASQUERADE
-A POSTROUTING -o ens4v1 -j MASQUERADE
答案1
我需要一个化装舞会规则
使用 MASQUERADE 是最简单的方法,但您也可以通过向所有 LAN 机器添加 VPN 路由来设置路由。
看:http://openvpn.net/index.php/open-source/documentation/howto.html#scope
服务器在 VPS 上运行
有些 VPS 无法执行 MASQUERADE,因此您可以执行以下操作:
iptables -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 12.34.56.78
该--to-source
选项将是输出接口的地址