Ip

為什麼總是有辦法讓數據包找到預設路由?

  • August 8, 2021

我有一個有趣的問題,我想了解更多。

這是我的以下規則列表:

# 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找不到規則,則它必須失敗。

我已將以下規則添加到路由表

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

但是,如果我刪除預設路由,包仍然會找到它的方式,它可以通過介面 eth0 出去。

是的,因為在 vpn 表中不再有匹配項,並且 ip route 進入下一個查找。

為避免這種情況,您可以throw在 vpn 表的末尾使用路由類型,例如:

ip route add throw default table vpn

然後,在 vpn 表中沒有預設路由的情況下,查找將在那裡停止。

檢查手冊頁以獲取ip-route. 在您的情況下,您可能會發現其他類型的路線很有趣prohibitunreachableblackhole

引用自:https://unix.stackexchange.com/questions/663737