我有一个有趣的问题,我想了解更多。
这是我的以下规则列表:
# ip rule show
0: from all lookup local
32761: from all to 188.40.122.95 lookup vpn
32762: from all to 178.63.26.145 lookup vpn
32763: from all to 176.9.71.146 lookup vpn
32764: from all to 159.69.66.229 lookup vpn
32765: from 192.168.100.0/28 lookup vpn
32766: from all lookup main
32767: from all lookup default
VPN 表如下所示
# ip route show table vpn
default dev tun0 scope link
192.168.100.0/28 dev eth0 scope link
如果我向 IP 地址发送 ping,88.40.122.95
则出站接口是tun0
,这是可以理解的,因为table vpn
我们在其中找到了默认路由。
但是,如果我删除默认路由,包仍然会找到它的路径,并且它可以通过接口出去eth0
。
为什么这样?我希望指定这些规则
32761: from all to 188.40.122.95 lookup vpn
32762: from all to 178.63.26.145 lookup vpn
32763: from all to 176.9.71.146 lookup vpn
32764: from all to 159.69.66.229 lookup vpn
数据包必须遵守表中的规则vpn
,如果表没有任何默认值,则数据包应该失败。
这种设计的原因是因为我希望为这些 IP 生成的流量仅通过且仅通过 发出tun0
,如果由于某种原因default
未找到规则,那么它一定会失败。
答案1
但是,如果我删除默认路由,该包仍然会找到路径,并且可以通过接口 eth0 出去。
是的,因为 vpn 表中不再有匹配项,并且 ip Route 会进行下一次查找。
为了避免这种情况,您可以使用throw
VPN 表末尾的路由类型,例如:
ip route add throw default table vpn
然后,如果 VPN 表中没有默认路由,查找将在那里停止。
检查 的手册页ip-route
。您可能会对您的案例感兴趣的其他类型的路线:prohibit
、unreachable
和blackhole
。
答案2
我已将以下规则添加到路由表中
ip route add unreachable default metric 100 table vpn
它是这样的:
➜ ip route show table vpn
default dev tun0 scope link
unreachable default metric 100
192.168.100.0/28 dev eth0 scope link
因此,当默认路由表存在时,流量可以出去,但当默认路由表不存在时,将匹配具有度量的规则100
,因此 Internet 将无法访问。
经过测试,它有效。感谢 AB 指出手册页,也感谢 Eduardo