导语:Linux 网络问题看似复杂,其实大多可以沿着“链路、地址、路由、DNS、端口、服务”这条线索逐层排查。本文整理一套适合服务器、虚拟机和日常运维场景的实用方法,尽量少讲概念,多给可落地的命令与判断思路 🛠️。
一、先确认网络由谁管理
在不同发行版中,网络可能由 NetworkManager、systemd-networkd、传统 ifcfg 脚本或云平台初始化工具管理。排障前先看管理者,避免手动改了配置却被后台服务覆盖。常见做法是执行 systemctl status NetworkManager、networkctl status 或查看 /etc/netplan/、/etc/sysconfig/network-scripts/ 等目录。NetworkManager 官方说明中,nmcli 可用于创建、显示、编辑、启用和停用网络连接,也能查看设备状态,适合无图形界面的服务器使用 [1]。
二、查看网卡状态与 IP 地址
第一步建议使用 ip link 看网卡是否存在、是否 UP;再用 ip addr 查看是否拿到 IPv4 或 IPv6 地址。ip 命令本身用于显示或操作路由、网络设备、接口和隧道,是现代 Linux 网络管理的核心工具之一 [2]。如果网卡是 DOWN,可尝试 ip link set eth0 up;如果地址缺失,则要继续判断是 DHCP 未获取、静态配置错误,还是网卡名称写错。
- 查看简洁状态:ip -br addr,适合快速扫描多块网卡。
- 查看链路统计:ip -s link,重点关注 RX/TX 错误、丢包和 dropped。
- 临时加地址:ip addr add 192.168.1.10/24 dev eth0,注意重启后通常不会保留。
三、配置静态地址与网关
如果使用 NetworkManager,可用 nmcli con show 找到连接名,再通过 nmcli con mod 连接名 ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1 ipv4.method manual 设置静态地址,最后执行 nmcli con up 连接名 生效。对于 Ubuntu 常见的 Netplan,通常编辑 YAML 文件后执行 netplan apply;对于使用 systemd-networkd 的环境,则常见配置位于 /etc/systemd/network/。实际操作前建议备份原文件,因为远程服务器一旦网关写错,SSH 可能立即中断 😅。
四、路由排查:能不能走出去
地址正常不代表能访问外网,下一步看路由。执行 ip route 检查是否存在 default 路由,例如 default via 192.168.1.1 dev eth0。如果没有默认路由,访问跨网段地址会失败;如果有多条默认路由,要注意 metric 优先级。ip route 专门用于管理内核路由表,可执行 show、add、del、change 等操作 [3]。
- 先 ping 网关:ping 192.168.1.1,失败多半是本地链路、地址段或交换网络问题。
- 再 ping 公网 IP:ping 1.1.1.1,成功说明路由大概率可用。
- 最后测域名:ping example.com,公网 IP 成功但域名失败,通常是 DNS 问题。
五、DNS 问题不要只看 /etc/resolv.conf
许多系统的 /etc/resolv.conf 不是手工维护文件,而是由 NetworkManager 或 systemd-resolved 动态生成。使用 systemd-resolved 的系统可以执行 resolvectl status 查看当前 DNS 服务器、搜索域和每个链路的解析配置;resolvectl 可用于解析域名、IPv4/IPv6 地址、DNS 记录,并检查或重新配置解析器 [4]。如果只修改 /etc/resolv.conf 后又被覆盖,应回到网络管理工具里配置 DNS。
- 测试解析:resolvectl query example.com。
- 查看 DNS 状态:resolvectl status。
- 临时指定 DNS:可用对应网络管理工具设置,避免直接硬改动态文件。
六、端口、监听与防火墙
当网络可达但业务不可用时,要把注意力放到端口和服务。先在服务器本机执行 ss -lntup,确认服务是否监听在正确的 IP 和端口上;监听在 127.0.0.1 只允许本机访问,监听在 0.0.0.0 或指定内网 IP 才可能被远端访问。随后检查 firewalld、iptables、nftables 或云安全组。很多“端口不通”并不是应用挂了,而是应用监听地址、防火墙规则、容器端口映射或云平台入站规则不一致。
七、抓包是最后的证据
当 ping、路由、DNS、端口都看起来正常,但问题仍然存在时,可以使用 tcpdump 抓包确认数据有没有到达。例如 tcpdump -i eth0 host 192.168.1.20 可观察指定主机通信,tcpdump -i eth0 port 443 可关注 HTTPS 流量。抓包时不要只看“有没有包”,还要看方向:请求到达但没有响应,重点查本机服务或防火墙;请求根本没到达,重点查上游路由、交换机、云安全组或客户端路径。
实用建议:远程改网络配置前,最好开一个持久会话,例如 tmux,并准备回滚命令;如果是云服务器,先确认控制台是否支持 VNC、串口或救援模式。
八、常见故障速查清单
- 网卡无地址:检查 DHCP 服务、静态配置、网卡名称和网络管理服务状态。
- 能 ping 网关但不能上网:检查默认路由、NAT、上游网关和运营商或云网络出口。
- 能 ping 公网 IP 但域名失败:检查 DNS 配置、resolvectl 状态和搜索域。
- 本机能访问服务,远端不能:检查监听地址、防火墙、安全组和容器端口映射。
- 偶发断连:关注网卡错误计数、交换机端口、MTU、驱动日志和系统负载。
总结
Linux 网络故障排查不要一上来就重启服务或改配置,而应按层次验证:先看网卡是否 UP,再看 IP,接着看路由和 DNS,最后检查端口、防火墙与抓包结果。命令可以很多,但核心思路只有一个:每一步都证明一个假设,逐步缩小范围。掌握 ip、nmcli、resolvectl、ss 和 tcpdump 这几类工具后,大多数 Linux 网络问题都能被快速定位并安全修复 ✅。