我有以下 OpenVPN 设置:
Client(android OpenVPN client) <-> internet <-> VPN server (linux) <-> LAN
VPN 服务器有eth0(在开放的互联网上可见)和eth1(本地防火墙 LAN 的一部分,192.168.1.0/24)。我使用“NAT hack”使本地 LAN 中的计算机对客户端可见,使用方法如下:
iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
因为我无法访问将 IP 配置推送到 LAN 中的大多数计算机的 DHCP 服务器。
现在我的情况如下:
- 客户端顺利连接到服务器
- 配置被推送到客户端
- 我可以看到本地局域网中的计算机(这似乎与我能找到的解决方案不同 - 所有其他问题都与“NAT hack”的缺失有关 - 我已经解决了!)
- 但是我无法访问互联网
从服务器推送到客户端的配置是:
'PUSH_REPLY,redirect-gateway autolocal bypass-dhcp,dhcp-option DNS 8.8.8.8,dhcp-option DNS 8.8.4.4,redirect-gateway defl,route 10.8.0.1,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5' (status=1)
如您所见,提供了有效的(谷歌)DNS,所以据我所知这不是问题。“redirect-gateway autolocal”应该负责互联网访问,但它没有。“redirect-gateway dfl”没有改变任何东西。
我很确定我缺少额外的 iptable 行或路由......但我不知道它应该是什么。
澄清一下:我正在寻找一种通过 VPN 访问互联网的方法,而不是让流量通过 VPN!而且,我无法从客户端 ping 8.8.8.8,所以 DNS 不是问题所在。
编辑:是的,我启用了 IPV4 转发。我认为如果没有它,本地 LAN 将不可见。
pi@router:~ $ sysctl -a | grep net.ipv4.ip_forward
net.ipv4.ip_forward = 1
答案1
现在我明白你的问题了。你配置的 NAT 仅用于访问 LAN,要访问 WAN,你应该添加另一条规则iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
。
更新:检查 WAN 中私有 IP 是否被淹没的最简单方法是使用 tcpdump 检查 eth0 上的输出tcpdump -n -i eth0 | grep 192.168.0
。如果没有数据包,则一切正常。