跳转到内容
搜索 AlmaLinux 文档

    浏览当前文档目录

    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。

    本页是通用排查顺序,不覆盖防火墙策略、代理与云安全组的具体配置。

    Terminal window
    ip -br addr show
    ip route show
    lo UNKNOWN 127.0.0.1/8 ::1/128
    eth0 UP 80.66.196.187/32 ...
    docker0 DOWN 172.17.0.1/16
    default via 172.31.1.1 dev eth0 proto static metric 100

    先看两件事:接口是不是 UP、默认路由是否存在。docker0 处于 DOWN 不影响外部连通,别被它误导。

    Terminal window
    getent hosts example.com
    2606:4700:10::6814:179a example.com
    2606:4700:10::ac42:93f3 example.com

    getent 走系统解析链(/etc/nsswitch.conf),比 dig 更接近应用实际行为。若这里没结果,先查 /etc/resolv.conf 与 resolvectl,而不是去查路由。

    Terminal window
    ss -lntp | head -5
    LISTEN 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 不是一回事”
    Terminal window
    curl -sS --max-time 3 http://127.0.0.1:9/
    ping -c 1 -W 1 192.0.2.1
    curl: (7) Failed to connect to 127.0.0.1 port 9: Connection refused
    1 packets transmitted, 0 received, 100% packet loss, time 0ms
    • refused:包到了对方,对方明确拒绝(没有服务在听,或被 REJECT)——问题在端口/服务;
    • timeout / 100% loss:包没回来(路由、安全组丢包,或对端 DROP)——问题在路径或策略。

    192.0.2.1 是保留地址,用它制造「必然超时」的对照,不代表真实故障点。

    Terminal window
    curl -sS -o /dev/null -w "https_code=%{http_code}\n" --max-time 8 https://example.com
    https_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 “练习:按五层顺序排查一次「连不上」”
    Terminal window
    ip -br addr show && ip route show
    getent hosts <目标域名>
    ss -lntp | grep <端口>
    curl -sS -v --max-time 5 http://<目标>:<端口>/ 2>&1 | tail -5

    检查:

    1. 接口 UP 且默认路由存在
    2. 域名能解析出地址
    3. 目标端口在监听(服务端)
    4. curl 的报错能归到「refused / timeout / 证书 / HTTP 状态」中的一类
    5. 能把结论落在一层上,而不是「网络有问题」

    常见问题

    ping 不通但服务能用,正常吗?

    常见。很多云环境与防火墙默认丢弃 ICMP,但放行 TCP。判断服务是否可达要用 curl、nc 或 ss,而不是只看 ping。

    Connection refused 说明什么?

    说明网络路径通、对端可达,但没有进程在监听该端口(或被 REJECT)。先查服务是否启动、监听地址是否包含 0.0.0.0。

    解析慢和解析失败怎么区分?

    `getent hosts` 立即返回无结果通常是失败;有明显停顿才返回多半是 DNS 超时。用 `time getent hosts <域名>` 看耗时,再查 resolv.conf 与上游 DNS。