我通过 VPN 连接,希望一些用户帐户绕过它。VPN 接口是tap0
(IP 是 172.16.xx),主接口是wlan0
(IP 是 192.168.10.3)。所有常规流量都通过 进入互联网tap0
。
我创建了第二张路由表并添加了一条uid
规则:
# ip route add default via 192.168.10.1 dev wlan0 proto static table 2
# ip rule add uidrange 1001-1001 table 2
# ip route show table 2
default via 192.168.10.1 dev wlan0
我预计用户的流量会通过源 IP 192.168.10.3 流出wlan0
。然而,受影响用户的流量具有接口的 IP wlan0
,但却通过错误的接口流出tap0
(然后无处可去)。如果没有规则,流量将正常通过tap0
。
奇怪的是,ip route get
结果和我预期的一样。规则如下:
$ ip route get 8.8.4.4
8.8.4.4 via 192.168.10.1 dev wlan0 table 2 src 192.168.10.3 uid 1001
cache
没有规则:
$ ip route get 8.8.4.4
8.8.4.4 via 172.16.0.1 dev tap0 src 172.16.0.102 uid 1001
cache
我还尝试将dev wlan0
和添加proto static
到路由表,但什么都没改变。我完全没有iptables
,所有策略都设置为ACCEPT
。我也试过了,iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
但没有帮助(显然是因为流量从 流出tap0
)。我还把rp_filter
所有地方都设置为零。
无论如何,用户都可以成功 ping wlan0
192.168.10.1 的网关。谢谢帮助。
该问题是由于缺少
scope link
属性引起的(但我不确定是否dhcp
有static
任何区别)。下表中的所有内容均按预期运行: