为什么目标接口没有捕获到ICMP报文?

我有一个networking设置如图所示:

在这里输入图像说明

中央盒子是一个网关(Ubuntu 15.10),用于中继各种networking(图片上只显示一个 – lan0 )和互联网之间的数据包。

  • 网关:我可以ping通互联网上的所有接口和主机
  • laptop :除了192.168.0.254之外,我可以ping通互联网上的所有接口和主机

我不知道为什么我不能ping通,这就是为什么我抓住了交通。 这不是我的问题,但如果有人有一个想法,这是值得欢迎的。 所有接口都接受所有stream量,并且所有接口之间都有转发

当捕获数据包以了解ping失败的原因时,我做了三个testing

  1. laptop ping到192.168.0.10

ping 通过 ,但tcpdump -i int0 icmp不显示捕获的任何数据包

  1. laptop ping到192.168.0.254

ping不通过和tcpdump -i int0 icmp显示

 13:26:28.032635 IP 10.10.10.93 > 192.168.0.254: ICMP echo request, id 1, seq 671, length 40 13:26:32.604606 IP 10.10.10.93 > 192.168.0.254: ICMP echo request, id 1, seq 672, length 40 
  1. laptop8.8.8.8

ping通过, tcpdump -i int0 icmp显示

 14:02:52.016081 IP 192.168.0.10 > google-public-dns-a.google.com: ICMP echo request, id 1, seq 749, length 40 14:02:52.029388 IP google-public-dns-a.google.com > 192.168.0.10: ICMP echo reply, id 1, seq 749, length 40 

我理解第二种情况(至less回收请求被捕获的事实)。

为什么在第一种情况下ping通过时没有捕获数据包?

为什么在第三种情况下捕获只显示来自192.168.0.10的请求? laptop在哪里? (我猜这个原因和上面一样)

为什么在第一种情况下ping通过时没有捕获数据包?

因为你在int0上捕获,但是数据包不会在int0上发送。 笔记本电脑通过lan0发送到网关,网关说“192.168.0.10 – 嘿,就是我!” 并在lan0上发回一个响应。 它不需要将数据包转发到192.168.0networking上的其他主机,因此不需要通过int0发送出去。

是的, int0伪装从lan0到互联网的stream量。 还有DNAT将192.168.0.10上的端口redirect到内部主机。

那么这可能会解释为什么在第三种情况下捕获只显示来自192.168.0.10的请求? – 来自笔记本电脑的请求在发送到int0之前可能已经将其源IP地址修改为192.168.0.10。