我有以下情況:
- - - - - - -
| namespace |-------o o------
- - - - - - - vethY ppp0
vethX
在哪裡:
ppp0
是PPP接口,其IP位址為192.168.100.169/24vethX
是命名空間內的虛擬乙太網路接口,其 IP 位址為 10.0.0.3/24vethY
是另一個虛擬乙太網路接口,其 IP 位址是 10.0.0.5/24,也是命名空間的預設網關
事實上,命名空間的路由表如下:
$ sudo ip netns exec my_namespace ip route
default via 10.0.0.5 dev vethX
10.0.0.0/24 dev vethX proto kernel scope link src 10.0.0.3
我想在這種情況下使用基於策略的路由;特別是當網路封包的傳入介面是vethY
或介面時,我想使用自訂路由表ppp0
。
我創建了名為“的自訂路由表”T1' 在文件中新增條目“T1” /etc/iproute2/rt_tables
。
然後我新增了策略路由規則,該規則將告訴系統何時使用這個新的路由表。
那麼現在的策略路由規則是:
$ ip rule
0: from all lookup local
32764: from all iif ppp0 lookup T1
32765: from all iif vethY lookup T1
32766: from all lookup main
32767: form all lookup default
然後我將以下規則新增到我的自訂表中
$ ip route show table T1
default via 192.168.100.169 dev ppp0
10.0.0.0/24 dev vethY scope link
192.168.100.180 dev ppp0 scope link
最後一行顯示了點對點連結的另一個端點。
此外,主路由表是空的。
使用此配置,如果我進入命名空間並 ping 10.0.0.5,我不會收到答案(也不會收到 ARP 回應)。
請求封包到達 vethY 介面(我已經使用wireshark 看到過),但沒有產生答案。
如果我的 arp 快取為空,則發送 arp 請求時不會發回 arp 回覆。
相反,如果我也將規則添加
10.0.0.0/24 dev vethY scope link
到主表中,則所有資料包都會以正確的方式流動。
如果我不將此規則新增到主表中,為什麼我不會收到答案?
既然我將路由配置為對來自 vethY 或 ppp0 的所有資料包使用 T1,為什麼會涉及主表?