最近,我遇到了一些问题,即不正确的 MAC 地址正在填充在云提供商的云中运行的某些 Windows VM 的 arp 表。例如,如果我 ping 10.1.2.3,某些 Windows VM 显示的 MAC 地址与大多数其他 VM 不同。结果是这几个 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 地址,是什么原因?
我们也遇到了这个问题,它在我们的 EKS Windows 节点重新启动后发生。我们有节点加入 GMSA 的域,这需要重新启动,因此这些实例立即发现了问题。
我打开了一张支持票,他们提供的解决方法是让关闭脚本运行以下
据说出口很重要,因为它可以防止在一段时间内挂起关机。
我使用这个答案作为自动化这个过程的基础 - https://stackoverflow.com/a/47709154
如果您不拥有另一台设备,我假设这是因为它位于完全不同的网络上,这意味着您不会看到它的 MAC 地址,而是最靠近您的设备上的那个,它将流量路由到另一个最终设备。
请记住,端到端通信不会发生在数据链路层(即第 2 层)。
这里最可能的情况可能是您的某些虚拟机和操作系统级别的路由设置不正确,而不是您的云提供商的网络路由表......或者它们位于不同的网络(可能是 AWS 子网?)并且有不同的路由表。
也将其添加为 aswer。
一些云提供商对网络有非常独特的看法,并以一种网络专业人士会觉得很离谱的方式来处理它;然而,这就是他们的工作方式,我们必须处理它。
在 Azure 中,MAC 地址没有任何意义。所有 ARP 表条目始终指向
12-34-56-78-9a-bc
,因为所有 Azure 网络都在 IP 层处理,并且 ARP 不存在或根本不工作;Azure VM 不能简单地大喊“我有这个 IP 地址”(又名“免费 ARP”),因为 Azure 平台需要知道它才能将流量路由到该 VM。Azure 集群以一种奇怪的方式工作,以至于您必须在集群前面放置一个非常不寻常的负载均衡器。老实说,我不知道这在 AWS 中是如何工作的,但我想这很奇怪,如果不是更糟的话。