深色模式
网络不通排查
摘要:网络不通最容易无头绪地乱试。本文给出固定的八步顺序:网卡 → 路由 → 网关 → ARP → DNS → 防火墙 → 抓包 → 远端端口,每一步都有明确的判定标准,做到哪一步失败就在哪一层。
适用环境
bash
ip -V
cat /etc/os-release | head -2
which ping traceroute tcpdump curl nc1
2
3
2
3
排障步骤
第 1 步:本机网卡与地址
bash
ip addr show
ip link show1
2
2
确认网卡 UP、有正确 IP、无 NO-CARRIER。
第 2 步:本机路由表
bash
ip route show
ip route get <目标IP>1
2
2
ip route get 直接告诉你内核会选哪条路、从哪个源 IP 出去,比自己看路由表准确。
第 3 步:网关连通性
bash
ip route show default
ping -c 3 -W 2 <网关IP>1
2
2
第 4 步:ARP / ND 解析
bash
ip neigh show
ip neigh show <网关IP>1
2
2
网关 ARP 项为 FAILED/INCOMPLETE,说明二层就没通(常见于交换机、VPC、bond 问题)。
第 5 步:DNS 是否解析正确
bash
cat /etc/resolv.conf
getent hosts <域名>
dig +short <域名>1
2
3
2
3
ping 通 IP 但访问域名失败
直接锁定为 DNS 问题,不必再往后查路由和防火墙。
第 6 步:本机防火墙与安全组
bash
iptables -S 2>/dev/null | head -40
nft list ruleset 2>/dev/null | head -40
iptables -t nat -S 2>/dev/null | head -201
2
3
2
3
注意:云环境还有安全组(在控制台,不在主机内)和网络 ACL。
第 7 步:抓包确认包的真实去向
bash
tcpdump -i any -nn host <目标IP> -c 20
tcpdump -i any -nn 'icmp or arp' -c 201
2
2
有去无回 → 对方或中间链路问题;无去包 → 本机路由/策略问题。
第 8 步:远端端口是否可达
bash
nc -vz -w 3 <目标IP> <端口>
timeout 5 bash -c 'cat < /dev/null > /dev/tcp/<目标IP>/<端口>' && echo port-ok
curl -sS -o /dev/null -w '%{http_code}\n' http://<目标IP>:<端口>/1
2
3
2
3
抓包涉及数据合规
tcpdump 会捕获明文业务数据。生产环境务必限定 host/端口、限制包数 -c,不要把抓包文件随意外传。
验证
bash
ping -c 3 <目标IP>
nc -vz -w 3 <目标IP> <端口>
curl -sS -o /dev/null -w 'code=%{http_code} time=%{time_total}\n' http://<目标IP>:<端口>/1
2
3
2
3
常见坑
ping 不通不等于网络不通
很多环境禁 ICMP。应以 TCP 端口探测(nc)为准,不要因 ping 失败误判。
双网卡/多路由导致回包走错路
请求能发出去但回包从另一网卡走,表现为时通时不通。用 ip route get 双向验证。
conntrack 满导致新建连接失败
症状是不通但抓包一切正常,查 dmesg 是否有 nf_conntrack: table full。
为"快速验证"直接清空防火墙
iptables -F 会一次性放开所有策略,等于把主机暴露。应使用临时精确放行规则,并在验证后恢复。