所以我现在拥有的是:
- 客户端可以连接到在 ubuntu 22.04 下运行的工作 VPN 服务器
ip_forward
在服务器上启用
我没有的是客户端能够使用 VPN 服务器上的 NAT 访问互联网。换句话说,如果我使用redirect-gateway
选项,客户端可以访问专用网络内的资源,但无法访问互联网。
这是网络配置(替换了前两个八位字节):
root:~# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
tun0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500
inet 10.42.0.1 netmask 255.255.255.0 destination 10.42.0.1
inet6 fe80::dd0b:2f12:6907:258d prefixlen 64 scopeid 0x20<link>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC)
venet0: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP> mtu 1500
inet 127.0.0.1 netmask 255.255.255.255 broadcast 0.0.0.0 destination 127.0.0.1
inet6 ::2 prefixlen 128 scopeid 0x80<compat,global>
inet6 2a02:7b40:6deb:474e::1 prefixlen 128 scopeid 0x0<global>
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC)
venet0:0: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP> mtu 1500
inet 555.777.71.78 netmask 255.255.255.255 broadcast 555.777.71.78 destination 555.777.71.78
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC)
venet0:1: flags=211<UP,BROADCAST,POINTOPOINT,RUNNING,NOARP> mtu 1500
inet 666.777.71.78 netmask 255.0.0.0 broadcast 666.255.255.255 destination 666.777.71.78
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 0 (UNSPEC)
现在,我正在尝试根据我在 Web 上找到的内容设置 NAT 的 iptables 规则。我当前的 iptables 设置与我获得 VPS 时的设置相同:
root:~# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
root:~# iptables -t nat -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
我试过了:
-A POSTROUTING -s 10.42.0.0/24 -o venet0 -j SNAT --to-source 555.777.71.78
我也尝试过这个规则集
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -i tun0 -o venet0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i venet0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-t nat -A POSTROUTING -s 10.42.0.0/24 -o venet0 -j MASQUERADE
两者似乎都没有效果。如果我理解正确的话,规则应该在添加后立即生效,但在重新启动后不会持续存在,除非明确保存。那么是否有涵盖这一特殊情况的最新教程,或者如果没有,我应该从哪里开始阅读来解决这个问题?
好吧,有两件事帮助了我。首先,我切换到旧版
iptables
:也许这不是最聪明的想法,但一定存在一些我无法弄清楚的行为差异。
然后我使用了以下规则:
那行得通。