Rocky 9:按症状分诊网络问题
在 Rocky 9.8 环境(特权容器、宿主内核 5.14.0-687.54.1.el9_8,--network host)与同宿主上实际执行:ip -br addr、ip route、ss -lntp、getent hosts example.com、curl https://example.com、curl http://127.0.0.1:9/、ping -c1 -W1 192.0.2.1。日志:plans/content-expansion/evidence/logs/rocky-network-troubleshoot.log。
本页按症状组织,不按 OSI 层;同一症状可能落在不同层。
症状 A:完全出不去(先看有没有默认路由)
Section titled “症状 A:完全出不去(先看有没有默认路由)”ip -br addr showip route showlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 80.66.196.187/32 ...default via 172.31.1.1 dev eth0 proto static metric 100没有 default via ... 这一行,就谈不上「外网慢」——报文根本不知道往哪发。先补路由,再谈 DNS 与端口。
症状 B:域名解析不出来
Section titled “症状 B:域名解析不出来”getent hosts example.comcat /etc/resolv.conf2606:4700:10::6814:179a example.com2606:4700:10::ac42:93f3 example.comgetent 走系统解析链,和应用的体验一致。它没结果时,依次看:/etc/resolv.conf 里的 nameserver 是否可达、resolvectl status(若用 systemd-resolved)、以及本机是否能直接连通 53 端口。
症状 C:连接被拒(Connection refused)
Section titled “症状 C:连接被拒(Connection refused)”curl -sS --max-time 3 http://127.0.0.1:9/ss -lntp | head -5curl: (7) Failed to connect to 127.0.0.1 port 9: Connection refusedLISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=967,fd=7))refused 意味着网络是通的,对端明确拒绝:服务没起、端口写错、或绑在了 127.0.0.1。对照 ss -lntp 看监听地址,是最快的一步。
症状 D:静默超时(100% packet loss)
Section titled “症状 D:静默超时(100% packet loss)”ping -c 1 -W 1 192.0.2.1ping -c 1 -W 2 1.1.1.11 packets transmitted, 0 received, 100% packet loss, time 0ms1 packets transmitted, 1 received, 0% packet loss, time 0ms两类结果要分开读:192.0.2.1 是保留地址,超时是预期的(用来做对照);1.1.1.1 通说明本机出网正常。真实故障里,节点能 ping 通网关但 ping 不通外网,通常是策略或上游丢包。
症状 E:时通时不通
Section titled “症状 E:时通时不通”for i in 1 2 3; do curl -sS -o /dev/null -w "%{http_code} %{time_total}\n" --max-time 5 https://example.com; donegetent hosts example.com | head -3200 0.475200 0.497200 0.511间歇性失败常见三类原因:DNS 返回多个地址(其中一个是坏的)、MTU/分片(大包丢、小包通)、多路径/多网关。连续采样三次并记录耗时,比单次失败更有信息量。
- 只 ping:ICMP 被丢但 TCP 正常很常见;
- 把 refused 当网络故障:它恰恰说明网络通;
- 不看监听地址:
0.0.0.0与127.0.0.1对外部是两回事。
练习:从症状到结论
Section titled “练习:从症状到结论”ip route show | head -3getent hosts <域名>ss -lntp | grep <端口>curl -sS -v --max-time 5 http://<目标>:<端口>/ 2>&1 | tail -5检查:
- 能说出「有没有默认路由」
- 能说出「域名解析是否成功」
- 能区分 refused 与 timeout
- 结论落在具体一层或一类原因
常见问题
没有默认路由会有什么表现?
本机同网段可能还能通,但任何跨网段访问都会失败(多为 Network is unreachable 或直接超时)。ip route 里没有 default 行就是它。
refused 和 timeout 怎么快速区分?
refused 立即返回且报 connection refused;timeout 会等到超时(curl 的 --max-time 到点才结束)。前者查服务与端口,后者查路由与策略。
间歇性失败从哪查起?
先连续采样(curl 三次记耗时),再看 DNS 是否返回多个地址、MTU 是否导致大包丢、是否有多个默认网关。单次失败不足以定位。
- 静态 IP 与 keyfile:nmcli 静态 IP
- 防火墙放行:firewalld 放行端口
- 安装后核对:安装后 7 项核对