![处理冲突子网时的 Linux 内核行为](https://linux22.com/image/656965/%E5%A4%84%E7%90%86%E5%86%B2%E7%AA%81%E5%AD%90%E7%BD%91%E6%97%B6%E7%9A%84%20Linux%20%E5%86%85%E6%A0%B8%E8%A1%8C%E4%B8%BA.png)
我正在使用 openconnect 连接到我的办公室 VPN。他们推行了一些非常糟糕/激进的路由规则,分配了所有私有 IP 地址空间 >.<
连接到办公室 VPN 后,我的主路由表包含以下路由(实际上它包含更多路由,但这些是冲突子网):
192.168.0.0/24 dev p4p1 proto kernel scope link src 192.168.0.200
192.168.0.0/16 dev tun0 scope link
如您所见,所有到 192.168.0.0/16 的流量都应该通过 tun0 路由。但奇怪的是事实并非如此。
如果我 ping 我家里的 LAN(192.168.0.0/24)中的一台机器,ICMP 数据包会到达该机器,而且通常一切正常,因此我假设发往 192.168.0.0/24 的数据包不会通过 VPN 连接。
我的问题是,Linux 内核如何处理冲突子网?我怀疑它选择使用最精确的路由,在本例中是 192.168.0.0/24。您能否给我指出一份描述此情况的文档或提供一些提示?
答案1
实际上并没有发生冲突。一个子网具有更具体的掩码
192.168.0.0/24 has more specific mask than 192.168.0.0/16
例如,默认网关是默认的,因为它具有不太具体的掩码/0。
如果您通过另一个接口添加到 192.168.0.3/32 的路由,它将具有比其他两个路由更具体的掩码。