CH-J Server Manager通过 SSH 管理服务器
菜单
全部指南与文章 →

ping 失败,但 SSH 和 HTTPS 正常:为什么,这是问题吗?

了解服务器为何可以忽略 ping 却仍正常运行、如何直接测试服务,以及阻止 ICMP 何时会造成实际故障。

为什么会这样

ping 使用 ICMP,而 SSH 和 HTTPS 使用 TCP 端口。这些流量彼此独立,防火墙可以丢弃一种并放行另一种。许多网络和云安全组默认阻止 ICMP 回显。因此,没有回复不代表服务器宕机,有回复也不能证明服务正常。

测试服务,而不是 ping

检查你实际需要的端口和协议。如果这些测试成功,说明服务器上的相应服务可达,ping 失败只表明路径上某处存在过滤。

nc -vz -w 5 server.example 22
nc -vz -w 5 server.example 443
curl -sSI https://server.example/

使用 TCP 跟踪路径

如果 ICMP 或 UDP 被过滤,传统的 traceroute 可能只显示星号。通过 TCP 向开放端口探测,通常能跟踪得更远。这需要 root 权限,而且可能需要先安装 traceroute,因为精简系统不包含它。

sudo traceroute -T -p 443 server.example

查找服务器上的过滤设置

如果你管理这台服务器,请检查其防火墙,以及忽略回显请求的内核设置。请记住,拦截也可能发生在服务器外部的安全组或路由器上,提供商也可能在其网络中过滤 ICMP,而你看不到相关规则。

sysctl net.ipv4.icmp_echo_ignore_all
sudo nft list ruleset | grep -i icmp
sudo ufw status verbose

阻止 ICMP 何时会造成故障

阻止回显通常无害,但阻止所有 ICMP 并非如此。路径 MTU 发现依赖数据包过大的通知消息。缺少这些消息时,小规模数据交换可以正常进行,大规模交换却会停滞,例如 SSH 登录成功后,一遇到大量输出就卡住。IPv6 对 ICMPv6 的依赖更强。第二条命令在 Linux 上测试路径是否支持 1500 字节的 MTU。

ip route get 192.0.2.10
ping -M do -s 1472 -c 3 192.0.2.10

在 CH-J Server Manager 中对比

Server Diagnostics 无需 root,即可通过系统工具运行 ping,同时分别测试 TCP、SSH 标识、HTTP 和 TLS,便于结合其他结果理解 ping 失败的含义。这里的 ping 失败表示没有收到回复,并不能说明数据包在哪里被丢弃,traceroute 也未必能回答这个问题。

详细文档

RFC 4890: ICMPv6 filtering →

man: ping →

生物识别解锁与安全 →