Linux 如何选择使用哪个网络接口?

Dan*_*Dan 10 networking ubuntu route interface amazon-web-services

假设我有一台机器在不同的子网上有两个网络适配器,eth0(10.0.100.5) 和eth1(10.0.200.5)。假设两个子网都有到 Internet(通过它们自己的 NAT)和到本地网络的其余部分(通过它们自己的交换机)的路由:

  1. 当向 10.0.150.5 或 173.194.43.102 发出请求时,Linux 将如何选择使用哪个网络接口?
  2. 有没有办法可以在网络级别影响这一点?从子网中删除路由会影响这一点吗?我在一个AWS环境,并与家电AMI的工作,我不能登录到,所以像这样将无法工作。

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

说明:

  • 两个子网都设置为/24s

Hrv*_*jar 10

子网由网络掩码定义,例如

网络:10.0.100.5 掩码:/8

这意味着您的子网是:10.0.100.5/8

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

如果您遇到与 eth0 和 eth1 连接到同一网络且 IP 位于同一子网上的情况,则会发生以下情况。

  • eth0 10.0.100.5/8
  • eth1 10.0.200.5/8

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

!注意 - 10.0.100.5/8 和 10.0.200.5/8 是同一个子网(因为掩码掩码最后 3 个八位字节,我们也可以写成 10.0.0.0/8)

所以现在考虑我们在这个子网上有一个主机,它试图与10.0.200.5 进入系统的数据包通信eth1但无法返回,eth1因为eth0只有一个具有到网络的路由10.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
Run Code Online (Sandbox Code Playgroud)

替代路由表输出

$ 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 
Run Code Online (Sandbox Code Playgroud)

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

  • eth0 与 IP 10.0.0.5 在子网 10.0.0.5/255.255.255.0 或 CIDR 表示法 10.0.0.5/24
  • wlan0 与 IP 192.168.0.14 在子网 192.168.0.14/255.255.255.0 或 CIDR 表示法 192.168.0.0/24

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

192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.14

要访问子网中的主机,请192.168.0.0/24使用 interfacewlan0和 src IP192.168.0.14

10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.5

要访问子网中的主机,请10.0.0.0/24使用 interfaceeth0和 src IP10.0.0.5

default via 192.168.0.1 dev wlan0 proto static

要访问上述规则未涵盖的任何其他主机,请使用default路由,使用接口wlan0和网关可以访问其他网络是192.168.0.1