Linux

路由不正確匹配 - 網路無法訪問

  • March 6, 2017

如果我有兩條目的地相同的路線,系統不應該選擇與其源地址匹配的路線嗎?我正在嘗試使用from關鍵字將源地址約束路由添加到路由表。

例如,我有一個地址為2001:db9:1::2in interface的主機e12001:db9:1::3如果我在下面添加一條正常路線,則ping6可以正常工作:

root@pc:/# ip -6 route add 2001:db9:1::3 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 dev e1  metric 1024

from接下來,我使用未分配給我的任何介面的一些源地址添加一個帶有關鍵字的源約束路由:

root@pc:/# ip -6 route add 2001:db9:1::3 from 2001:db9:a::2 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 from 2001:db9:a::2 dev e1  metric 1024
2001:db9:1::3 dev e1  metric 1024

如果我現在嘗試 ping,我會收到一條網路無法訪問的消息。當系統看到第一個源約束條目不起作用時,它不應該嘗試第二個條目並成功嗎?

有趣的是,如果我添加帶有from說明符但源地址正確的路由,則選擇了正確的路由並且 ping 成功。

root@pc:/# ip -6 route add 2001:db9:1::3 from 2001:db9:1::2 dev e1
root@pc:/# ip -6 route
2001:db9:1::3 from 2001:db9:1::2 dev e1  metric 1024
2001:db9:1::3 from 2001:db9:a::2 dev e1  metric 1024
2001:db9:1::3 dev e1  metric 1024

(我也試過用2001:db9:1::1作為源,結果還是成功的,所以字典順序無關緊要)。因此,如果目標存在源約束路由,則似乎忽略非源約束路由。

我已經檢查了核心配置(版本 4.9.13)並IPV6_SUBTREES已啟用。有任何想法嗎?

似乎在同一個路由表中混合正常路由和源特定路由會導致意外行為。這在 linux 核心原始碼的 net/ipv6/Kconfig 中提到:

config IPV6_SUBTREES
   bool "IPv6: source address based routing"
   depends on IPV6_MULTIPLE_TABLES
   ---help---
     Enable routing by source address or prefix.

     The destination address is still the primary routing key, so mixing
     normal and source prefix specific routes in the same routing table
     may sometimes lead to unintended routing behavior.  This can be
     avoided by defining different routing tables for the normal and
     source prefix specific routes.

     If unsure, say N.

將源受限路由放在單獨的路由表中會產生正確的行為。

引用自:https://unix.stackexchange.com/questions/349301