MLD 侦听交换机阻止了 IPv6 邻居发现

网络工程 交换 ipv6 多播
2021-07-07 13:11:29

我最近注意到我的 IPv6 多播流量被广播到所有连接到交换机的主机,即使是那些没有订阅流量的主机。

为了解决这个问题,我在交换机上启用了 MLD 监听,这解决了这个问题 - 现在只有那些订阅了给定多播组的主机才能接收流量,太好了。

然而,这破坏了网络上的基本 IPv6 功能,我无法再连接到(甚至 ping)连接到同一台交换机的主机。

问题原来是 IPv6 邻居请求数据包被发送到ff02::1:xxxx:xxxx交换机没有转发的形式的多播地址,因为它似乎决定没有人订阅这些多播组。

我的问题是,这是交换机 IPv6 固件中的错误,是因为我没有正确配置 MLD 侦听,还是因为我需要配置每个主机以发送那些特定多播组的 MLD 订阅?

我不确定 MLD 侦听和这些 IPv6 消息的正确行为是什么。主机是要订阅这些组,还是交换机要转发这些请求?如果要始终转发它们,那么所有寻址到的数据包ff02::/16是要转发而无需订阅,还是仅转发 ICMP6 流量?交换机确实在ff02::1没有任何订阅的情况下转发类似地址的数据包,这让我认为您不应该订阅此流量,但是我发现很难相信几乎立即中断所有 IPv6 流量的某些东西会被忽视这么久。

不幸的是,该交换机早已停止支持并且不再获得固件更新(Cisco 2975),但在我开始更换它之前,我想确保它实际上是一个固件错误,而不是我刚刚配置错误的东西即使使用新开关也保持不变!

1个回答

因此,在进行了更多研究之后,这似乎是IPv6 的一个已知问题,并且设计的 MLD 侦听与 ND 有点不兼容

交换机总是将每个客户端隐式订阅到某些多播组,例如,ff02::1自从发现此问题以来,它们现在还根据 IPv6 ND 使用的 MAC 地址将每个客户端隐式订阅到另一个多播组。这确保即使 MLD 侦听处于活动状态,IPv6 邻居请求消息也会将其发送到预期主机(而不是其他主机,如 ND 协议最初预期的那样)。

就我而言,看起来我的交换机已经足够老了,直到上次固件发布后才出现此问题。

由于交换机允许我添加静态多播组,我可以通过手动将 IPv6 ND 多播地址添加到每个端口来解决这个问题,但由于这是基于 MAC 地址的,它会有效地将每个端口锁定到特定的 MAC 地址和维护起来会很头疼。

看来终于到了更换这个开关的时候了。