我正在运行两个 Ubuntu 12.04 实例,它们无法互相访问。
机器 1:
eth0 - 10.0.0.20
eth1 - 10.0.0.30
netstat -nr:
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
机器2:
eth0 - 10.0.0.100
eth1 - 10.0.0.40
netstat -nr:
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
两台机器只能通过互联网相互访问,而不能通过 VPC(换句话说,LAN)相互访问。禁用防火墙也无济于事。机器 1 只能 ping 10.0.0.100。机器 2 只能 ping 10.0.0.30。我无法通过 LAN 连接到任何使用 TCP/UDP 协议的机器。没有 ACL,机器上的守护进程正在监听所有 IP、所有接口。可能是什么问题?
编辑1:
问题似乎出在路由表中。我在删除机器 2 上的 1 个 NIC 并执行一些随机操作后解决了机器 1 上的问题。这导致 DHCP 获得以下规则:
~$ ip rule
0: from all lookup local
32765: from 10.0.0.30 lookup 2
32766: from all lookup main
32767: from all lookup default
~$
我无法在机器 2 上重现此问题,但我可以使用以下命令手动添加规则和路由表:
ip route add default via 10.0.0.1 dev eth0
ip route add default via 10.0.0.1 dev eth1 table 2
ip rule add from 10.0.0.167 lookup 2 prio 1000
我怎样才能避免手动执行此操作?
答案1
尝试更具体地添加路由。路由将优先选择按特异性、度量值和添加顺序排列的第一条匹配路由。
例如在机器1上添加以下路由:
ip route add 10.0.0.40/32 dev eth1 src 10.0.0.30
在机器 2 上:
ip route add 10.0.0.30/32 dev eth1 src 10.0.0.40
您可能需要删除两台机器上 eth1 的更通用的路由:
ip route del 10.0.0.0/24 dev eth1
由于它们位于 /24 中,您应该尝试将它们放在不同的子网中,例如,如果两个 eth1 都在 10.0.1.0/24 中,那么您根本不会遇到这个问题。