能 ping 通 8.8.8.8 说明路由、nat、物理链路基本正常;ping 不通但能解析 ip 多因目标禁 icmp;真正卡外网的 90% 故障发生在 ping 127.0.0.1 或 ping 网关失败——前者表明协议栈未加载,后者指向局域网出口问题。

能 ping 通 8.8.8.8 就说明路由、NAT、物理链路基本正常;ping 不通但能解析出 IP,大概率是目标服务器禁 ICMP;真正卡住外网的,90% 是 ping 127.0.0.1 或 ping 网关 这两步就失败了。
ping 127.0.0.1 失败:协议栈没起来
这不是“网络没连好”,是系统最底层的网络功能压根没加载。所有后续操作都无效。
-
ping 127.0.0.1 -c 4返回connect: Network is unreachable或完全静默,立刻查dmesg | grep -i "net\|ipv4\|failed",重点看有没有Failed to register protocol或IPv4 init failed - 临时恢复:尝试
sudo systemctl restart systemd-networkd(或NetworkManager,取决于你用的服务) - 极少数情况是
ipv6模块冲突拖垮 IPv4,可试sudo modprobe -r ipv6 && sudo modprobe ipv6 - 别急着重装系统——先确认是否误删了
/etc/modules中的ip_tables或nf_defrag_ipv4
ping 得通网关但 ping 不通 8.8.8.8:默认路由或 OUTPUT 链拦截
能通网关,说明网线、ARP、子网掩码、接口 UP 状态全 OK;卡在 8.8.8.8,问题一定出在“怎么把包送出去”这一步。
- 执行
ip route show default,若无输出,必须手动加:sudo ip route add default via 192.168.1.1 dev eth0(把 IP 和接口名换成你的真实值) - 云服务器/虚拟机要额外检查:
sudo iptables -L OUTPUT -v -n | grep icmp—— 如果看到icmp被DROP,就是它拦的 - 企业网或校园网环境下,上游交换机 ACL 常默认屏蔽 ICMP,此时
curl -I http://httpbin.org/ip可能成功,但ping必然失败 - 别只信
arp -a显示有 MAC 地址就认为网关可达,改用curl -s -o /dev/null -w "%{http_code}" http://192.168.1.1测试真实 HTTP 层响应
ping 8.8.8.8 成功但 ping www.baidu.com 失败:纯 DNS 故障
这是最常被误判为“网络不通”的场景。只要 ping 8.8.8.8 成功,就能排除防火墙、路由、NAT、物理链路所有问题——只是域名变不了 IP。
- 先看配置:
cat /etc/resolv.conf,确认有nameserver行,且 IP 是可用 DNS(如8.8.8.8、114.114.114.114) - 强制指定 DNS 测试:
nslookup www.baidu.com 8.8.8.8,若超时,说明你配的 DNS 本身不可达,不是本机问题 - Ubuntu 22.04+ 默认走
systemd-resolved,/etc/resolv.conf可能是软链到/run/systemd/resolve/stub-resolv.conf,直接改文件会失效,应改/etc/systemd/resolved.conf并sudo systemctl restart systemd-resolved - 别忽略
/etc/hosts文件——里面若有www.baidu.com的错误映射,ping会优先走它,绕过 DNS
排查时容易被忽略的三个点
很多故障反复折腾几小时,其实就卡在这几个细节上:
-
ip link show看到接口state UP,但没注意LOWER_UP缺失——代表物理链路断了,换网线或查交换机端口 - 配置静态 IP 后忘了设
GATEWAY=,或者/etc/sysconfig/network-scripts/ifcfg-eth0里写成DNS1=8.8.8.8,但/etc/resolv.conf没同步,导致 DNS 不生效 - 某些国产路由器或光猫会把 ICMP 包限速到 1pkt/s,
ping -c 4看似全丢,其实是前 3 个被限速丢弃,第 4 个才收到——换ping -c 1多试几次再下结论











