我有带有两张网卡的 Debian 8,eth0
并且eth1
。
eth0
是 192.168.3.43 和eth1
192.168.3.44。
两者都是通过dhcp配置的:
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet dhcp
这是路由表:
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.3.1 0.0.0.0 UG 0 0 0 eth0
192.168.3.0 0.0.0.0 255.255.255.128 U 0 0 0 eth0
192.168.3.0 0.0.0.0 255.255.255.128 U 0 0 0 eth1
问题是,如果我从 eth0 上拔下电缆,即使是从同一个 192.168.3.x 段中的机器,我也无法 ping eth1。
如果其中一个位于不同的段,我就会理解,因为路由表显示默认网关位于 eth0 上,但当这种情况发生在我的主机所在的同一段上时,我就不会理解。
我需要做什么才能使两张卡彼此独立工作?
答案1
你的做法是错误的。你要做的是通道键将两个接口合并为一个虚拟接口,bond0
并给出全部将您的 IP 地址bond0
设置为 。如果绑定配置为最简单的模式,即 active-backup,则不需要对交换机进行特殊配置;两个物理接口之一将用于所有流量,除非且直到链接消失,此时内核将切换到使用另一个接口。如果我理解正确的话,这就是你想要的。
使用正确配置的更智能的交换机,您可以为绑定配置更复杂的模式,其效果是使用两个都NIC,并根据各种算法在它们之间共享流量。
如果您需要系统在几个不同的子网上拥有地址,您应该使用 VLANning bond0
;同样,需要交换机的支持。
关于在 Debian 上配置通道绑定,有很多指南;Debian 维基还有关于该主题的页面。
答案2
我认为路由表说明了一切:即使拔掉了电缆,计算机仍然会选择现在已经失效的 eth0 路由,而不是 eth1 路由。如果没有 NetworkManager 或类似的东西,Linux 在重新路由方面就不够强大。即使您 ping eth1 的 IP 地址,计算机也不一定使用该接口来返回数据包;相反,它会构造一个对 ping 的源 IP 的回复并发送,这将使用路由表来决定如何返回。
答案3
为了模拟 Windows 的行为,我必须使用 iproute2 创建第二个路由表,如下所示本指南。
echo "1 my_route" >> /etc/iproute2/rt_tables
ip route add 192.168.x.0/24 dev eth1 src 192.168.x.y table my_route
ip route add default via 192.168.x.1 dev eth1 table my_route
ip rule add from 192.168.x.y/32 table my_route
ip rule add to 192.168.x.y/32 table my_route
完成此操作后,即使我移除了 eth0 的电缆,我也可以 ping eth1 的 ip。链接的指南还解释了如何使这些更改永久生效。