一次无法ping通的故障排除思路

最近在做项目转移工作,开发抛给我一个问题:和发送消息的节点ping不通了,但是发送消息的节点可以和我的Web节点通讯

防火墙

我第一反应就是防火墙,可能是 防火墙 拦截住了,小意思,一条命令搞定;

/etc/init.d/iptables stop

NAT表

然后奇怪的事情发生了,防火墙是关闭的状态,怎么会ping不通呢,有可能是nat表的原因,因为在关闭iptables的情况下, nat 表还是可以后添加上去工作的,

/etc/init.d/iptables start
/etc/init.d/iptables stop

还是不通,搞毛线啊,求助峰哥,通过峰哥知道了mtr命令

mtr命令

是几乎所有 Linux 发行版本预装的网络测试工具。他把 ping和 traceroute 的功能并入了同一个工具中,所以功能更强大。

mtr -I 47.90.15.000

                                                         My traceroute  [v0.75]
linux-node1 (0.0.0.0)                                                                                                   Sat Oct  8 19:18:54 2016
Resolver: Received error response 2. (server failure)er of fields   quit
                                                                                                    Packets                 Pings
 Host                                                                                                 Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 192.168.1.1                                                                                        0.0%    16    0.3   0.3   0.3   0.3   0.0
 2. 124.193.164.121                                                                                    0.0%    15    4.8   7.7   4.0  48.9  11.4
 3. 10.255.148.185                                                                                     0.0%    15    1.5   2.5   1.2   8.4   1.7
 4. 10.255.52.113                                                                                      0.0%    15   22.3  16.4   2.3  82.6  21.3
 5. 124.205.98.145                                                                                     0.0%    15    1.4   2.0   1.1   3.0   0.7
 6. 124.205.98.57                                                                                     28.6%    15    1.9   2.2   1.6   3.4   0.6
 7. 218.241.244.129                                                                                    0.0%   

......
......

20. ???
21. 47.90.15.000                                                                                       6.7%    15   48.1  79.5  46.3 125.3  35.3

常见可选参数说明:

-r 或 –report:以报告模式显示输出。

-p 或 –split:将每次追踪的结果分别列出来,而非如 –report统计整个结果。

-s 或 –psize:指定ping数据包的大小。

-n 或 –no-dns:不对IP地址做域名反解析。

-a 或 –address:设置发送数据包的IP地址。用于主机有多个IP时。

-4:只使用 IPv4 协议。

-6:只使用 IPv6 协议。

另外,也可以在 mtr 运行过程中,输入相应字母来快速切换模式,比如:

d:切换显示模式。

n:切换启用或禁用 DNS 域名解析

u:切换使用 ICMP或 UDP 数据包进行探测。

返回结果说明:

默认配置下,返回结果中各数据列的说明:

第一列(Host):节点IP地址和域名。如前面所示,按n键可以切换显示。

第二列(Loss%):节点丢包率。

第三列(Snt):每秒发送数据包数。默认值是10,可以通过参数 -c 指定。

第四列(Last):最近一次的探测延迟值。

第五、六、七列(Avg、Best、Wrst):分别是探测延迟的平均值、最小值和最大值。

第八列(StDev):标准偏差。越大说明相应节点越不稳定。


结果发现到达网关还是继续通讯的,但是在网关到节点的地方卡壳了

发送消息的节点到网关这一段是没问题的,判断得出就是发送节点的服务有什么做了限制

但是iptables 本身就是关闭的状态,那还有那些地方拦截了呢

Selinux

虽然可以没有多大的关系,但还是把它关了,排除一下吧。

[root@bj-web01-cang ~]# setenforce 0
setenforce: SELinux is disabled
[root@bj-web01-cang ~]# getenforce 
Disabled

到这里困扰了很久,最后Google到一篇文章纯英文文章翻译了半天才明白 /(ㄒoㄒ)/~~

Linux内核有禁ping策略,一般是默认关闭的,但是之前的运维开启了这个,我不知道,栽了跟头

[root@bj-web01-cang ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all 
1
[root@bj-web01-cang ~]# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all
[root@bj-web01-cang ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all 
0

OK,成功

[root@bj-web01-cang ~]# ping bj-message
PING bj-message (10.165.70.001) 56(84) bytes of data.
64 bytes from bj-message (10.165.70.001): icmp_seq=1 ttl=60 time=0.400 ms
64 bytes from bj-message (10.165.70.001): icmp_seq=2 ttl=60 time=0.268 ms

虽然这篇文章算不算什么高大上,但是有一些思路还是值得一些新手玩家看看的,推荐大家两篇关于网络的博客:



文章均为本站原创,转载请注明出处!

发表评论