Linux 网络故障排查实战:从 ping 到 traceroute 一步步定位“连不上”

服务器突然连不上、网站打不开、内网 SSH 卡死……遇到“网络不通”时,很多人第一反应是重启,但重启往往治标不治本。真正高效的做法是用一套固定流程逐步缩小范围。本文以 Linux 环境为例,把常用的网络故障排查命令串成一条可复用的排查链,帮你从“ping 不通”快速定位到根因。

一、先分清:是本机问题还是网络问题

排错的第一步是界定边界。先确认是不是只有这一台机器异常:同一局域网的其他设备能否访问?如果是“所有设备都连不上外网”,多半是路由器或运营商侧的问题;如果只是这一台 Linux 主机异常,那就要在本机找原因。换个角度想,如果是远程服务器连不上,先用控制台的带外通道(VNC / 云厂商控制台)登录,确认系统还活着,再判断是网络层还是应用层断了。

二、第一板斧:ping 与 ip 看基本连通

ping 是最朴素的连通性测试,但它只能证明“三层通不通”,并不能说明端口是否开放。常见现场:能 ping 通网关却访问不了网站,说明问题在更上层(DNS、防火墙或目标端口)。再看本机地址配置:ip addr 确认网卡有拿到 IP,ip route 看默认路由指向的网关是否正确。很多“连不上”其实是 IP 冲突、网段配错或路由缺失,ip 命令一眼就能看出端倪。日常命令行效率的积累可以参考《Linux 命令行效率翻倍:10 个被低估却每天用得上的实用命令与技巧》,里面不少技巧在排障时也用得上。

三、第二板斧:ss / netstat 看端口与监听

确认网络层通了,接下来要确认“服务到底起没起、监听在哪个端口”。用 ss -tlnp 查看本机正在监听的 TCP 端口,确认你的 Nginx、MySQL 或服务进程确实在 0.0.0.0(或正确 IP)上监听。常见误区:服务只监听了 127.0.0.1,外部自然连不进来。如果怀疑是服务本身没拉起,可以对照《用 systemd 管理开机启动服务:从 enable 到 journalctl 排错全流程》,用 systemctl statusjournalctl -u 服务名 看启动日志,往往能直接看到报错。

四、第三板斧:traceroute / mtr 看路径

当跨网段或跨公网连不上时,需要知道数据包卡在哪一段。traceroute 目标IP 会逐跳显示经过的路由节点,哪跳开始超时,问题通常就在那一跳附近;mtr 目标IP 则持续采样,能看出哪一跳丢包严重。注意很多云厂商和运营商会禁 ICMP,traceroute 全星号并不一定代表断网,要结合业务端口实测。云服务器侧的资源问题也别忽略,比如实例内存被预留吃紧导致网络栈异常,可顺手检查《云服务器 Linux 预留内存(crashkernel/kdump)占用了多少?怎么安全回收》,排除是系统资源被悄悄占满引发的连锁故障。

五、DNS 解析失败的专门排查

“能 ping 通 IP 却 ping 不通域名”基本就是 DNS 问题。先看 /etc/resolv.conf 里 nameserver 是否填了可用地址,用 nslookup 域名dig 域名 单独测试解析。systemd-resolved 环境下还可能遇到 stub 解析器缓存污染,必要时重启解析服务或临时换成公共 DNS 验证。把“IP 通但域名不通”当成独立分支处理,能省掉大量无效尝试。

六、防火墙与 SELinux 别漏了

Linux 本机防火墙是“连得上但端口被挡”的头号嫌疑。iptables -L -nnft list ruleset 看规则是否放行目标端口;用 firewalld 的机器用 firewall-cmd --list-all 核对。SELinux 在 enforcing 模式下也可能拦掉非常规端口的服务,临时设为 permissive 验证一下即可定位。记住:云安全组是另一道墙,本机放行了不代表云端也放行,两层都要查。

七、把排查串成一套固定流程

总结一条通用链路:本机 IP/路由(ip)→ 基础连通(ping 网关/目标)→ 端口监听(ss)→ 应用状态(systemctl/journalctl)→ 路径(traceroute/mtr)→ DNS(dig)→ 防火墙/SELinux。按这个顺序走,90% 的“连不上”都能在十分钟内收敛到具体环节。排障的价值不在于记住哪条命令,而在于建立“分层缩小范围”的思维习惯——这也是 Linux 运维最实在的内功。

© 版权声明
THE END
喜欢就支持一下吧
点赞11赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容