深色模式
网络排查八步法
摘要:网络不通别乱试。本文给你一套从「域名能不能解析」到「对端应用有没有回包」的八步清单,每一步配一个命令,按顺序走基本能定位 90% 的问题。
适用环境
bash
# 需要基础工具齐全
for c in ping dig getent curl ss sudo tcpdump traceroute; do command -v $c >/dev/null && echo "$c ok" || echo "$c MISSING"; done1
2
2
操作步骤
第 1 步:本机 IP 与路由是否正常
bash
ip -br addr show
ip route show default # 看有没有默认网关1
2
2
第 2 步:DNS 能不能解析
bash
getent hosts www.example.com
dig +short www.example.com @223.5.5.51
2
2
第 3 步:网关通不通(链路第一跳)
bash
ping -c3 $(ip route show default | awk '{print $3}')1
第 4 步:目标 IP 通不通
bash
ping -c3 93.184.216.34 # 用第2步解析出的 IP1
第 5 步:路径上哪跳丢(路由)
bash
traceroute -n 93.184.216.34
# 或 mtr -n 93.184.216.34(持续观测)1
2
2
第 6 步:端口通不通(传输层)
bash
sudo ss -lntp '( sport = :443 )' # 本机服务是否监听
nc -vz 93.184.216.34 443 # 远端端口是否可达1
2
2
第 7 步:防火墙是否拦截
bash
sudo firewall-cmd --list-all # firewalld
sudo iptables -L -n -v # iptables1
2
2
第 8 步:应用层返回什么
bash
curl -s -o /dev/null -w "code=%{http_code} ttfb=%{time_starttransfer}\n" https://www.example.com
sudo tcpdump -nn "host 93.184.216.34 and port 443" # 看是否真有来回包1
2
2
验证
bash
# 八步走完,把结论填进一句话:
# 「DNS(是/否) → 网关(通/不通) → 目标IP(通/不通) → 端口(通/不通) → 防火墙(拦/放) → 应用(200/5xx)」
# 哪一步断,问题就在那一层。1
2
3
2
3
常见坑
WARNING
ping 不通不代表服务不可用——很多服务器禁 ICMP。ping 只证明「三层可达」,最终要以 curl/nc 测目标端口为准。
DANGER
traceroute/mtr 会产生较多出站探测包,在生产或受限网络里可能被限速/告警;排错用少量包(-q 1 或 -m 限制跳数)即可,别长期高频跑。