Linux如何select使用哪个networking接口?

比方说,我有一台机器在不同的子网上有两个networking适配器, eth0 (10.0.100.5)和eth1 (10.0.200.5)。 假设两个子网都有通往互联网的路由(通过他们自己的NAT)和本地networking的其余部分(尽pipe他们自己的交换机):

  1. 在向10.0.150.5或173.194.43.102发出请求时,Linux将如何select使用哪个networking接口
  2. 有没有一种方法可以在networking层面影响这一点? 从子网中删除路由会影响这个吗? 我处于AWS环境中,使用无法login的Appliance AMI,因此无法正常工作。

AWS VPC环境,运行Ubuntu 12.04的其他机器,不知道我试图影响的机器正在运行(因为我无法login到它)。

澄清:

  • 两个子网都设置为/24

子网由networking掩码定义,例如

networking:10.0.100.5掩码:/ 8

这意味着你的子网是: 10. 0.100.5 / 8

基本上10.xxx.xxx.xxx系列的任何有效的IP属于这个子网。 只有一个接口可用于访问此子网中的主机。 所以你的情况是eth0或者eth1。 其他接口可以有IP在同一个子网,但它不会正常工作。

这里是如果你有类似eth0和eth1连接到相同的networking在同一子网上的IP情况下发生的情况。

  • eth0 10.0.100.5/8
  • eth1 10.0.200.5/8

现在只有其中一个接口有路由(假设它是eth0 ),它说to access subnet 10.0.100.0/8使用eth0 。 所以离开这个接口的数据包将有源地址10.0.100.5

NOTICE – 10.0.100.5/8和10.0.200.5/8是相同的子网(因为掩码掩码最后3个字节,我们也可以写为10.0.0.0/8)

所以现在考虑在这个子网上有主机,它试图与10.0.200.5进行通信。数据包通过eth1进入系统,但是不能从eth1返回,因为eth0只有一个到networking10.0.0.0/8 ,eth0的响应有不同的IP ; 所以启动到10.0.200.5的连接将不能理解来自其他来源的响应。

编辑

要确定将使用哪个接口,您需要查看您的路由表。 由于问题不包含路由表,我将尝试解释下面的路由表

 $ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 wlan0 10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0 

备选路由表输出

 $ ip route show default via 192.168.0.1 dev wlan0 proto static 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5 192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.14 

所以我们在上面的例子中有2个接口。

  • 在子网10.0.0.5/255.255.255.0或CIDR表示法10.0.0.5/24上使用IP 10.0.0.5的eth0
  • 在子网192.168.0.14/255.255.255.0或CIDR表示法192.168.0.0/24上使用IP 192.168.0.14的wlan0

现在路由表告诉我们什么; 逐行解释,自下而上:

192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.14

要访问子网192.168.0.0/24主机,请使用接口wlan0和src IP 192.168.0.14

10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5

要访问子网10.0.0.0/24主机,请使用interface eth0和src IP 10.0.0.5

default via 192.168.0.1 dev wlan0 proto static

要访问以上规则未涵盖的任何其他主机,请使用default路由,该路由可通过接口wlan0访问,到其他networking的网关为192.168.0.1

看看你的路由表 – 命令是路由。 用新的ip命令使用ip route show。 您可以查看有关如何在表中添加/删除路由条目的帮助。