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

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

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

  1. 当向 10.0.150.5 或 173.194.43.102 发出请求时,Linux 将如何选择使用哪个网络接口?
  2. 有没有办法在网络层面影响这一点?从子网中删除路由会影响这一点吗?我在 AWS 环境中,使用无法登录的设备 AMI,因此不起作用。

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

澄清:

  • 两个子网均设置/24

答案1

子网定义为网络面具例如

网络: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/8使用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

替代路由表输出

$ 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 个接口。

  • 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请使用接口wlan0和源 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请使用接口eth0和源 IP10.0.0.5

default via 192.168.0.1 dev wlan0 proto static

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

答案2

查看您的路由表 - 命令是 route。使用较新的 ip 命令使用 ip route show。您可以查看其中任何一个的帮助,了解如何在表中添加/删除路由条目。

相关内容