Linux 网络故障排查应按物理层→协议栈→IP 配置→路由→DNS→应用层顺序验证:先用 ip a 检查网卡 UP 状态和有效 IP,再逐级 ping 测试连通性,接着用 ip route 和 resolv.conf 核对路由与 DNS 配置,最后通过 mtr、ss、nc 和 tcpdump 定位链路、端口及数据包问题。

Linux 网络状态检测不是靠猜,而是按层验证:物理层→协议 栈→IP 配置→路由→DNS→应用层。只要顺序对、命令准,90% 的问题一眼就能定位。
看网卡有没有“活”
先确认硬件和驱动是否就位,接口是否启用、有没有 IP。
- ip a 查所有接口:重点看目标网卡(如 ens33)是否显示 UP,是否有 inet 开头的 IPv4 地址(不是 169.254.x.x 这种链路本地地址)
- 若状态是 DOWN,用 sudo ip link set ens33 up 启用
- 若没 IP,检查 DHCP 是否运行(sudo systemctl status dhcpcd 或 dhclient -v ens33),或手动配:sudo ip addr add 192.168.1.100/24 dev ens33
测连通性,分四步走
别一上来就 ping百度,要从本机出发,层层外推。
- ping -c 3 127.0.0.1:通不了说明 TCP/IP 协议栈损坏(极少见,多为内核或模块问题)
- ping -c 3 本机局域网 IP(如 192.168.1.100):不通说明网卡收发异常(驱动、线缆、交换机 端口 可能故障)
- ping -c 3 网关 IP(如 192.168.1.1):不通但前两步通,大概率是网关离线、网线松动或 VLAN 配置错
- ping -c 3 8.8.8.8:能通但 ping www.baidu.com 不通 → DNS 问题;全都不通 → 路由或 防火墙 拦截
查路由和 DNS 是不是“指错路”
有 IP 不代表能上网,得看数据包往哪送、域名能不能变 IP。
- ip route:必须有一条 default via X.X.X.X,后面跟的网关 IP 要和你实际网关一致;没有就加:sudo ip route add default via 192.168.1.1 dev ens33
- cat /etc/resolv.conf:至少有一行 nameserver 8.8.8.8 或 nameserver 114.114.114.114;空或写错就改,或用 sudo systemd-resolve –set-dns=8.8.8.8(systemd 系统)
- dig www.qq.com @8.8.8.8 +short:绕过系统 DNS 直连公共服务器测试,有返回 IP 说明本地 DNS 坏,没返回说明网络出向被拦
追路径、看端口、抓包定案
前面都正常但服务打不开?这时候需要深入链路和应用层。
- mtr -r -c 20 8.8.8.8:比 traceroute 更直观,能看每一跳丢包率和延迟,某跳开始全 * 或高丢包,问题就在那台设备或它之后
- ss -tuln:查本机监听哪些端口(如 Web 服务该有 80/443,SSH 该有 22),没看到说明服务没起或绑定错了地址(比如只绑了 127.0.0.1)
- nc -zv 192.168.1.100 22:从其他机器测试目标端口是否可达,排除本地防火墙干扰;不通再查 sudo ufw status 或 sudo iptables -L
- 真卡壳时:sudo tcpdump -i ens33 host 8.8.8.8 and icmp -c 10 抓 ICMP 包,看请求发没发出、回包来没来,直接验链路真假
基本上就这些。不复杂但容易忽略顺序——从自己开始,一跳一跳往外试,比瞎改配置快十倍。