既然我將路由配置為使用自訂路由表,為什麼涉及主表?

既然我將路由配置為使用自訂路由表,為什麼涉及主表?

我有以下情況:

- - - - - - -
| namespace |-------o      o------
- - - - - - -     vethY   ppp0
          vethX

在哪裡:

  • ppp0是PPP接口,其IP位址為192.168.100.169/24
  • vethX是命名空間內的虛擬乙太網路接口,其 IP 位址為 10.0.0.3/24
  • vethY是另一個虛擬乙太網路接口,其 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,為什麼會涉及主表?

相關內容