如果我有两条具有相同目的地的路由,系统是否应该选择与其源地址匹配的路由?我正在尝试使用from关键字将源地址约束路由添加到路由表中.
例如,我在接口e1中有一个地址为2001:db9:1 :: 2的主机.如果我添加到2001的正常路由: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.有任何想法吗?