当前位置:首页>Linux>别再乱猜了!Linux网络不通,按这6个阶段排查,100%找到根因

别再乱猜了!Linux网络不通,按这6个阶段排查,100%找到根因

  • 2026-10-11 07:43:20
别再乱猜了!Linux网络不通,按这6个阶段排查,100%找到根因

以下是一次真实场景的完整排查流程。


故障背景

现象:生产环境一台 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
查DNScat /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层 → 传输层 → 应用层,逐层验证,不要跳跃。配置临时恢复后,一定要追查根因,否则下次重启还会复发。

最新文章

随机文章