
我有一台有兩個介面的電腦:eth0
(IP 位址192.168.1.16
)和eth2
(IP 位址10.10.10.73
)。另外,我在main
表中的這台PC中有一條主機路由,其中表示如果目標位址是172.16.1.1
,則使用eth0
介面。
172.16.1.1
現在,當我從10.10.10.73
(介面)發送ICMP「回顯請求」時,然後使用來源IP (我已停用RPF)eth2
發送ICMP「回顯答案」 。由於該主機路由,這一切都符合預期。eth0
192.168.1.16
但是,當我在規則編號之後添加ip rule
選擇器from 10.10.10.73
和操作,並且表僅包含使用介面的預設路由時,ICMP“回顯回复”將從介面發送出去。lookup test
0
test
eth2
eth2
我很困惑這個選擇器如何from 10.10.10.73
匹配。在 ICMP「回顯回應」訊息的生命週期中,來源 IP 何時10.10.10.73
發生匹配?
答案1
根據使用 Linux 的策略路由書籍,從本機電腦發送到外部系統的資料包將在經過輸出鏈後進入路由策略資料庫,並且您的選擇器將在此處匹配從發送到from 10.10.10.73
的出站回顯應答資料包。10.10.10.73
172.16.1.1
從http://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH03.web.html:
考慮發送到內部服務的外部來源資料包的路徑。它進入系統並由入口資料包整理和標記階段 Pre-Route(1) 進行處理。在此階段,您將套用封包管理操作,例如 fwmark 和 TOS/QoS 標記或 NetFilter NAT。然後封包進入RPDB取得路由並路由到Input(2)鏈。輸入鏈為發送至本機服務的資料包提供防火牆功能。
相反的情況是發送到外部系統的源自內部服務的資料包的資料包路徑,例如上一段中描述的回复資料包。它退出本機電腦並進入提供防火牆功能的輸出(4)鏈。然後,它進入 RPDB 進行路由處理,並透過退出封包修改和標記階段 Post-Route(5) 退出系統。
答案2
選擇器from 10.10.10.73
匹配,因為回顯回復是從此位址發出的。但在這種情況下,不建議繼續這樣做。因為from 10.10.10.73
可以套用於 eth0 以外的其他介面的任何內容,在這種情況下會形成錯誤的路由。您應該to 172.16.1.1
在您的 ip 規則中使用。
匹配來源位址的事情與以下事實有關:使用ip rule
與專用查找表相關的路由決策使封包忽略src
來自此介面的路由指定的預設位址,就像您將在ip route list table local
發生的情況如下圖紅色部分所示:核心資料包傳輸圖
如果封包沒有ip rule
到達您的電腦進行本地處理,並且由於預設路由,回復來自 eth0(顯然具有 eth0 IP 位址)。由於ip rule add from 10.10.10.73 table test
路由程序變更了查找表,並且不使用儲存到目的地的路由的介面的預設 IP 位址,因此現在使用回覆介面的 IP 位址。