AlmaLinux 9:网络不通的五层排查
在一台 AlmaLinux 9.8 真机(kernel 5.14.0-687.54.1.el9_8)上实际执行:ip -br addr、ip route、ss -lntp、getent hosts example.com、curl https://example.com、curl http://127.0.0.1:9/(预期 refused)、ping 192.0.2.1(预期超时)、ping 1.1.1.1(预期通)。日志:plans/content-expansion/evidence/logs/alma-network-troubleshoot.log。
本页是通用排查顺序,不覆盖防火墙策略、代理与云安全组的具体配置。
第 1 层:接口与地址
Section titled “第 1 层:接口与地址”ip -br addr showip route showlo UNKNOWN 127.0.0.1/8 ::1/128eth0 UP 80.66.196.187/32 ...docker0 DOWN 172.17.0.1/16default via 172.31.1.1 dev eth0 proto static metric 100先看两件事:接口是不是 UP、默认路由是否存在。docker0 处于 DOWN 不影响外部连通,别被它误导。
第 2 层:DNS
Section titled “第 2 层:DNS”getent hosts example.com2606:4700:10::6814:179a example.com2606:4700:10::ac42:93f3 example.comgetent 走系统解析链(/etc/nsswitch.conf),比 dig 更接近应用实际行为。若这里没结果,先查 /etc/resolv.conf 与 resolvectl,而不是去查路由。
第 3 层:端口是否在听
Section titled “第 3 层:端口是否在听”ss -lntp | head -5LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=967,fd=7))LISTEN 0 4096 0.0.0.0:111 0.0.0.0:* users:(("rpcbind",...))服务端排查顺序是「本机听没听」→「监听地址对不对」→「防火墙放没放」。只听 127.0.0.1 的服务,外部永远连不上。
第 4 层:连通性——refused 与 timeout 不是一回事
Section titled “第 4 层:连通性——refused 与 timeout 不是一回事”curl -sS --max-time 3 http://127.0.0.1:9/ping -c 1 -W 1 192.0.2.1curl: (7) Failed to connect to 127.0.0.1 port 9: Connection refused1 packets transmitted, 0 received, 100% packet loss, time 0ms- refused:包到了对方,对方明确拒绝(没有服务在听,或被 REJECT)——问题在端口/服务;
- timeout / 100% loss:包没回来(路由、安全组丢包,或对端 DROP)——问题在路径或策略。
192.0.2.1 是保留地址,用它制造「必然超时」的对照,不代表真实故障点。
第 5 层:应用自身
Section titled “第 5 层:应用自身”curl -sS -o /dev/null -w "https_code=%{http_code}\n" --max-time 8 https://example.comhttps_code=200前三层都通、端口也在听,但请求仍失败时,问题在应用层:证书、Host 头、反向代理配置、应用日志。此时看服务日志比继续 ping 更有用。
- 只看 ping:ICMP 被禁时 ping 不通但服务正常,
curl -v或nc -zv更接近真相; - 把 refused 当网络问题:refused 通常说明网络通、服务没起;
- 忽略监听地址:
0.0.0.0:8080与127.0.0.1:8080对外部完全是两回事。
练习:按五层顺序排查一次「连不上」
Section titled “练习:按五层顺序排查一次「连不上」”ip -br addr show && ip route showgetent hosts <目标域名>ss -lntp | grep <端口>curl -sS -v --max-time 5 http://<目标>:<端口>/ 2>&1 | tail -5检查:
- 接口 UP 且默认路由存在
- 域名能解析出地址
- 目标端口在监听(服务端)
curl的报错能归到「refused / timeout / 证书 / HTTP 状态」中的一类- 能把结论落在一层上,而不是「网络有问题」
常见问题
ping 不通但服务能用,正常吗?
常见。很多云环境与防火墙默认丢弃 ICMP,但放行 TCP。判断服务是否可达要用 curl、nc 或 ss,而不是只看 ping。
Connection refused 说明什么?
说明网络路径通、对端可达,但没有进程在监听该端口(或被 REJECT)。先查服务是否启动、监听地址是否包含 0.0.0.0。
解析慢和解析失败怎么区分?
`getent hosts` 立即返回无结果通常是失败;有明显停顿才返回多半是 DNS 超时。用 `time getent hosts <域名>` 看耗时,再查 resolv.conf 与上游 DNS。
- 安装后核对:新装系统 7 项核对
- 防火墙放行:firewalld 放行端口
- 静态 IP:nmcli 静态 IP