我的网络上有一个单播泛滥问题,这始于我将一些软件移动到虚拟化来宾。它似乎与此处报告的内容非常相似:Switch flooding when bonding interfaces in Linux。这个问题可以追溯到 2012 年......所以也许现在有更好的解决方案,也许是在 Linux/KVM 方面。
在下文中,我将尝试解释我执行的架构和故障排除步骤。我希望有人能给我一些提示,也许是一个解决方案!提前致谢!
建筑学
服务器
带有 PROXMOX 4.1 和多个 Windows 虚拟机的 Linux 主机。
主机有 4 Gbit 以太网接口(MAC 地址为 A、B、C 和 D),使用 balance-tlb 方法绑定。
然后将绑定桥接到虚拟机。因此,每个 VM 都有自己的 MAC 地址(MAC 地址为 X、Y、Z...)。
托管在虚拟机上的软件与现场的许多设备进行交互。
网络
服务器连接到瞻博网络交换机,然后连接到广泛的思科网络。一切都是2级。
问题
在思科网络上,我不时看到单播风暴。似乎他们每 5 分钟或多次开始。我分析了流量,突然发现从某些设备到某个虚拟机的流量(反之亦然)被复制到交换机的所有物理端口(在同一个 VLAN 上)。几秒钟后问题就单独解决了。
主意
阅读Cisco文档(关于单播泛洪和MAC“老化时间”)以及上述链接,我发现问题可能是由于虚拟机的MAC地址在网络上出现的频率不高,所以之后在一定的“老化时间”之后,交换机开始将此类流量转发到所有端口,直到它们发现主机所在的位置。
故障排除
我在网络上连接了一台笔记本电脑,并开始从一个虚拟机 ping 它。我嗅了嗅笔记本电脑上的数据包。
从这里我可以看到:
来自虚拟机的 ARP 请求,使用它自己的 MAC 地址作为 MAC 源(比如说 X)
来自笔记本电脑的 ARP 回复,将其自己的 MAC 地址 (L) 用作 MAC 源,并将 VM MAC 地址 (X) 用作目标
来自虚拟机的 ping 请求,使用绑定的物理以太网端口的 MAC 地址之一(A、B、C、D,并在其中三个之间不时切换)作为 MAC 源并作为 MAC 目标 L
ping 来自笔记本电脑的回复,使用 MAC 源 L 和 MAC 目标虚拟机 MAC 地址 (X)
基本上,除了第一个 ARP 请求外,虚拟机似乎永远不会以自己的 MAC 地址 (X) 出现在笔记本电脑上,但总是以 A、B、C 或 D(随时间变化)出现。但是,笔记本电脑总是响应 X。
解决方案?
我读到在 balance-tlb 模式下可以根据负载从不同的接口发出流量。但是,我认为这种行为与虚拟机出现在网络上并带有正在使用的物理接口的源 MAC 地址这一事实可能会产生我报告的问题。
如果这是正确的,是否有人知道是否有办法始终强制每次通信使用 VM 自己的 MAC 地址?(例如,它已经发生在 ARP 请求中)或者解决方案可能在其他地方?
我以为我可以设置 Windows 虚拟机每 3 分钟重置一次 ARP 表......但这对我来说似乎有点太暴力了...... :)
再次感谢任何帮助!
编辑:我确认如果在洪水事件期间我快速登录到相应的 VM 并发出 ARP 表重置,我会看到来自 VM 的新 ARP 请求(将其自己的 MAC 地址告诉网络)并且风暴立即停止。
Balance-tlb(模式 5)和 balance-alb(模式 6)不适用于虚拟网桥。它们会导致广播循环,在某些情况下会重写数据包中的源 MAC,并且模式 6 会根据设计拦截 ARP。
您需要使用不带交换机配置的 active-backup(模式 1),或带交换机配置的 balance-xor(模式 2)或 802.3ad(模式 4)。
您还可以在交换机配置中使用循环(模式 0)或广播(模式 3),但这些对 TCP 流性能不利。
https://en.wikipedia.org/wiki/Unicast_flood 您的 ::::::::""""主机的 ARP 计时器可能比交换机上的地址缓存超时时间长....."""" ” 根据文章。尝试将您的 KVM 虚拟机管理程序主机和 VM 主机的 ARP 计时器设置为比交换机本身短,它们通过物理以太网端口连接到交换机本身。请让我们知道您发现了什么。并与我们。谢谢。