假设我有一台机器,它有两个网络适配器,分别位于不同的子网eth0
(10.0.100.5) 和eth1
(10.0.200.5)。假设两个子网都有到互联网的路由(通过它们自己的 NAT)和到本地网络的其余部分的路由(通过它们自己的交换机):
- 当向 10.0.150.5 或 173.194.43.102 发出请求时,Linux 将如何选择使用哪个网络接口?
- 有没有办法在网络层面影响这一点?从子网中删除路由会影响这一点吗?我在 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。您可以查看其中任何一个的帮助,了解如何在表中添加/删除路由条目。