我的系统运行的是armbian 11.6
它通过 wlan0 连接到互联网,工作正常。它还具有 openvpn (tun0) 连接。
我希望所有流量都通过 wlan0 路由,除了少数应使用 tun0 的程序之外。 VPN 服务器运行正常,NAT 配置正常。
在我的 armbian 系统上,我有以下路线:
default via 192.168.10.1 dev wlan0 proto dhcp metric 600
default via 10.8.0.1 dev tun0 metric 900
10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.52
169.254.0.0/16 dev wlan0 scope link metric 1000
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.100 metric 600
现在出现了运行例如curl的问题:这有效:
curl --interface tun0 https://api.ipify.org?format=json
这次超时:
curl --interface 10.8.0.52 https://api.ipify.org?format=json
有趣的是:当使用 IP 地址运行并使用 tcpdump 并行监控时,我看到源 IP 10.8.0.52 的出站数据包通过 wlan0 发出。显然这就是它失败的原因。
在能够指定源 IP 的其他应用程序中也观察到了相同的行为。
我怎样才能解决这个问题,即告诉系统使用IP所属的适配器?
另一个有趣的行为是,如果我将 wlan0 设置为比 tun0 更高的指标,则问题会以相反的方式发生。
答案1
路由(通常)位于目的地。拥有多个具有不同指标的默认路由是没有意义的。您必须使用基于源的策略路由。
ip ro del default via 10.8.0.1
ip rule add from 10.8.0.52/32 table 10
ip route add default via 10.8.0.1 table 10
查看man ip-rule
。