昨天服务器上抓包诊断 service connect timeout 问题, 却不想遇到奇怪问题: 抓包数据只有进来的数据, 没有任何出去的数据. 如下图:

当时心想抓错了, 是不是只抓了一个方向数据, 比如参数设置 src port 或者 dst port 之类的. 然而 tcpdump 参数并没有写错, 写的是:
$ tcpdump port 80 or port 443 -w /tmp/tcpdump.pcap
所以理论上进来和出去两个方向数据应该都有才对, 那么问题出在哪呢?
问题就出在没有查看这个服务器的网络接口状况, 也没有仔细查看 tcpdump 的输出. 从下图这些细节, 你能看出问题所在吗?
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
link/ipip 0.0.0.0 brd 0.

在服务器上使用TCPDump诊断service连接超时问题时,发现抓包数据只显示入站流量,无出站数据。检查发现未指定网络接口,TCPDump默认选择了tunl0(IPIP隧道)接口,该接口仅接收流向10.147.64.197的数据。而出站路由均通过eth0(以太网)接口,因此在tunl0上无法捕获出站数据。解决方案是在eth0接口或所有接口上抓包。
最低0.47元/天 解锁文章
170

被折叠的 条评论
为什么被折叠?



