主题
无法ping通服务器公网ip的排查方法
1. 问题现象
本地网络正常的情况下,无法 ping 通您机器的公网 ip
2. 问题原因
速查表
可能原因 | 排查方案 |
---|---|
目前实例未开机 | 登录官网控制台检查实例状态是否正常运行。 |
实例安全组配置错误 | 检查安全组设置中是否允许 icmp,如何修改安全组详见 3.1. 。 |
防火墙配置错误 | 需要根据系统检查防火墙规则,详见 3.2. 。 |
实例被黑洞 | 实例防护被打满会触发黑洞,请工单咨询 |
域名未备案或未加白名单 | 如果可以 ping 通公网 IP,但是 ping 不通域名,可能是域名没有备案或者域名解析异常导致。需工单提交域名、ip、备案号进行处理。 |
实例为中国香港或海外实例 | 在内地访问香港或海外时,链路质量会有可能受到运营商线路影响,建议过一段时间再次尝试。 |
服务器 cpu 或带宽占用过高 | 检查外网相关资源使用率,如公网带宽使用率达到 100% 等。 |
3. 解决方案
3.1. 如何设置安全组
首先进入 控制台-网络-安全组管理
点击对应安全组名字,检查入方向规则、出方向规则对应规则中是否允许 icmp
如果规则允许 icmp 入站,但还是不能 ping 通,则需要将实例移出关联实例
3.2. 防火墙配置错误
3.2.1. Windows
这里以 Windows Server 2022 为例,通过 控制台-管理-VNC 控制 登录实例
在 服务器管理 工具中,找到 工具-高级 Windows 防火墙 功能
分别检查入站规则、出站规则中,是否有 ICMP 协议被禁止。如果被禁止,需要手动开启相关规则
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 与带宽利用率
shellChain 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