Linux 服务器有 2 个活动网络接口:
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) 是与网络上的主机通信的主要接口。我想保留第二个 1GbE 接口 (eth1) 作为故障保护。如果 10GbE 接口出现故障:我仍然可以轻松进入,可以更新 DNS,以便主机可以连接等。
在观察接口统计信息时,我注意到所有流量都在 eth1 而不是 eth2 上发送/接收,尽管网络上的所有主机都在寻址这个接口。我确认 DNS A 记录指向正确接口的 IP。此外,我确认通过 IP 而不是 FQDN 寻址接口会产生相同的结果。
我清除了机器上的 ARP 缓存,并通过 IP 地址 ping 了 eth1 接口。我检查了我的 ARP 表并找到了 eth1 的 MAC 地址。我再次清除了 ARP 缓存,并通过 IP 地址 ping 了 eth2 接口。再次,我检查了我的 ARP 表并找到了 eth1(不是 eth2)的 MAC 地址。
如果我关闭 eth1、物理断开接口或将其放在不同的逻辑网络上 - 我会得到预期的行为,流量会通过我的 eth2 接口。
我的问题:为什么会发生这种情况?我看到一些证据表明,由于其“弱主机模型”,这是 linux 内核上的预期行为。
我怎样才能在同一个网络上保持两个接口正常运行,并让它们以我期望的方式工作。
Linux 旨在响应任何接口上的 ARP 请求。假设主机拥有 IP 地址而不是特定接口。您所看到的称为 ARP Flux。
您可以使用 sysctrl 更改此行为
如果您的交换机支持它,我会使用 802.1ad 链路聚合来提供故障转移。
使用此功能,您可以将两个接口绑定在一起,您可以将一个设置为主动接口,一个设置为被动接口。您的 IP 地址将驻留在绑定接口上,因此如果一个 NIC 发生故障,IP 地址将不会更改。