为什么数据包总有办法找到默认路由?

为什么数据包总有办法找到默认路由?

我有一个有趣的问题,我想了解更多。

这是我的以下规则列表:

# 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 会进行下一次查找。

为了避免这种情况,您可以使用throwVPN 表末尾的路由类型,例如:

ip route add throw default table vpn

然后,如果 VPN 表中没有默认路由,查找将在那里停止。

检查 的手册页ip-route。您可能会对您的案例感兴趣的其他类型的路线:prohibitunreachableblackhole

答案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

相关内容