![根据源 IP 路由到 VPN 或 ISP 的问题](https://linux22.com/image/726062/%E6%A0%B9%E6%8D%AE%E6%BA%90%20IP%20%E8%B7%AF%E7%94%B1%E5%88%B0%20VPN%20%E6%88%96%20ISP%20%E7%9A%84%E9%97%AE%E9%A2%98.png)
我正在尝试设置我的 DD-WRT 路由器,以便它根据请求机器的子网通过我的 VPN 或直接通过我的 ISP 引导流量。具体到我的情况,子网(192.168.0.0 或 2.0)是根据设备连接到的 SSID 分配的,这部分似乎运行良好。但是,所有流量似乎都通过 VPN,而不仅仅是来自 192.168.2.0 子网的流量,正如我所期望的那样。我一直遵循的说明来自这里:https://wiki.dd-wrt.com/wiki/index.php/OpenVPN_on_Dedicated_Wireless_Access_Point_(VAP)文章指出作者未能使其在某个版本之后正常工作,但他们的错误信息与 TLS 身份验证有关,但我认为这与此无关。
VPN 是 NordVPN,我遵循的连接说明如下:https://nordvpn.com/tutorials/dd-wrt/openvpn-gui/但有一点不同——我将我的 DNS 保持在 8.8.8.8 和 8.8.4.4,而不是 Nord 的 DNS。
这些是我在启动时运行的命令(45 秒似乎足以让 VPN 成功连接):
sleep 45;
tun_name=$(ifconfig | sed -n 's/.*\(tun[^ ]\).*/\1/p');
tun_addr=$(ifconfig $tun_name | sed -nr 's/.*P-t-P:([^ ]+) .*/\1/p');
ip rule add from 192.168.2.0/24 table 200;
ip route add default via $tun_addr dev $tun_name table 200;
ip route flush cache;
变量tun_name和tun_addr决心tun1和10.8.8.247分别。
这些是运行的结果ip 规则显示
0: from all lookup local
32765: from 192.168.2.0/24 lookup 200
32766: from all lookup main
32767: from all lookup default
这些是运行的结果ip 路由显示
0.0.0.0/1 via 10.8.8.1 dev tun1
default via 112.205.0.1 dev vlan2
10.8.8.0/24 dev tun1 proto kernel scope link src 10.8.8.247
23.19.87.228 via 112.205.0.1 dev vlan2
112.205.0.0/19 dev vlan2 proto kernel scope link src 112.205.8.123
127.0.0.0/8 dev lo scope link
128.0.0.0/1 via 10.8.8.1 dev tun1
169.254.0.0/16 dev br0 proto kernel scope link src 169.254.255.1
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.1
192.168.2.0/24 dev br1 proto kernel scope link src 192.168.2.1
据我所知,这个表应该可以工作。我尝试过的一件事是在刷新之前将其添加到我的启动脚本中,因为我认为该条目可能强制所有内容都通过 tun1:
ip route del 0.0.0.0/1 table main
但是,虽然条目被正确删除了,但这并没有帮助,所有流量仍然通过 VPN 发送。我遗漏了什么?
答案1
您的 VPN 连接已将所有内容路由到 VPN。它不会替换默认路由,而是创建两个更具体的路由。
0.0.0.0/1 via 10.8.8.1 dev tun1
128.0.0.0/1 via 10.8.8.1 dev tun1
通过删除0.0.0.0/1
上述地址的流量128.0.0.0
仍然会进入 VPN。
您必须删除两者,或避免接受来自 VPN 服务器的路由(请参阅 OpenVPNpull
选项)