Linux服务器有2个活动的networking接口:
IF:eth1 IP:192.168.1.1/24 MAC:11:11:11:11:11:11 (1GbE) IF:eth2 IP:192.168.1.2/24 MAC:22:22:22:22:22:22 (10GbE)
这个想法是,10GbE接口(eth2)是与networking上的主机进行通信的主要接口。 我想离开第二个1GbE接口(eth1)作为故障安全。 万一10GbE接口出现故障,我仍然可以轻松地更新DNS,以便主机可以连接等。
在观察接口统计数据的同时,我注意到,尽pipenetworking上的所有主机都在寻址这个接口,但所有的数据stream都是在eth1而不是eth2上发送/接收的。 我确认DNS Alogging指向正确接口的IP。 另外,我确认了通过IP而不是FQDN来处理接口产生了相同的结果。
我清除了我的机器上的ARPcaching,并通过IP地址ping eth1接口。 我检查我的ARP表,findeth1的MAC地址。 我再次清除ARPcaching,并通过IP地址ping eth2接口。 再次,我检查我的ARP表,并findeth1的MAC地址(而不是eth2)。
如果我把eth1降低,断开接口,或者把它放在不同的逻辑networking上,我就会得到预期的行为,stream量通过我的eth2接口。
我的问题:为什么会发生这种情况? 我看到一些证据表明,这是由于其“弱主机模式”而在Linux内核上预期的行为。
我怎样才能使这两个接口在同一个networking上,让他们以我期望的方式工作。
Linux旨在响应任何接口上的ARP请求。 假设主机拥有IP地址,而不是特定的接口。 你所看到的叫做ARP Flux。
你可以使用sysctrl来改变这个行为
arp_ignore – INTEGER
定义不同的发送回复的模式,以响应收到的parsing本地目标IP地址的ARP请求:
0 – ( 默认值 ):回复在任何接口上configuration的本地目标IP地址
1 – 仅在目标IP地址是入站接口上configuration的本地地址时才应答
2 – 仅当目标IP地址是入站接口上configuration的本地地址时才回复,并且发件人的IP地址都是来自此接口上相同子网的部分
3 – 不回复configuration范围主机的本地地址,只回答全局和链接地址的分辨率
如果您的交换机支持它,我会使用802.1ad链路聚合来提供故障转移。
有了这个function,你可以将两个接口绑定在一起,你可以设置一个为主动接口,一个为被动接口。 您的IP地址将驻留在绑定界面上,因此如果一个NIC出现故障,将不会更改IP地址。