我的networking上有两个“路由器”types的设备。
一个是我的实际IPv6路由器 – Cisco 2621( fe80::xxxx:3e60 )。 这是正确的默认路由器。
另一个是DLINK DIR-615( fe80::xxxx:5760 )。 这是IPv6的意识,但目前只configuration为链接本地寻址,因为它只是作为一个WAP使用。
这两个设备都发送ICMPv6 RA消息,因此都将被添加到我的客户的路由表中:
$ ip -f inet6 route | grep default default via fe80::xxxx:3e60 dev wlan0 proto kernel metric 1024 expires 1741sec mtu 1500 advmss 1440 hoplimit 64 default via fe80::xxxx:5760 dev wlan0 proto kernel metric 1024 expires 1791sec mtu 1500 advmss 1440 hoplimit 64
事实上,我的客户现在可以select默认路由器。 一个快乐地发送数据包在路上,另一个没有。 我可以删除不正确的路由,但当下一个RA出现时,它会被重新添加。
fe80::xxxx:3e60 (正确的路由器)正在发送广告前缀为2001:xxxx:xxxx :: / 64(我的networking)的RA,
fe80::xxxx:5760 (不正确的路由器)正在发送通告fe80 :: / 64(链路本地)前缀的RA,
那么…谁在这里过错?
fe80::xxxx:5760当不能提供有效的前缀时发送RA? fe80::xxxx:5760用链路本地前缀发送RA? fe80::xxxx:5760的路由表时,它是通告链路本地前缀? 至less在面向Cisco路由器的接口上,DLink上应该禁用radvd(路由器广告守护进程)。
或者,您可以在DLink上设置到Cisco路由器的静态默认路由。 这将使路由一跳更长,但仍然有效,假设DLink将路由回到Cisco路由器的接口。
如果WAN端口是连接到Cisco路由器的那个端口,那么DLink路由器不应该在该链路上通告路由。
编辑:您可以通过设置AdvRoutePreference high;影响路由AdvRoutePreference high; 和/或AdvDefaultPreference high; 在Cisco路由器的radvdconfiguration。
编辑2:问题似乎是DLink路由器没有全局IP地址或路由。 路由器的默认路由通常不会被发现,因此可能需要手动设置。
从CISCO文档设置ipv6路由器优先级的步骤是:
根据RFC2461§4.6.2:
路由器不应该为链路本地前缀发送前缀选项,主机应该忽略这样的前缀选项。
§6.2.1:
链路本地前缀不应包含在公布的前缀列表中。
所以人们会认为,如果路由器没有提供有效的前缀,则根本不应该发送任何RA。 同样,如果主机看到一个没有有效前缀的RA,它应该可以忽略它。
D-Link路由器出现故障。
至less在DIR-615的硬件版本C2(在路由器上会有一个标签,表示你有哪个硬件版本),3.03WW的Fireware升级似乎阻止了它发送RA。 至less在本地链接模式下是这样(我还没有testing过其他选项)。
我想说的是,这些故障包括来自fe80 ::的前缀广告的怪异特性,路由器在没有互联网连接的情况下发布默认路由,以及固件和文档并不容易弄清楚如何禁用默认路由。
但有一个很好的解决方法,至less对于我的固件版本为5.1的DIR-615修订版E3来说:
进入高级/ IPv6configuration页面。
select“无状态AUtoconfiguration”。
将LAN IPv6前缀设置为您正在使用的那个。
select“启用自动configuration”,为自动configurationtypesselect“无状态”,并且(这是重要的部分)将“路由器广告生存期”设置为0。
在RA中将路由器生存期设置为0意味着“这不是默认路由”。
我还没有find一种方法来禁用路由器广告在这个路由器,但设置为我已经使用的前缀,并将路由器的生命周期设置为0对我来说已经足够了。 甚至不需要将前缀设置成相同的,但是如果你不这样做的话,你的接口和路由表将会混杂在额外的地址和路由中,而这些地址和路由将不会被使用。