我们有一个 Linux (debian) 服务器,它有两个连接到同一交换机的 NIC。(我们曾经有一个交换机专门用于我们的服务器之间的流量,但是当我们的大多数服务器移动到一个 colo 设施时,交换机也移动了。)这些 NIC 具有不同的静态 IP 地址,但大约每月一次,arpwatch 会发送一对当其中一个 IP 从一个接口反弹到另一个接口并返回时触发消息。这可能是什么原因造成的?
我们有一个 Linux (debian) 服务器,它有两个连接到同一交换机的 NIC。(我们曾经有一个交换机专门用于我们的服务器之间的流量,但是当我们的大多数服务器移动到一个 colo 设施时,交换机也移动了。)这些 NIC 具有不同的静态 IP 地址,但大约每月一次,arpwatch 会发送一对当其中一个 IP 从一个接口反弹到另一个接口并返回时触发消息。这可能是什么原因造成的?
这可能与同一网络上具有多个 NIC 的 Linux ARP 行为有关,并且已在此服务器故障问题中进行了讨论。基本上你需要设置一些sysctl参数:
这些将导致 ARP 回复仅在实际拥有 ARP 请求中请求的 IP 地址的网络接口上发出。
正如上面提到的问题中提到的,这是因为默认情况下,在 Linux 中主机拥有一个 IP,而不是特定的接口,因此回复将在它选择的任何接口上发出。当您在同一网络上有多个接口时,这可能会导致问题,这正是上述 sysctl 参数所修改的内容。
如果它在 linux 上并且您正在使用 udev(可能是,它已经“标准”了几年了),您可以强制将 eth0 或 eth1 等分配给特定的 MAC 地址。
例如,我在工作中的 IBM x3655 文件服务器上的 /etc/udev/rules.d/70-persistent-net.rules 中有以下内容。它有 4 个 NIC,其中三个插入 3 个不同的 VLAN,最后一个插入“内部 Gb 骨干网”(机架中的专用千兆交换机,用于所有服务器间通信 - NFS、ntp、dns、rsync、 ETC)。显然,每个接口在重新启动时获得相同的名称和相同的 IP 地址是至关重要的:
我没有答案,但也许是一个提示。不久前,我的一位同事提到特定网卡的 linux 驱动程序中存在错误。如果服务器有多个接口,这个错误显然会导致 MAC(!) 地址在接口之间反弹。我从来没有检查过这个,但我似乎记得这个 bug 应该是在 2.6.17 左右修复的。
只是为了向不熟悉 sysctl 的人阐明 Kamil 的解决方案,编辑此文件:
添加这两行:
然后运行:
使它们生效