我有一台 Linux 服务器,上面有 2 个 IP 地址。一个是 ULA(fd00::/8),另一个是 GUA(2000::/3),两者都分配给环回接口。我的路由表包含src
路由上的属性,以明确强制 Linux 为特定目的地选择特定地址,尽管如此,并且尽管标准地址标签应该导致在目的地是 ULA 时使用 ULA,并且在以下情况下使用 GUA:目的地是一个不会发生的GUA。如果我运行,ip r g
我会得到src
与运行不同的结果ip r
,即使路由表中只有一条路由与给定的前缀匹配。此外,这种行为并不稳定,Linux 会在正确和错误的源地址之间随机切换,从而导致连接命中或丢失。
root@ninym:~# ip r g fd2e:9fea:c7ed:53::
fd2e:9fea:c7ed:53:: from :: via fe80::60:1 dev eth0 proto bgp src 2001:db8:60:2:: metric 20 pref medium
root@ninym:~# ip r | grep ^fd2e:9fea:c7ed:53::
fd2e:9fea:c7ed:53::/64 nhid 6 via fe80::60:1 dev eth0 proto bgp src fd2e:9fea:c7ed:6002:: metric 20 pref medium
编辑:所以这些路由来自 frr 通过 BGP,我有以下路由图。禁用此路由映射可以解决问题,尽管它并不理想。之所以这样设置,是因为我的一些服务器有多个 ULA,这使我能够确保始终选择正确的 ULA。我可以在此服务器上禁用它,因为该服务器没有多个服务器,但它会影响我的所有服务器,只是比其他服务器多一些。我不确定这是否是一个 frr bug 或者我的路线图是否做错了
route-map src_map permit 10
match ipv6 address gua
set src 2001:db8:60:12::
exit
!
route-map src_map permit 20
match ipv6 address ula
set src fd2e:9fea:c7ed:6012::
exit