缓解 IPv6 格式错误的数据包组播泛洪

网络工程 思科 ipv6 思科-ios cisco-6500 多播
2021-07-23 01:13:20

所以我们今天早上刚刚在网络中遇到了第一次 IPv6 多播泛洪。我们设法通过以下方式阻止了 mac 地址来阻止有问题的计算机: mac-address-table static x.x.x vlan x drop

在我们阻止 mac 地址之前,我们开始了 Wireshark 捕获,以便我们稍后分析数据包。

查看数据包后,似乎淹没网络的数据包已损坏 IPv6 DHCP 请求联系 IPv6 多播地址 33:33:00:01:00:02。

洪水的影响有点奇怪,唯一似乎受影响的是正常的 IPv4 DHCP 请求,普通客户端无法获得 IP 地址,但是在洪水开始之前已经拥有 IP 地址的那些人没有遇到任何问题...... CPU 的在交换机上也达到了 95-100% 的峰值,但似乎没有影响正常的流量交换/路由操作。

我们需要帮助确定的是,仅 30mbps 的 IPv6 多播流量如何才能将 6509 SUP720 上的 CPU 推到 100%,并使正常的 IPv4 DHCP 停止工作,以及如何在这种情况再次发生时保护自己免受这种情况的影响。

每个访问/客户端端口具有以下配置:

 switchport access vlan x
 switchport mode access
 switchport nonegotiate
 switchport block multicast
 switchport block unicast
 switchport port-security maximum 2
 switchport port-security
 switchport port-security aging time 2
 switchport port-security violation restrict
 switchport port-security aging type inactivity
 storm-control broadcast level 5.00 4.00
 storm-control multicast level 5.00 4.00
 spanning-tree portfast
 spanning-tree bpduguard enable

风暴控制组播不是应用于 IPv6 组播吗?

这是 Wireshark 捕获的摘录,其中包含Dropbox 上“邪恶”数据包

以及一些图表来说明影响:

CPU 尖峰图

我们还调查了有问题的计算机,但找不到原因或无法重现问题...

1个回答

背景

我在某个地方阻止了 Dropbox 下载,所以我看不到捕获的流量,但我会继续假设这些是 64 字节的以太网多播。

让我们做一些数学计算,看看你允许多少流量......

一个 64 字节的帧是 672 位(包括前导码/SFD 的 8 个字节,IFG 的 12 个字节)...

8*(8 + 12 + 64) = 672 位

这意味着线速千兆以太网 64 字节帧约为 1.488Mpps...

(1000000000 / 672.0) = 1488095.24 pps

这对你意味着什么?好吧,您当前的风暴控制配置将流量限制为线速的 5%,因此您允许 74.4kpps 的流量在风暴控制开始之前到达您的交换机。74.4kpps * 64 字节帧是 38Mbps,这是正确的您的图表显示的内容:

回答

因此,底线是您允许过多的流量到达交换机 CPU,这就是 CPU 利用率高的原因。74.4kpps 实在是太大了,无法让任何交换机 CPU 处理。

假设这些站不应该发送大量多播或广播,简单的答案是像这样限制您的流量......

   ! Note that broadcast traffic has the ethernet I/G bit set
   ! which means it is also classified technically as a multicast
   ! for storm-control purposes.  Therefore set your broadcast limit
   ! a little lower than your multicast limit
   storm-control broadcast level 0.4 0.3
   storm-control multicast level 0.5 0.3

现在,当端口发送 6kpps 的广播(0.4% 1GE 线路速率)或 7.5kpps 的组合多播/广播(0.5% 1GE 线路速率)时,风暴控制就会启动。

仅供参考,可能值得研究控制平面策略,它可以保护交换机 CPU 免受多个端口的影响。请记住,要正确使用 CPP 可能很复杂,因此在将其部署到您的环境中之前进行充分测试是一个好主意。