我已经尝试了一段时间,但仍然没有成功。希望你能帮助我。
我有一台机器(Raspberry Pi),它具有:
- 静态本地 IP:192.168.1.131(eth0)
- 在子网 192.168.2.X(tun0)中运行的 OpenVPN 服务器
- Raspberry 通过 eth0 连接到路由器 (192.168.1.1),该路由器的一些端口转发到 Raspberry 的 IP - 我可以使用 ISP 提供的外部 IP 地址从 WAN 连接到我的服务
到目前为止一切顺利,一切都按预期进行。我的配置如下:一旦建立 tun0,我就会应用以下 iptable 规则:
iptables -t nat -I POSTROUTING -o tun0 -j MASQUERADE
iptables -I FORWARD -i tun0 -o eth0 -s 192.168.2.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
路由表如下:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.2.0 192.168.2.2 255.255.255.0 UG 0 0 0 tun0
192.168.2.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
现在我想添加 OpenVPN 客户端并将其设置为系统的默认互联网连接。一旦建立连接 (tun1),VPN 服务提供商就会应用新路由,但我无法使用外部 IP 从 WAN 连接到我的服务。
在这种情况下,路由看起来是这样的:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.159.0.145 128.0.0.0 UG 0 0 0 tun1
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
10.159.0.1 10.159.0.145 255.255.255.255 UGH 0 0 0 tun1
10.159.0.145 0.0.0.0 255.255.255.255 UH 0 0 0 tun1
45.86.203.67 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0
128.0.0.0 10.159.0.145 128.0.0.0 UG 0 0 0 tun1
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.2.0 192.168.2.2 255.255.255.0 UG 0 0 0 tun0
192.168.2.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
(我从 VPN 提供商处获取的 IP 是动态的)
据我了解,这是因为我的服务器现在通过 tun1 而不是 eth0 发送响应。我读过关于基于策略的路由的文章,但仍然无法让它正常工作。我设法路由了来自 192.168.1.1(路由器)的所有网络传入,并且来自 WAN 的连接开始工作,但在这种情况下,我无法从 LAN 中的其他机器进行连接。
提前感谢您提供任何有关如何正确解决此问题的提示。谢谢
答案1
我将问题归结为只有 2 个 WAN 活动连接,然后经过一番挖掘,我设法使其正常工作。 VPN 建立连接后,我调用:
echo 200 WAN >> /etc/iproute2/rt_tables
ip rule add from 192.168.1.131 table WAN priority 900
ip rule add iif eth0 table WAN priority 1000
ip route add default via 192.168.1.1 dev eth0 table WAN
ip route add 192.168.1.0/24 dev eth0 proto static scope link src 192.168.1.131 table WAN
现在我的默认网关是 TUN1(商业 VPN),但我仍然可以使用我的外部 IP 或从同一局域网 192.168.1.0/24 中的其他机器进行连接。
我注意到的最后一个问题是现在我无法连接到我在端口 1194 UDP 上托管的 VPN 服务器 (TUN0)。
所有其他使用 TCP 的服务均可访问,只有使用 UDP 的服务不可以——我在这里遗漏了什么?