当一个Linux机器有两个网卡,都连接到同一个子网,有什么办法可以告诉哪一个被用作默认网关?
有几个条件。
在这种情况下,查询路由表,所以在我的例子中,我有两个IP在同一个子网
# ip addr ls | grep inet inet 192.168.122.224/24 brd 192.168.122.255 scope global eth0 inet 192.168.122.160/24 brd 192.168.122.255 scope global eth1
哪一个select? 那么这个答案是由路线支配的。 所以,如果我们检查出来..
192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.224 192.168.122.0/24 dev eth1 proto kernel scope link src 192.168.122.160
当然,如果我有一个目的地的默认路线,将是我会去的地方,这将是非常明显的。 通常,相同的路由表不会接受目标networking的重复规则。
src字段指示为该子网select哪个IP地址。 但是,挂在这里 – 这是一个问题。 我有两个路由,每个设备都指定了源! 该怎么办?
路线中的其他因素可能会相互影响,例如metric或preference 。
那么,简单地说,如果所有其他的都失败了,而且两个规则都是相同的,那么内核就会select列表中的第一个。 如果你有一个偏好,那么你select一个。
如果你想做一个首选项,你需要添加规则(例如在我的情况下)到这样的路线:
ip route add 192.168.122.0/24 dev eth0 src 192.168.122.224 metric 2 ip route add 192.168.122.0/24 dev eth1 src 192.168.122.160 metric 1
这将改变主机的路由规则。 这样做后,你可能需要清除你的ARPcaching。