![使用 iptables 将 VPN 客户端通过 NAT 连接至互联网](https://linux22.com/image/580765/%E4%BD%BF%E7%94%A8%20iptables%20%E5%B0%86%20VPN%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%80%9A%E8%BF%87%20NAT%20%E8%BF%9E%E6%8E%A5%E8%87%B3%E4%BA%92%E8%81%94%E7%BD%91.png)
我已经设置了可运行的 OpenVPN 服务器和客户端,并且显然可以很好地相互连接。
我正在尝试通过 VPN 服务器路由所有客户端流量(Web+DNS),但不起作用。根据 OpenVPN 教程,我正在执行以下操作:
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
但这显然没有任何作用。连接到 VPN 后,客户端可以正常 ping 服务器,但完全无法访问互联网。
正在做
sudo iptables -S 或 sudo iptables -L
看起来好像没有任何改变。我根据教程的说明更改了服务器和客户端配置文件。
任何帮助都将非常有帮助,谢谢。
更新
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 10.8.0.0/24 0.0.0.0/0
MASQUERADE all -- 10.8.0.0/24 0.0.0.0/0
MASQUERADE all -- 10.8.0.0/24 0.0.0.0/0
MASQUERADE all -- 10.8.0.0/24 0.0.0.0/0
答案1
与 OP 聊天后,我们得出结论,这是 DNS 配置的问题,OpenVPN 通过 DHCP 将“10.8.0.1”推送为 DNS 服务器。由于 VPN 服务器上没有运行名称服务器,这导致客户端无法解析远程主机。
通过 OpenVPN 的 DHCP 将“8.8.8.8”作为 DNS 服务器解决了该问题。
我们还需要打开 ip_forward。
OP 需要在 /etc/sysctl.conf 中添加以下内容:
net.ipv4.ip_forward = 1
(如果已经有一行,则取消注释)