Linux 可以遵守 IPv6 路由通告偏好吗?

Linux 可以遵守 IPv6 路由通告偏好吗?

底线在前:我无法让接收 RA 的 Linux 机器使用RFC4191“默认路由器偏好”值优先选择优先级较高的路由。相反,它首先学习到的默认路由就是它使用的路由,这对所有人都不利。我是不是错过了配置选项,或者内核升级,或者我只是永远注定失败

长版本:

我有一个带有 HA 默认网关(VRRP/keepalived)的网络。上游 ISP 正在将 /48 路由到网关,然后我分割出 /64 块以分配给我基础设施中的机器(这样它们就可以为它们运行的​​容器分配全局可路由的地址)。然后,每台机器通过 radvd 将其容器 /64 通告给网络的其余部分(以AdvDefaultLifetime 0显示它没有默认路由)。网关盒有容器在运行,所以它们有自己的 /64 并进行宣传,但由于AdvDefaultLifetime 30网关有一个默认路线。

我希望能够在网关上进行状态防火墙,这样两个方向的所有流量都需要通过 HA 网关对中的同一个成员。没问题,我可以这样做——一个 keepalived 具有更高的优先级,我只需告诉该机器上的 radvd 也以更高的优先级通告其默认路由。这样,如果“主”机器掉线,所有东西都会路由到另一台机器,我们就没问题了。

但 Linux 似乎没有任何与路由器首选项值相关的内容。我仔细研究了内核源代码,虽然它小心翼翼地保留了路由标志中的值,甚至rt6_score_route看起来某物有了偏好,我在生产中观察到的行为(带有 3.13 内核的 Ubuntu 14.04)是,无论哪个具有更高的偏好,都会使用首先学到的默认路由。

除了对 keepalived 进行 haxxing 以更改 radvd 配置文件(一个带有AdvDefaultLifetime 30,when MASTER,另一个带有AdvDefaultLifetime 0when BACKUP)并在 keepalived 升级/降级时重新加载 radvd 之外,我还能做些什么来确保 RA 中优先级更高的路线得到优先考虑?

答案1

最近的 Linux 内核具有您要求的功能。如果您配置内核,请设置CONFIG_IPV6_ROUTER_PREF,请参阅Networking support -> Networking options -> The IPv6 protocol -> Router Preference (RFC 4191) support。如果您的发行版默认关闭此功能,则可能需要重新编译内核。

相关内容