IPv6、多个路由器以及 ICMPv6 RA 中可能出现的错误前缀通告

IPv6、多个路由器以及 ICMPv6 RA 中可能出现的错误前缀通告

我的网络上设置了两个“路由器”类型的设备。

一个是我的实际 IPv6 路由器 - Cisco 2621 ( fe80::xxxx:3e60)。它是正确的默认路由器。

另一个是 DLINK DIR-615 ( fe80::xxxx:5760)。它支持 IPv6,但目前仅配置为链路本地寻址,因为它仅用作 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

问题在于,我的客户现在可以选择默认路由器。一个路由器可以顺利地发送数据包,另一个则不然。我可以删除错误的路由,但当下一个 RA 出现时,它会被重新添加。

fe80::xxxx:3e60(正确的路由器)正在发送 RA,宣传 2001:xxxx:xxxx::/64 前缀(我的网络)

fe80::xxxx:5760(错误的路由器)正在发送 RA,宣传 fe80::/64(本地链路)前缀

那么...这是谁的错?

  • fe80::xxxx:5760当无法提供有效前缀时如何发送 RA?
  • fe80::xxxx:5760发送带有本地链路前缀的 RA?
  • 当我的客户端fe80::xxxx:5760发布链路本地前缀时,它是否会添加到路由表中?
  • 还有别的吗?

答案1

应该在 DLink 上禁用 radvd(路由器广告守护进程),至少在面向 Cisco 路由器的接口上禁用。

或者,您可以在 DLink 上设置到 Cisco 路由器的静态默认路由。这将使路由多一跳,但仍然有效,前提是 DLink 会将接口路由回 Cisco 路由器。

如果 WAN 端口是连接到 Cisco 路由器的端口,则 DLink 路由器不应在该链路上宣传路由。

编辑:您可能能够通过设置AdvRoutePreference high;和/或AdvDefaultPreference high;Cisco 路由器的 radvd 配置来影响路由。

编辑2:问题似乎是 DLink 路由器没有全局 IP 地址或路由。路由器的默认路由通常不会被发现,因此可能需要手动设置。

设置 IPv6 路由器首选项的步骤CISCO 文档是:

  1. 使能够
  2. 配置终端
  3. 接口类型编号
  4. ipv6 nd 路由器首选项 {高 | 中 | 低}

答案2

根据 RFC2461 §4.6.2:

路由器不应该发送链路本地前缀的前缀选项,并且主机应该忽略这样的前缀选项。

§6.2.1:

链路本地前缀不应包含在通告前缀的列表中。

因此,有人会认为,如果路由器没有提供有效前缀,它就不应该发送任何 RA。同样,如果主机看到没有有效前缀的 RA,它可能应该忽略它。

答案3

D-Link路由器有故障。

至少在 DIR-615 的硬件版本 C2 上(路由器上有一个标签,上面会标明您拥有的硬件版本),3.03WW 固件升级似乎会阻止它发送 RA。至少在本地链接模式下是这样(我还没有测试过其他选项)。

答案4

我认为这些缺陷包括来自 fe80:: 的前缀广告的奇怪之处、路由器在没有互联网连接时广告默认路由,以及固件和文档无法轻易弄清楚如何禁用默认路由。

但有一个很好的解决方法,至少对于我的带有固件 5.1 的 DIR-615 修订版 E3 来说是这样:

  • 转到高级/IPv6 配置页面。

  • 选择“无状态自动配置”。

  • 将 LAN IPv6 前缀设置为您正在使用的前缀。

  • 选择“启用自动配置”,选择“无状态”作为自动配置类型,并且(这是重要的部分)将“路由器通告有效期”设置为 0。

在 RA 中将路由器生存期设置为 0 意味着“这不是默认路由”。

我还没有找到禁用此路由器上的路由器广告的方法,但将其设置为我已经使用的前缀并将路由器生命周期设置为 0 对我来说已经足够了。实际上,您甚至不必将前缀设置为相同,但如果不这样做,您的接口和路由表将充斥着多余的地址和路由,而这些地址和路由几乎不会用于任何事情。

相关内容