Linux 网络不通或不稳定:在终端里诊断并修复
一份循序渐进的 Linux 网络故障排查指南:检查网卡和路由、沿路径定位丢包、重连 Wi-Fi,并端到端验证连通性。
快速开始
Linux 机器断网或网络又慢又不稳定时,正确做法是自下而上系统排查:网卡、路由、路径,最后是整体连通性。本指南只使用经过验证的命令,帮你定位故障点并确认修复效果。
症状
确认网卡是否有 IP 地址
先从最底层排查:很多网络问题其实只是网卡处于 DOWN 状态或没有拿到 IP。用一条命令就能以表格形式列出所有接口的状态和地址,几秒钟判断是不是链路本身的问题。如果接口显示 DOWN 或没有地址,要修的是连接,而不是路由。
一条命令就能把每个网卡的名称、状态和 IPv4/IPv6 地址打印成简短表格——这是取代又长又难记的 `ifconfig` 和冗长的 `ip addr` 输出的现代做法。
$ ip -br a查看目标地址实际走的路由
如果网卡看起来正常,直接问内核:访问目标会走哪个接口、用哪个源地址和网关。这一步能立刻暴露默认网关错误或流量走了错误接口的情况——这是“有的机器通、有的不通”的常见原因。只要输出里的网关符合预期,说明路由没问题。
让内核直接告诉你去某个地址走哪个网卡、哪个网关、用什么源 IP,不用自己翻路由表猜。
$ ip route get 192.168.1.10长时间观察是否存在间歇性丢包
只 ping 一次几乎说明不了问题。用带时间戳的持续 ping 抓住丢包和延迟突发的时机,并和具体事件(重启、大文件下载、某个时段)对上。如果出现丢包或回复中断,就复现了故障,也知道了它何时发生。
让 ping 一直运行,并在每条回复前打印 Unix 时间戳,方便定位丢包发生的具体时间。
$ ping -D 8.8.8.8定位丢包发生在路径的哪一跳
如果目标能通但很慢或经常丢包,需要判断问题出在自家网络、运营商还是靠近服务器的位置。mtr 会持续探测每一跳并实时显示每个路由器的丢包率和延迟,从而精确定位质量劣化的那一跳。如果某跳开始丢包且后续每跳都丢,问题就在那里。
连接慢或不稳定时,traceroute 只能给一张静态快照。mtr 会持续对路径上每一跳发包,实时显示每个路由器的丢包率和延迟。
$ mtr -rw example.comWi-Fi 断开时重新建立连接
如果前面的排查显示接口 DOWN 或连接缺失(在通过 SSH 管理的无界面服务器上很常见),用 NetworkManager 在终端里重新连上。这种方式会重新建立关联并保存连接配置,重启后依然生效。成功的标志:接口恢复 UP,之前的检查也能看到 IP 地址了。
服务器或 SSH 会话里没有图形界面——NetworkManager 的 nmcli 可以完全在命令行下扫描、连接并保存 Wi-Fi 配置。
$ nmcli device wifi connect "MySSID" password "MyPassword"▾ 撤销
$ nmcli connection delete "MySSID"确认整条路径恢复正常
修复完成后对目标做一次 traceroute:每一跳都应在合理时间内响应,最后一跳应该就是目标主机。与排查阶段 mtr 的结果对比,看之前出问题的那一跳是否消失或改善。每一跳都稳定回复,说明整条路径已端到端验证通过。
经典的「一用就忘」命令:traceroute 会列出你与目标之间的每一台路由器,以及探测包到每一跳的往返时间。
$ traceroute example.com从外部验证出网是否正常
最后确认你不只是能到网关,而是真的能上网。打印出口公网 IPv4 地址可以证明 DNS、路由和 NAT 端到端都正常。能返回地址就说明连接已完全恢复;如果挂了 VPN,还能看出流量是否真的从 VPN 出去。
终端里直接显示路由器或 VPN 出口的公网 IP,不用打开浏览器。
$ curl -s https://api.ipify.org如何确认已解决
对目标做一次干净的 traceroute 且每一跳稳定回复,再成功查到公网 IP,即可确认路由和出网已恢复正常。
一键全部撤销
上面每一条命令都可以撤销。按此顺序执行即可全部还原。
$ nmcli connection delete "MySSID"执行前请先确认——部分步骤之间可能并非相互独立。
来源
- ip(8) — Linux manual page依据: Documents `ip -br addr` as the brief, one-line-per-interface output format of the ip command
- ip-route(8) — main IPv4/IPv6 routing table management依据: Page documents the 'get' subcommand ('ip route get' — get a single route) and route attributes like via/dev/src; confirms 'ip route' and 'get' appear in the text.
- ip-route(8) — Ubuntu man page依据: Man page contains the 'get' subcommand description showing it performs a route lookup and returns the resolved via/dev/src values.
- ping(8) — send ICMP ECHO_REQUEST to network hosts依据: Documents -D to print timestamps before each line and -i interval / -c count semantics.
- mtr(8) — combines the functionality of traceroute and ping依据: Documents mtr as traceroute+ping combined, and the -r report mode with -w wide format
- MTR — My Traceroute依据: Official mtr project page describing its real-time route/loss statistics display
- nmcli(1) — command-line tool for controlling NetworkManager依据: Documents `nmcli device wifi connect <SSID> password <pass>` and `nmcli device wifi list` for scanning
- traceroute(8) — print the route packets trace to network host依据: Documents traceroute's default UDP probing, TTL increments, and output format with hop latency
最后验证: 2026-09-21