什么会导致同一台机器上的两个networking接口触发其IP地址?

我们有一台Linux(debian)服务器,它有两个连接到同一个交换机的网卡。 (我们以前有一个交换机专用于我们的服务器之间的stream量,但是当我们的大部分服务器移动到一个交换机也移动的colo设施。)这些网卡有不同的静态IP地址,但大约每月一次arpwatch将发送一对触发器消息作为其中一个IP从一个接口跳转到另一个接口。 什么可能导致这个?

这可能与在同一networking中有多个NIC的Linux ARP行为有关,并且在此服务器故障问题中已经讨论过。 基本上你需要设置一些sysctl参数:

net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2 

这些将导致ARP答复只出现在实际拥有ARP请求中请求的IP地址的networking接口上。

正如上面提到的问题所提到的,这是因为默认情况下,在Linux中,主机拥有一个IP,而不是一个特定的接口,所以答复将在任何它select的接口上出去。 当在同一networking上有多个接口时,这可能会导致问题,并且正是上述sysctl参数修改的内容。

如果是在Linux上,而且你正在使用udev(可能是几年前的“标准”),你可以强制将eth0或eth1等分配给特定的MAC地址。

例如我在工作的IBM x3655文件服务器上的/etc/udev/rules.d/70-persistent-net.rules中有以下内容。 它有4个网卡,其中3个插入3个不同的VLAN,最后一个插入“内部千兆主干”(机架内专用的千兆交换机,用于所有服务器间通信 – NFS,ntp,dns,rsync,等等)。 很显然,每个接口在重新引导时获得相同的名称和相同的IP地址是至关重要的:

 #这个文件是由/ lib / udev / write_net_rules自动生成的
 #程序由persistent-net-generator.rules规则文件运行。
 #
 #你可以修改它,只要你保持每条规则在一条线上。

 #内置broadcom极端网卡
 ## PCI device 0x14e4:0x164a(bnx2)
 SUBSYSTEM ==“net”,ACTION ==“add”,DRIVERS ==“?*”,ATTR {address} ==“00:14:5e:5a:18:ac”,ATTR {type} ==“1 “,KERNEL ==”eth *“,NAME =”eth0“
 SUBSYSTEM ==“net”,ACTION ==“add”,DRIVERS ==“?*”,ATTR {address} ==“00:14:5e:5a:18:ae”,ATTR {type} ==“1 “,KERNEL ==”eth *“,NAME =”eth1“

 #PCI Intel e1000网卡
 ## PCI设备0x8086:0x105e(e1000)
 SUBSYSTEM ==“net”,DRIVERS ==“?*”,ATTR {address} ==“00:15:17:2e:e0:c3”,NAME =“eth2”
 SUBSYSTEM ==“net”,DRIVERS ==“?*”,ATTR {address} ==“00:15:17:2e:e0:c2”,NAME =“eth3”

我没有答案,但也许是一个提示。 前一段时间,我的一位同事提到在某个网卡的linux驱动中有一个bug。 如果服务器有多个接口,这个错误显然会导致MAC(!)地址在接口之间弹跳。 我从来没有检查过,但我似乎记得,这个错误应该是固定的2.6.17左右。