我从traceroute得到这个输出:
#traceroute -i eth1 -s 192.168.12.14 192.168.1.72 1 192.168.12.1 (192.168.12.1) 1.410 ms 2.076 ms 2.251 ms 2 * * * 3 * * * etc..
但在另一个terminal中,我可以看到从目标主机到达的正确答复(Port Unreachable):
9.964867 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable) 9.964879 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable) 9.964886 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable) 9.964904 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable) 9.964923 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable) 9.964927 192.168.1.72 -> 192.168.12.14 ICMP 102 Destination unreachable (Port unreachable)
起初我以为这是一个防火墙的问题,但我检查,没有数据包被丢弃。 唯一想到的是这是第二个NIC …
如果我运行traceroute到第一个网卡上的同一个主机,我会得到与上面相同的wireshark trace(显然是使用不同的源IP) – 但traceroute命令成功。
我不明白wireshark如何看到答复,但第二个网卡上的traceroute失败。
我想我错过了这里很基本的东西….
Wireshark将显示networking接口上的内容。 内核显然看到了这些数据包,但由于某种原因,决定不将它们传递给traceroute命令。
有几件事可能会导致内核决定不交付这些数据包。
rp_filter 。 在那些我认为rp_filter听起来像最可能的解释。 你没有指定操作系统,但它看起来可能是一个Linux系统,所以试试这个命令: head /proc/sys/net/ipv4/conf/*/rp_filter 。 你可能会看到每一个1 ,这意味着filter启用。 尝试写一个0到相应的数据包被丢弃的接口以及all设备名称。
你可以在这里发布每个盒子的路由表的输出吗? 如果您有一个无效/缺less默认路由,数据包将不具有返回path。 请张贴以下的输出:
#ip路由列表
在每个Linux机器上。