当我有一个有两个网卡的Linux机箱,并且它们在同一个子网中时,这个网卡是否会上网?

当一个Linux机器有两个网卡,都连接到同一个子网,有什么办法可以告诉哪一个被用作默认网关?

有几个条件。

  • 两个IP地址在同一个子网上(就像你已经提到的那样)
  • 正在生成的套接字尚未专门针对特定的源IP进行编程。
  • 没有高级路由规则可以根据各种其他条件(fwmark,dsmark等)切换行为。
  • 目标是到相同的子网。

在这种情况下,查询路由表,所以在我的例子中,我有两个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地址。 但是,挂在这里 – 这是一个问题。 我有两个路由,每个设备都指定了源! 该怎么办?

路线中的其他因素可能会相互影响,例如metricpreference

那么,简单地说,如果所有其他的都失败了,而且两个规则都是相同的,那么内核就会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。