Linux
每個自定義路由表(帶預設網關)是否需要連結範圍路由?
我的 Centos 機器有一個自定義路由表
foo_table
,其中只包含一個預設網關路由:# ip route add default via 10.0.2.1 table foo_table # ip route show table foo_table default via 10.0.2.1 dev bond0.2
策略規則使用下表路由來自 10.0.2.22 的所有流量:
# ip rule show 0: from all lookup local 32765: from 10.0.2.22 lookup foo_table 32766: from all lookup main 32767: from all lookup default
當我從 10.0.2.22 Centos 機器跟踪路由到同一本地子網上的另一台機器時,數據包首先被路由到路由器,然後到伺服器:
# traceroute -In 10.0.2.60 traceroute to 10.0.2.60 (10.0.2.60), 30 hops max, 60 byte packets 1 10.0.2.1 3.573 ms 3.972 ms 4.219 ms 2 10.0.2.60 1.461 ms 1.494 ms 1.700 ms
自然,我希望本地流量不要像這樣不必要地涉及路由器。
在
main
路由表中,當然有本地子網的鏈路範圍路由:10.0.2.0/24 dev bond0.2 proto kernel scope link src 10.0.2.22
我的理解是,因為
foo_table
之前諮詢過main
(根據ip rule show
),所以使用通過 10.0.2.1 in 的預設路由foo_table
,即使目的地是連結本地地址。這是否意味著我也必須添加一個連結範圍路由
foo_table
?# ip route add 10.0.2.0/24 dev bond0.2 scope link table foo_table # ip route show table foo_table 10.0.2.0/24 dev bond0.2 scope link default via 10.0.2.1 dev bond0.2
它似乎可以解決問題,但這是正確的方法嗎?
# traceroute -In 10.0.2.60 traceroute to 10.0.2.60 (10.0.2.60), 30 hops max, 60 byte packets 1 10.0.2.60 0.339 ms 0.355 ms 0.399 ms
我對正在發生的事情的理解是否正確?(我對路由的經驗很少。)
你知道這樣做的目的
foo_table
是什麼嗎?對我來說,它的效果似乎是通過路由器路由來自 10.0.2.22 介面(包括到本地子網)的所有流量,你說這是你不想要的。的內容是/etc/iproute2/rt_tables
什麼?您也沒有說明main
表中的預設路由是什麼。為避免這種情況,請
foo_table
按照您的建議添加子網路由,或者僅刪除規則:ip rule del from 10.0.2.22 lookup foo_table
據我所知,您不需要指定
scope link
將子網路由添加到foo_table
,只需ip route add 10.0.2.0/24 dev bond0.2 table foo_table
因為無論如何您都在指定與連結對應的前綴。也許我是誤會了。
((順便說一下,為了簡單起見,我認為
default
主表中的路由可以移動到default
表中,但default
按照慣例顯示為空,可能是因為預設路由取決於配置的介面。))