我有一个带有两个 NICS 的 Linux 机器:
eth0 192.168.11.14
eth1 192.168.12.14
我的路由表如下:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.11.1 0.0.0.0 UG 100 0 0 eth0
192.168.11.0 * 255.255.255.0 U 0 0 0 eth0
192.168.12.0 * 255.255.255.0 U 0 0 0 eth1
默认路由(通过 eth0)工作正常,但问题出在 eth1 接口上。我为 eth1 设置了一个默认网关,如下所示:
#ip rule list
0: from all lookup local
32765: from 192.168.12.14 iif eth1 lookup tbl_eth1
32766: from all lookup main
32767: from all lookup default
#ip route show table tbl_eth1
default via 192.168.12.1 dev eth1
Linux 机器连接到第 3 层交换机,该交换机路由三个子网:
192.168.1.0 interface ip 192.168.1.1
192.168.11.0 interface ip 192.168.11.1
192.168.12.0 interface ip 192.168.12.1
从第一个子网上的地址我可以 ping 所有接口。
当我尝试从 192.168.1.0 子网到达 192.168.12.14 或反之亦然时,就会出现问题。
以下是跟踪路由的结果:
#traceroute 192.168.12.14
traceroute to 192.168.12.14 (192.168.12.14), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.532 ms 0.911 ms 1.074 ms
2 * * *
3 * * *
4 * * *
etc..
# traceroute -i eth1 -s 192.168.12.14 192.168.1.51
traceroute to 192.168.1.51 (192.168.1.51), 30 hops max, 60 byte packets
1 192.168.12.1 (192.168.12.1) 1.196 ms 1.559 ms 1.739 ms
2 * * *
3 * * *
4 * * *
etc..
现在,真正奇怪的是:使用 tshark,我实际上可以看到 traceroute 数据包在每种情况下都到达了各自的目的地。这告诉我,传出路径和返回路径都已正确路由。但我无论如何也想不出为什么 ping 和 traceroute 都失败了。
我相当确定这不是交换机的问题,因为如果我将 eth1 设为 Linux 机器上的默认网关,那么它就可以正常工作(但我遇到 eth0 的相同问题)。
我对此束手无策——任何帮助都将不胜感激。
答案1
供将来参考,底层问题已由@kasperd 在另一篇 SF 中解决问题