Skip to content

无法ping通服务器公网ip的排查方法

1. 问题现象

本地网络正常的情况下,无法 ping 通您机器的公网 ip

image

image

2. 问题原因

速查表

可能原因排查方案
目前实例未开机登录官网控制台检查实例状态是否正常运行。
实例安全组配置错误检查安全组设置中是否允许 icmp,如何修改安全组详见 3.1.
防火墙配置错误需要根据系统检查防火墙规则,详见 3.2.
实例被黑洞实例防护被打满会触发黑洞,请工单咨询
域名未备案或未加白名单如果可以 ping 通公网 IP,但是 ping 不通域名,可能是域名没有备案或者域名解析异常导致。需工单提交域名、ip、备案号进行处理。
实例为中国香港或海外实例在内地访问香港或海外时,链路质量会有可能受到运营商线路影响,建议过一段时间再次尝试。
服务器 cpu 或带宽占用过高检查外网相关资源使用率,如公网带宽使用率达到 100% 等。

3. 解决方案

3.1. 如何设置安全组

首先进入 控制台-网络-安全组管理

image

点击对应安全组名字,检查入方向规则出方向规则对应规则中是否允许 icmp

image

image

image

如果规则允许 icmp 入站,但还是不能 ping 通,则需要将实例移出关联实例

image

3.2. 防火墙配置错误

3.2.1. Windows

这里以 Windows Server 2022 为例,通过 控制台-管理-VNC 控制 登录实例

image

服务器管理 工具中,找到 工具-高级 Windows 防火墙 功能

image

image

分别检查入站规则出站规则中,是否有 ICMP 协议被禁止。如果被禁止,需要手动开启相关规则

image

3.2.2. Linux

linux 系统是否运行被 ping,取决于内核参数 icmp_echo_ignore_all ​和防火墙,任意禁止其中一个都会导致无法 ping 通

1. 检查 icmp_echo_ignore_all参数

  • 如果返回参数为 0,则不禁 ping
  • 如果返回 1,则是内核禁 ping
shell
# cat /proc/sys/net/ipv4/icmp_echo_ignore_all

# cat /proc/sys/net/ipv6/icmp/echo_ignore_all

如果返回有 1,是内核禁 ping。则需要对配置进行调整。

shell
/*临时允许*/
# echo 0 > /proc/sys/net/ipv4/icmp_echo_ignore_all

/*永久允许*/
# echo net.ipv4.icmp_echo_ignore_all=0 >> /etc/sysctl.conf
# sysctl -p

2. 检查防火墙配置

首先查看防火墙规则

shell
# iptables -L
  • 如果返回如下结果,则未禁 ping,请检查服务器 CPU 与带宽利用率

    shell
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination       
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
  • 如果返回有禁 ping 规则,需要删除相关规则,需执行如下命令

    shell
    /*入站规则*/
    # iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    /*出站规则*/
    # iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT