我有一台基于 Linux 的设备,带有两个 NIC:
NIC1eth0:192.168.1.100/24;网关:192.168.1.1
NIC2eth1:192.168.1.101/24;未设置网关
此设备与应用服务器 (IP:10.1.1.1) 通信。应用逻辑将设备与其两个 IP 关联,因此可以使用主 IP 访问设备,如果失败则切换到辅助 IP。这应该在设备 NIC 级别提供冗余。我不能在这里使用绑定,因为服务器希望设备有 2 个 IP 地址。
如果没有进一步的配置,如果我拔掉 NIC1,设备就无法再与服务器通信,这是预料之中的,因为 NIC2 没有关联的网关。
但是,如果我通过 NIC2 向服务器网络添加静态路由,则路由表将是
Destination Gateway Genmask Int
0.0.0.0 192.168.1.1 255.255.255.0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 eth0
10.1.1.0 192.168.1.1 255.255.255.0 eth1
我期待以下行为
- 当两个网卡都连接时,由于路由更具体,可以通过 eth1 访问服务器
- 如果仅拔下 NIC1,则由于静态路由,可以通过 eth1 访问服务器
- 如果仅拔掉 NIC2,则静态路由应从路由表中消失,并且由于默认网关,应通过 eth0 访问服务器
1 和 2 符合预期。相反,当拔下 NIC2 时,无法访问服务器。
为什么?如果我将 NIC1 和 NIC2 放在不同的子网上,第 3 点不会失败,即无论我拔掉哪条电缆,设备始终可以在另一个 NIC 上访问。当两个 NIC 都设置在同一个子网上时,阻止这种情况发生的技术原因是什么?
编辑
我查看了 ARP 流量问题,它似乎更像是应用程序级别的问题,但这里的情况并非如此。ARP 流量似乎不会阻止主机通信,因此无法解释为什么在拔下 NIC2 时 ping NIC1 会失败。
答案1
声誉不足以发表评论,所以我把这个写成答案。我建议你采用绑定或组合方式。你试图给出的解决方案非常尴尬。设置一个包含 2 个物理网卡(主动/主动或主动/被动)的虚拟绑定/组合接口,然后在虚拟绑定/组合接口上添加 2 个 IP,以便应用程序认为是冗余的。