以下是一次真实场景的完整排查流程。
故障背景
现象:生产环境一台 Linux 服务器(192.168.1.100)突然无法访问外网,业务服务请求超时,同网段其他机器正常。
第一阶段:确认故障范围
1. 确认是否完全不通
# 先 ping 本地回环,排除协议栈问题ping -c 4 127.0.0.1
结果:正常,说明本机 TCP/IP 协议栈没问题。
# ping 网关ping -c 4 192.168.1.1
结果:100% packet loss,网关都 ping 不通。
# ping 同网段另一台机器ping -c 4 192.168.1.101
结果:同样不通。
初步结论:问题出在本机到局域网这一段,不是远端问题。
第二阶段:检查网卡和链路层
2. 查看网卡状态
ip link show
输出:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 ...2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN ...
发现:eth0 状态是 DOWN,没有 UP 标志,网卡没启动。
3. 尝试手动拉起网卡
ip link set eth0 upip link show eth0
输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ... state UP ...
状态变成 UP 了,再测:
ping -c 4 192.168.1.1
结果:还是不通。网卡起来了但还是有问题,继续查。
第三阶段:检查 IP 和路由
4. 查看 IP 地址
ip addr show eth0
输出:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ... link/ether 52:54:00:xx:xx:xx brd ff:ff:ff:ff:ff:ff
发现:没有 IP 地址!网卡有了但 IP 丢失了。
5. 临时配置 IP
ip addr add 192.168.1.100/24 dev eth0
ping -c 4 192.168.1.1
结果:通了!能 ping 到网关了。
但是 ping 外网还不行:
ping -c 4 8.8.8.8
结果:不通。
6. 查路由表
ip route show
输出:
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100
发现:没有默认路由(default via ...),所以出不了局域网。
7. 添加默认路由
ip route add default via 192.168.1.1
ping -c 4 8.8.8.8
结果:通了!
第四阶段:但业务还不通——检查 DNS
8. 测试域名解析
curl https://www.baidu.com# 或wget- q --spider https://www.baidu.com
结果:curl: (6) Could not resolve host: www.baidu.com
DNS 解析失败。
cat /etc/resolv.conf
输出:文件为空,或者:
nameserver 0.0.0.0
发现:DNS 配置丢失。
9. 临时修复 DNS
echo "nameserver 8.8.8.8" > /etc/resolv.confecho "nameserver 114.114.114.114" >> /etc/resolv.conf
ping -c 4 www.baidu.comcurl -I https://www.baidu.com
结果:正常了!
第五阶段:排查为什么配置会丢失
到这里网络恢复了,但要找根因,否则重启后还会复发。
10. 检查网络配置文件
# CentOS/RHELcat /etc/sysconfig/network-scripts/ifcfg-eth0
输出:
DEVICE=eth0BOOTPROTO=staticONBOOT=no # <-- 问题!开机不自动启动IPADDR=192.168.1.100NETMASK=255.255.255.0GATEWAY=192.168.1.1DNS1=8.8.8.8
ONBOOT=no 导致开机不启动网卡,有人之前修改过这个文件。
11. 再检查是否有 NetworkManager 冲突
systemctl status NetworkManagersystemctl status network
发现两个服务同时运行,NetworkManager 覆盖了 network 服务的配置,导致部分配置混乱。
12. 检查系统日志确认时间线
journalctl -u NetworkManager --since"2 hours ago" | grep-i eth0# 或grep -i "eth0\|network" /var/log/messages | tail -50
日志显示:约 2 小时前,有人执行了 systemctl restart NetworkManager,触发了网卡重新初始化,但 ifcfg-eth0 中 ONBOOT=no 使网卡没有被正确配置。
第六阶段:彻底修复
13. 修改配置文件
vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改:
DEVICE=eth0BOOTPROTO=staticONBOOT=yes # 改为 yesIPADDR=192.168.1.100PREFIX=24GATEWAY=192.168.1.1DNS1=8.8.8.8DNS2=114.114.114.114
14. 重启网络服务验证
systemctl restart network# 或新系统用nmcli connection reloadnmcli connection up eth0
ip addr show eth0ip route showping -c 4 8.8.8.8curl -I https://www.baidu.com
全部正常。
15. 重启机器最终验证
reboot
重启后网络自动恢复,问题彻底解决。
完整排查思路总结
网络不通 │ ├─ ping 127.0.0.1 ──> 不通 ──> 协议栈/内核问题 │ ├─ ping 网关 ──> 不通 │ │ │ ├─ ip link show ──> DOWN ──> 网卡没启动 │ ├─ ip addr show ──> 无IP ──> IP未配置 │ └─ ip route show ──> 无默认路由 ──> 路由缺失 │ ├─ ping 外网IP通,但域名不通 │ └─ /etc/resolv.conf ──> DNS配置丢失 │ └─ 根因追查 ├─ 配置文件 ONBOOT=no ├─ NetworkManager 与 network 服务冲突 └─ 日志确认操作时间线
常用排查命令速查
| 目的 | 命令 |
|---|
| 查网卡状态 | ip link show |
| 查IP地址 | ip addr show |
| 查路由 | ip route show |
| 查DNS | cat /etc/resolv.conf |
| 测试连通性 | ping, traceroute, mtr |
| 测试端口 | telnet ip port, nc -zv ip port |
| 抓包分析 | tcpdump -i eth0 -nn |
| 查防火墙规则 | iptables -L -n -v |
| 查系统日志 | journalctl -u NetworkManager |
| 查连接状态 | ss -tunp |
核心经验:网络排查要分层,从物理链路 → 数据链路 → IP层 → 传输层 → 应用层,逐层验证,不要跳跃。配置临时恢复后,一定要追查根因,否则下次重启还会复发。