0%

主机单向ping通

起因

2023年5月3日我更换了新的路由设备后出现了某些设备只能单向ping通的问题

问题描述

在同一个网段里,A可以ping通B,反过来Bping不通A。

Ping 命令概述

ping命令基于ICMP协议,通常用于判断数据包是否能通过IP协议到达目的主机

https://zh.wikipedia.org/wiki/Ping

抓包看看正常的ping

我们将 192.168.1.253 这台主机记作 A,192.168.1.103 这台主机记作B

可以看到 A 先发送了一个 request 包,然后 B 回复了一个 reply 包,从此 A -> B 之间的链路是通的。

但是会出现一种问题,A -> B 通,反过来 B -> A 不通!

解决方案

通常出现单向 ping 通的原因有以下几点:

  • 开启了防火墙

    一般的做法是将来自外部的ICMP请求报文滤掉,但它却对本机出去的ICMP请求报文,以及来自外部的ICMP应答报文不加任何限制。这样,从本机Ping其他机器时,如果网络正常,就没有问题。但如果从其他机器Ping这台机器,即使网络一切正常,也会出现“超时无应答”的错误。

  • 设置了错误的IP地址

    如果该主机上存在多块网卡,恰巧又将其设置成了同一个子网,那么从IP层协议来看,该主机就有多个不同的接口处于同一个网段内,当从该主机Ping其他主机时,就会存在如下问题:

    • 主机不知道将数据包发到哪个网络接口,因为有多个网络接口都连接在同一网段
    • 主机不知道用哪个地址作为数据包的源地址。因此,从这台主机去 Ping 其他机器,IP 层协议会无法处理,超时后,Ping 就会给出一个“超时无应答”的错误信息提示。但从其他主机 Ping 这台主机时,请求包从特定的网卡来, ICMP 只须简单地将目的、源地址互换,并更改一些标志即可,ICMP 应答包能顺利发出,其他主机也就能成功 Ping 通这台机器了

https://cloud.tencent.com/developer/news/296134

本人遇到的问题是如下:

正常能收到 request 包,但是却没有进行任何回复,no response found!

这个问题困惑了我们很长时间,首先一方能ping通,说明链路是通的,交换机设置也没问题,那为什么另一方却ping不通?直到后来,我仔细的复盘的了一下出现问题的主机,我发现ping不通的,都是一些windows主机,linux主机完全没有这些问题。

可问题是,windows主机之前一直可以ping通啊,我没有改过任何防火墙的设置!

死马当活马医,尝试更改下windows防火墙设置,以管理员权限运行命令行,输入下面允许ICMPv4的命令

允许ICMPv4

1
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow

同理,拒绝ICMPv4 可以这么写

1
netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=block

https://blog.csdn.net/wlc_1111/article/details/106048982

您猜怎么着?然后就好了!可以ping通了!

但是!但是!但是!windows主机之前一直是可以ping通的,为什么突然现在不行了,而且我没有改过任何windows防火墙的设置。

我思前想后,只有一种可能,windows的某个更新,将ping默认设置为禁止了!

但是我搜索了一下,却发现没有任何这方面的信息。

想想之前windows更新不经常是补了这个窟窿那边又捅了一个出来吗!也能理解!

不过好在现在问题解决了,是windows防火墙的原因!