ping 不通不等于服务不可用
ICMP 是 IP 的配套协议:ping 用类型 8/0 的回显请求与应答,traceroute 依赖 TTL 超时与端口不可达报文。云安全组与网络 ACL 默认通常不放行 ICMP,所以「ping 不通」既可能是主机真的不可达,也可能只是策略拒绝。判断连通性要分层做:先确认 ICMP 是否放行,再用 TCP 端口探测确认服务本身是否存活。
基本信息
| 依赖 ICMP 的工具 | ping、traceroute、mtr、tcp ping、路径 MTU 发现 |
|---|---|
| 默认策略 | 多数云安全组默认不放行 ICMP,与实例是否在线无关 |
| 放行范围 | 建议只对内网与管理网段放行;公网主机可不放行 |
| 替代手段 | nc、telnet、curl 探测 TCP 端口,完全不受 ICMP 策略影响 |
| IPv6 差异 | ICMPv6 承担路径 MTU 发现(Packet Too Big),整段禁用会导致大包被静默丢弃 |
典型使用场景
- 新实例上线后用 ping 快速确认网络层是否通,再用端口探测确认服务层
- 判断白名单只放了一半:ICMP 通而端口不通,说明策略确实生效但放行范围不对
- 路径 MTU 排查:能 ping 小包、加大包长后失败,说明链路上有更小的 MTU
- 容器与 overlay 网络排查:跨节点 ping 可先验证隧道是否承载流量
- 监控探活误报定位:部分监控用 ping 探活,禁 ICMP 环境下会持续报不可达
分层排查命令
分层排查命令
ping -c 4 10.0.0.5 # 基础连通性,先看是否通
ping -M do -s 1472 -c 2 10.0.0.5 # 不分片探测 1500 MTU 路径是否可行
traceroute -I 10.0.0.5 # 用 ICMP 探测路径,定位断在哪一跳
nc -vz 10.0.0.5 443 # TCP 端口探测,不受 ICMP 策略影响
tcpdump -ni eth0 icmp # 抓包确认请求是否到达、是否有回包安全组放行 ICMP 示例
安全组放行 ICMP 示例
aliyun ecs AuthorizeSecurityGroup --RegionId cn-hangzhou \
--SecurityGroupId sg-xxxx \
--IpProtocol icmp --PortRange -1/-1 \
--SourceCidrIp 10.0.0.0/8 # 仅放行内网段,公网不要开 -1/-1ping 输出逐列读法
| 字段 | 含义 | 异常表现 |
|---|---|---|
| icmp_seq | 回显请求序号 | 跳号说明中间丢包,偶发跳号可结合时间点判断拥塞 |
| time | 往返时延 | 同路径突然抬高说明绕路或拥塞;波动大先看是否走了备用链路 |
| ttl | 剩余跳数 | 同一目标前后不一致,说明转发路径发生变化 |
| packet loss | 丢包率 | 持续性丢包才是问题,单次 100% 常是策略拒绝或目标下线 |
| bytes | 包长 | 配合 -s 使用,用于判断 MTU 与分片行为 |
为排查临时放行 ICMP 后要记得回收:公网长期开放 ICMP 会被扫描器用作存活探测,也让 ICMP 洪水更容易打进来。放行范围尽量写成具体网段,而不是 0.0.0.0/0。
MTU 问题的定位套路:小包能通、加 -M do -s 1472 后返回需要分片或直接失败,说明路径 MTU 小于 1500。常见于 IPsec、GRE、VXLAN 隧道与部分运营商链路。Linux 侧可通过 net.ipv4.tcp_mtu_probing 与路由 MTU 设置缓解。