Linux 网络配置与排查实战:从连不上到定位根因的完整清单

SSH 连不上、网站打不开、域名解析失败?这篇文章把 ip/ss/ping/dig/ufw/firewalld 等命令按"接口→IP→路由→端口→连通性→DNS→防火墙"的顺序串成一套可直接套用的排查流程。

拿到一台 VPS 之后,最可能让你半夜爬起来排查的就是网络问题——SSH 连不上、网站打不开、域名解析失败。很多人一遇到网络故障就慌,其实 Linux 自带一套非常成熟的自检工具,只要按"接口→IP→路由→端口→连通性→DNS→防火墙"的顺序一层层往下查,九成的故障都能在十分钟内定位。这篇文章把最常用的网络排查命令按实战顺序排列,并配上一份可以直接套用的排查清单,让你下次再遇到"连不上"时不再抓瞎。

一、先换工具:ip/ss 取代 ifconfig/netstat

如果你还在用 ifconfig 和 netstat,建议尽快切换到 iproute2 套件里的 ip 和 ss。原因很现实:在 Ubuntu 22.04、Debian 12、Rocky 9 这些较新的发行版里,ifconfig 和 netstat 默认根本没装,得额外装 net-tools 包才能用;而 ip 和 ss 是内核原生的,速度快、信息全。更关键的是,大量新版教程和排错文档都基于 ip/ss 来写,早切换早省心。下面所有示例都以 ip/ss 为准,你会发现自己再也回不去老工具了。

二、看接口与 IP:先确认机器"有没有网卡"

排查的第一步永远是看接口状态。ip addr(或简写 ip a)会列出所有网卡、它们的 MAC 地址、IPv4/IPv6 地址以及状态(UP/DOWN)。如果你的公网 IP 没出现,或者接口显示 DOWN,那后面的连通性测试根本无从谈起。想快速扫一眼,用 ip -br addr 得到一行一行的精简视图,非常省心。ip link 则专门看链路层,比如 MAC 和 MTU,必要时用 ip link set eth0 up 手动把网卡拉起来。记住:没有 IP 的接口,就像没有门牌号的房子,外面根本找不到它。

ip addr
ip -br addr
ip link
ip link set eth0 up

三、路由与默认网关:数据到底往哪走

接口有 IP 不代表能上网,还得有正确的路由,尤其是默认网关。ip route 会打印整张路由表,其中 ip route show default 那一行告诉你"不知道往哪去的包,全交给谁"。如果你发现没有 default 路由,那机器只能和同网段通信,出网必定失败。临时加一条静态路由用 ip route add,但注意这只是内存里的临时改动,重启就没了——真正的永久配置要交给 netplan 或 nmcli(见下文)。理解路由,是理解"为什么我能 ping 通内网却出不了网"的关键。

ip route
ip route show default
ip route add 10.0.0.0/24 via 192.168.1.1

四、端口监听排查:服务真的在听吗

网站打不开,十有八九是服务没监听在正确地址上。ss -tulnp 能列出所有正在监听的 TCP/UDP 端口,其中 -p 还能显示是哪个进程占用的(需要 sudo)。重点看 Local Address 那列:如果服务只监听 127.0.0.1:80,那只有本机能访问,外网自然连不上;必须监听 0.0.0.0:80 才算对外暴露。想查特定端口,用 ss -tlnp 'sport = :80' 精确过滤。这一步能帮你区分"服务没起"和"服务起了但没对外"。

ss -tulnp
ss -tlnp 'sport = :80'

五、连通性测试:ping / traceroute / mtr

确认接口和端口 OK 后,测试连通性。ping -c 4 8.8.8.8 发四个包测 IP 层通不通;如果 IP 能通但域名不通,那就是 DNS 问题,别再怀疑网关。traceroute(或更好用的 mtr -n)能逐跳显示数据包走到哪一层开始丢包,对判断是机房内、骨干网还是对端的问题极有帮助。mtr 是实时滚动的,盯着它看几秒就能大概知道瓶颈在哪。排查时要一层层隔离:先 IP、再域名、再端口,不要一上来就重启服务。

ping -c 4 8.8.8.8
ping -c 4 example.com
mtr -n example.com

六、DNS 解析:dig 与 resolvectl

现代系统大多由 systemd-resolved 接管 DNS,/etc/resolv.conf 往往只是指向 stub 文件的软链接,手工改它重启就失效。所以查 DNS 应该用 dig example.com 看返回,或 dig +short 只要 IP,也可以 dig @8.8.8.8 指定公共 DNS 来验证是不是你本地 DNS 的问题。resolvectl status 能直接看到当前生效的 DNS 服务器,resolvectl query 则走系统解析器查一次。很多人以为"网络断了",其实只是 DNS 配错了一个地址。

dig example.com
dig +short example.com
dig @8.8.8.8 example.com
resolvectl status

七、Ubuntu 静态 IP:netplan

云厂商一般给 DHCP,但自己托管机器常需静态 IP。Ubuntu Server 用 netplan,配置文件在 /etc/netplan/*.yaml。注意两点:一是 YAML 对缩进极其敏感,空格不对直接报错;二是新版已弃用 gateway4,要用 routes 写法。改完务必先 sudo netplan try,它会应用并等待你确认,超时自动回滚——这能救你一命,避免改错 IP 把自己锁在门外。确认无误再 sudo netplan apply。永远不要在生产机上跳过 try 直接 apply。

sudo netplan try
sudo netplan apply

八、RHEL 网络:nmcli

CentOS/Rocky/Alma 这类 RHEL 系默认用 NetworkManager,命令行工具是 nmcli。查状态用 nmcli device status,改 IP 用 nmcli connection modify eth0 ipv4.method manual ipv4.addresses ... 然后 nmcli connection up eth0 生效。要改回 DHCP 就把 method 设成 auto。nmcli 的好处是所有改动持久化进连接配置,重启不丢,比手改配置文件稳得多。对新手来说,nmcli 一条命令搞定静态 IP,比手写文件友好太多。

nmcli device status
sudo nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.1.20/24 ipv4.gateway 192.168.1.1 ipv4.dns 8.8.8.8
sudo nmcli connection up eth0

九、防火墙:ufw 与 firewalld

服务监听对了、路由也对了,还连不上?八成是防火墙。Debian/Ubuntu 用 ufw,sudo ufw allow 22/tcp 放开 SSH、allow 80,443/tcp 放开 Web,最后 sudo ufw enable 启用(默认拒绝入站)。RHEL 系用 firewalld,firewall-cmd --permanent --add-port=80/tcp 加永久规则,再 --reload 生效;漏掉 --permanent 或忘了 reload,规则重启就没了。改 SSH 端口后,一定记得同步放行新端口,否则会把自己挡在外面。防火墙是最后一道门,但也最容易成为"看不见的墙"。

sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

十、一套可以直接套用的排查流程

把上面串起来,遇到"连不上"就按这个顺序:ip -br addr 看 IP → ip route show default 看网关 → ping -c 4 8.8.8.8 测 IP 通断 → ping 域名测 DNS → ss -tlnp 看端口监听 → ufw/firewalld 看防火墙。每一步都能二分定位问题区间,比盲目重启服务高效得多。养成这个习惯,你会发现网络故障一点都不可怕,它只是纸老虎。每次排查完,顺手把根因记到笔记里,下次同类问题你就是团队里的网络专家。

补充与延伸:排查之外还要会预防

排查是救火,预防才是真本事。把上面这套命令整理成一份自己的速查表,存进笔记或 dotfiles,下次遇到同类问题直接翻,比现搜快十倍。更重要的是养成监控习惯:用前面学的 journalctl 或一个最简单的健康检查脚本,在问题影响用户之前就收到告警;很多团队等到用户投诉才发现网站挂了,而那时恢复成本早已翻倍。另外,云厂商的安全组(security group)是独立于机器内 ufw 与 firewalld 的另一层防火墙,任何一层漏配都会放行不该放的流量,上线前两层都要核对一遍。最后,改动网络配置前先想清楚回滚路径——netplan try、保留一个活跃 SSH 会话、准备好带外控制台,这些习惯能把一次手滑从事故降级为小插曲。网络能力,说到底就是分层排查、提前预防、留好退路这三件事的反复练习。

当你能在三分钟内说清一台机器从网卡到端口的整条数据通路,并在白板上画出它的走向,你就已经超过了大多数只会重启服务救急的运维。网络从来不是玄学,它只是被太多人当成黑盒的常识。真正的高手不是记住了所有命令,而是建立了一套"从现象反推层次"的思维方式——接口有没有、IP 对不对、路由通不通、端口听没听、DNS 解不解、防火墙放没放,一层层剥开,答案自己就跳出来。这套思维一旦成型,换任何发行版、任何云厂商,你都能照样排查,因为底层逻辑从未改变。