Linux

ip 規則不應該打敗 ip route

  • February 21, 2018

我正在執行 CentOS 並且正在使用ip routeandip rule進行路由。

我目前有一個ip rule

from 10.8.23.0/28 table 1234

ip route

default via 10.8.23.254 eth1
10.10.10.10 via 10.10.10.1 eth1
10.0.0.0/14 dev test-interface table 1234

看來我ip rule的第二行成功了ip route,所以即使目標 IP 是 10.10.10.10,test-interface如果源 IP 是,我的數據包仍然會通過發送10.8.23.0/28

即使源 IP 與規則匹配,我如何確保它10.10.10.10 via 10.10.10.1 eth1推翻了“p 規則”?希望它有意義:)

測試ip route get 10.10.10.10給了我:

10.10.10.10 via 10.10.10.1 dev eth1  src 10.8.23.1

ip route get 10.10.10.10 src 10.0.0.13給了我:

10.10.10.10 via 10.10.10.254 dev test-interface  src 10.8.23.1

因此src IP優先於目標 IP。

您可以簡單地想到ip rule,這是一種創建/擁有更多 ip 路由表(不僅僅是預設路由表)的方法。

要解決您的問題,您需要添加另一個ip rule條目來處理您的特定路線案例。例如,您可以使用以下命令:

$ sudo ip rule add to 10.10.10.10/32 lookup 123 priority 10

在這裡,我假設10它足夠小,可以成為第一個ip rule. 這取決於 的輸出ip rule ls。它將根據優先級向您顯示所有規則(較小的值意味著較高的優先級並首先顯示)。

如果您需要在您的 中結合源和目標檢查ip rule,您可以使用:

$ sudo ip rule add from 10.8.23.0/28 to 10.10.10.10/32 lookup 123 priority 10

該表123應包含正確的路線,例如:

$ sudo ip route add 10.10.10.10/32 via 10.10.10.1 table 123

引用自:https://serverfault.com/questions/898192