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