Ip
為什麼總是有辦法讓數據包找到預設路由?
我有一個有趣的問題,我想了解更多。
這是我的以下規則列表:
# 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
. 在您的情況下,您可能會發現其他類型的路線很有趣prohibit
:unreachable
和blackhole
。