最近我遇到了一些问题,在云提供商的云中运行的一些 Windows VM 的 arp 表中填充了错误的 MAC 地址。例如,如果我 ping 10.1.2.3,一些 Windows VM 会显示与大多数其他 VM 不同的 MAC 地址。结果是这几台 Windows VM 无法访问 10.1.2.3,但其余 VM(Windows 和 Linux)都可以访问它。
运行数据包捕获后,错误 MAC 地址的来源似乎是 MS-NLB-PhysServer-XX_,它包含在wireshark 的发布列表。但我没有运行任何类型的 MS-NLB,因此对于该来源是什么非常困惑。我的云提供商说它不是来自他们。我的问题是:
- 如果我不拥有该设备,是否有一个好的方法可以根据其 MAC 地址识别源设备?即 - 我想知道它是否来自我们的云提供商的负载均衡器。
- 是什么原因导致该源设备向其他设备发送错误的 MAC 地址?例如,为什么 10.1.2.3 和其他新创建的网络接口的 MAC 地址是错误的?
- 为何只有一部分虚拟机从该源获取坏的 MAC 地址,而同一子网中的其他虚拟机从其他源获取好的 MAC 地址?
答案1
我们也遇到了这个问题,这种情况在我们的 EKS Windows 节点重启后发生。我们有一些节点加入了 GMSA 域,这需要重启,因此这些实例立即出现了问题。
我打开了支持单,他们提供的解决方法是让关机脚本运行以下内容
powershell.exe /c "get-hnsendpoint | remove-hnsendpoint"
exit
退出很重要,因为它可以防止在关机一段时间后挂起。
我使用这个答案作为自动化这个过程的基础 -https://stackoverflow.com/a/47709154
答案2
如果您不拥有另一台设备,我假设这是因为它位于完全不同的网络上,这意味着您将看不到它的 MAC 地址,但可以看到最靠近您的设备上的 MAC 地址,该地址会将流量路由到另一台最终设备。
请记住,端到端通信不会发生在数据链路层(即第 2 层)。
最可能的情况是,你的路由设置不正确一些您的虚拟机和操作系统级别,而不是云提供商的网络路由表……或者它们位于不同的网络(可能是 AWS 子网?)并具有不同的路由表。
答案3
也将其添加为答案。
多家云提供商均相当对网络有着独特的看法,并且以一种网络专业人士会觉得离谱的方式来处理它;然而,这是他们的工作方式,我们必须处理它。
在 Azure 中,MAC 地址毫无意义;所有 ARP 表条目始终指向12-34-56-78-9a-bc
,因为所有 Azure 网络都在 IP 层处理,而 ARP 根本不存在或不起作用;Azure VM 不能简单地大喊“我有这个 IP 地址”(又称“无偿 ARP”),因为 Azure 平台需要知道它才能将流量路由到该 VM。Azure 群集的工作方式非常奇怪,您必须在群集前面放置一个非常不寻常的负载平衡器。
老实说,我不知道这在 AWS 中是如何运作的,但我猜这同样奇怪,甚至更糟。