最上面的底线:我不能得到一个接收RAs的Linux盒子来使用RFC4191 “Default Router Preference”值来select更高优先级的路由。 相反,它首先学到的任何默认路线都是它所使用的,这对所有人都是不利的。 我错过了一个configuration选项,还是内核升级,或者我只是注定了所有时间 ?
长版本:
我有一个HA默认网关(VRRP / keepalived)的networking。 上游ISP将/ 48路由到网关,然后切割/ 64块分配给我的基础设施中的机器(以便它们可以将全局可路由地址分配给它们运行的容器)。 然后,每台机器通过radvd通告其容器/ 64到networking的其余部分(使用AdvDefaultLifetime 0来显示它没有默认路由)。 网关盒子也有容器运行,所以他们有自己的/ 64并且做广告,但是有AdvDefaultLifetime 30因为网关确实有默认路由。
我希望能够在网关上进行有状态的防火墙,所以两个方向上的所有stream量都需要经过HA网关对的同一个成员。 没关系,我可以这样做 – 一个keepalived具有更高的优先级,我只是告诉radvd在该机器上也以更高优先级通告其默认路由。 这样,如果“主”机器掉下来,所有的东西都会路由到另一台机器上,我们就可以。
除了… Linux似乎没有做任何事情的路由器偏好值。 我仔细研究了内核源代码,尽pipe它仔细保留了path标记中的值,而且rt6_score_route甚至看起来像是根据首选项做了一些事情 ,但我在生产中观察到的行为(使用3.13内核的Ubuntu 14.04)是无论哪个默认路由首先被学习,哪一个都被使用,不pipe哪一个具有更高的优先级。
除了冒险改变radvdconfiguration文件(其中一个使用AdvDefaultLifetime 30 ,当MASTER和另一个使用AdvDefaultLifetime 0时, BACKUP )并且每当keepalived提升/降级时重新加载radvd,我该怎么做才能确保RA中具有更高优先级的路由首选?
最近的Linux内核具有你所要求的function。 如果configuration内核,请设置CONFIG_IPV6_ROUTER_PREF ,请参阅Networking support -> Networking options -> The IPv6 protocol -> Router Preference (RFC 4191) support 。 如果您的发行版默认closures此function,则可能需要重新编译内核。