我们有一台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左右。