跳转到内容
搜索 Rocky Linux 文档

    浏览当前文档目录

    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:完全出不去(先看有没有默认路由)”
    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 ...
    default via 172.31.1.1 dev eth0 proto static metric 100

    没有 default via ... 这一行,就谈不上「外网慢」——报文根本不知道往哪发。先补路由,再谈 DNS 与端口。

    Terminal window
    getent hosts example.com
    cat /etc/resolv.conf
    2606:4700:10::6814:179a example.com
    2606:4700:10::ac42:93f3 example.com

    getent 走系统解析链,和应用的体验一致。它没结果时,依次看:/etc/resolv.conf 里的 nameserver 是否可达、resolvectl status(若用 systemd-resolved)、以及本机是否能直接连通 53 端口。

    症状 C:连接被拒(Connection refused)

    Section titled “症状 C:连接被拒(Connection refused)”
    Terminal window
    curl -sS --max-time 3 http://127.0.0.1:9/
    ss -lntp | head -5
    curl: (7) Failed to connect to 127.0.0.1 port 9: Connection refused
    LISTEN 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)”
    Terminal window
    ping -c 1 -W 1 192.0.2.1
    ping -c 1 -W 2 1.1.1.1
    1 packets transmitted, 0 received, 100% packet loss, time 0ms
    1 packets transmitted, 1 received, 0% packet loss, time 0ms

    两类结果要分开读:192.0.2.1 是保留地址,超时是预期的(用来做对照);1.1.1.1 通说明本机出网正常。真实故障里,节点能 ping 通网关但 ping 不通外网,通常是策略或上游丢包。

    Terminal window
    for i in 1 2 3; do curl -sS -o /dev/null -w "%{http_code} %{time_total}\n" --max-time 5 https://example.com; done
    getent hosts example.com | head -3
    200 0.475
    200 0.497
    200 0.511

    间歇性失败常见三类原因:DNS 返回多个地址(其中一个是坏的)、MTU/分片(大包丢、小包通)、多路径/多网关。连续采样三次并记录耗时,比单次失败更有信息量。

    • 只 ping:ICMP 被丢但 TCP 正常很常见;
    • 把 refused 当网络故障:它恰恰说明网络通;
    • 不看监听地址:0.0.0.0 与 127.0.0.1 对外部是两回事。
    Terminal window
    ip route show | head -3
    getent hosts <域名>
    ss -lntp | grep <端口>
    curl -sS -v --max-time 5 http://<目标>:<端口>/ 2>&1 | tail -5

    检查:

    1. 能说出「有没有默认路由」
    2. 能说出「域名解析是否成功」
    3. 能区分 refused 与 timeout
    4. 结论落在具体一层或一类原因

    常见问题

    没有默认路由会有什么表现?

    本机同网段可能还能通,但任何跨网段访问都会失败(多为 Network is unreachable 或直接超时)。ip route 里没有 default 行就是它。

    refused 和 timeout 怎么快速区分?

    refused 立即返回且报 connection refused;timeout 会等到超时(curl 的 --max-time 到点才结束)。前者查服务与端口,后者查路由与策略。

    间歇性失败从哪查起?

    先连续采样(curl 三次记耗时),再看 DNS 是否返回多个地址、MTU 是否导致大包丢、是否有多个默认网关。单次失败不足以定位。