比方说,我有一台机器在不同的子网上有两个networking适配器, eth0 (10.0.100.5)和eth1 (10.0.200.5)。 假设两个子网都有通往互联网的路由(通过他们自己的NAT)和本地networking的其余部分(尽pipe他们自己的交换机):
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 ),它说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个接口。
现在路由表告诉我们什么; 逐行解释,自下而上:
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。 您可以查看有关如何在表中添加/删除路由条目的帮助。