快速修复
# 一键:30 秒定位「个别网站打不开」卡在哪一层
# ① 别的站点通不通(对照基线;不通 = 全站问题,先查网关/代理)
curl -sI -m 8 https://www.baidu.com -o /dev/null -w "baseline http=%{http_code}\n"
# ② DNS 层:目标域名能不能解析出 IP(无输出 = 解析失败 → DNS 层)
getent ahosts 目标域名 | head -1
# ③ TCP 层:直连看卡在哪(-v 输出停在 Trying = TCP 层;停在 Connected = TLS 层)
curl -v -I -m 10 https://目标域名 2>&1 | grep -E "Trying|Connected|HTTP/|error|timed"
# ④ 绕过 DNS 直连解析出的 IP(②有 IP 才能做):
# 连上 = DNS 层坏(换 DNS);依然超时 = 网络路径层坏(换代理/换网络)
curl -sI -m 10 --resolve 目标域名:443:解析出的IP https://目标域名 -o /dev/null -w "bypass http=%{http_code}\n"
你会遇到什么
同一台电脑上,https://www.google.com/(或百度、GitHub)正常打开,但某一个网站就是打不开:浏览器转圈到最后报「连接超时」或「无法访问此网站」。很多人第一反应是「这个网站挂了」——但只有个别域名失败,恰恰说明你的网络到大多数站点是通的,故障通常发生在你到那个站点的某一层:DNS 解析、TCP 连接、TLS 握手、HTTP 响应,或本地代理规则。
本文路径:快速修复(30 秒定位命令)→ 一步步排查(可跳读)→ 原理与变体(症状/原因/证据)。赶时间直接跳到「快速修复」。
为什么会这样
浏览器打开一个 HTTPS 网站,至少经过四层:DNS 解析(域名 → IP)→ TCP 连接(三次握手)→ TLS 握手(证书/密钥协商)→ HTTP 请求(拿到内容)。任何一层断,浏览器都只给你一个笼统的「打不开」。而失败原因五花八门:
- DNS 层:你的 DNS 服务器对某个域名解析超时/返回坏结果(缓存污染、上游故障、过滤规则);
- TCP 层:域名解析出的 IP 不可达(该 IP 被限、路由黑洞、CDN 节点故障),或端口被拦;
- TLS/HTTP 层:证书链问题、SNI 被拦、服务端拒绝——较少见但存在;
- 代理层:系统代理/Clash 规则把该域名分流到不可达的节点。
关键认知:「打不开」只是一个症状,不能直接等于「网站挂了」或「被墙了」。先用命令行把故障定位到某一层,再决定怎么修——换 DNS、换代理节点、还是换网络路径,方向完全不同。
「个别域名失败」的排障价值在于它天然做了对照:你的公网出口是通的(其他 HTTPS 站点 200),所以嫌疑被压缩到「你 → 该域名」这条链路上。curl 的 -v 输出会明确停在哪一步:Trying <ip>... 之后卡住 = TCP 层;Connected to <ip> 之后卡住 = TLS 层;能拿到响应头 = 服务层正常。
nslookup <域名> <dns服务器> 可以绕过系统 DNS 单独问某个服务器,curl --resolve 可以绕过 DNS 直接指定 IP——这两个命令把「解析」和「连接」拆开,就是分层定位的全部秘密。
素材案例(2026-08-17 公开排障记录)中,故障机默认 DNS 无法及时解析目标域名,改用 1.1.1.1/8.8.8.8 后正常获得 CDN 地址——DNS 层故障的典型结局。
一步步来
1. 确认范围:只有这一个域名失败 — 必做
curl -sI -m 8 https://www.baidu.com -o /dev/null -w "baseline http=%{http_code}\n"
curl -sI -m 8 https://目标域名 -o /dev/null -w "target http=%{http_code}\n"
基线 200、目标超时/失败 = 进入本文。两个都失败 = 先查网络本身(网关、代理、DNS 全挂),不适用本文。
2. DNS 层:域名有没有解析结果 — 必做
getent ahosts 目标域名 | head -1
# 期望输出: <IP> STREAM 目标域名
# 无输出(exit 非 0)= 解析失败 -> DNS 层问题,跳到第 5 步换 DNS
有 IP 但打不开 ≠ DNS 没问题——解析出的 IP 可能是坏记录(被污染/过期 CDN 节点),所以要继续第 3 步验证「这个 IP 到底通不通」。
3. TCP/网络路径层:直连这个 IP 通不通 — 必做
curl -v -I -m 10 https://目标域名 2>&1 | tee /tmp/curl-v.txt
# Trying <ip>... 之后长时间无进展 = TCP 层失败(网络路径/该 IP 不可达)
# Connected to <ip> 之后卡住 = TLS 层(少见,看证书与 SNI)
4. 绕过 DNS 直连:把 DNS 层和连接层彻底拆开 — 必做
IP=$(getent ahosts 目标域名 | head -1 | awk '{print $1}')
curl -sI -m 10 --resolve 目标域名:443:$IP https://目标域名 -o /dev/null -w "bypass http=%{http_code}\n"
- 绕过后能连上(http=200/301/403 都算服务可达)→ DNS 层坏:解析链路给的 IP 不对/不稳定。修法见第 5 步。
- 绕过后依然超时 → 网络路径层坏:解析本身正常,是你到该 IP 的路不通(被限/黑洞/CDN 节点故障)。换 DNS 没用,见第 6 步。
5. DNS 层坏:换公共 DNS 验证 — 对症
# 有 dig 的环境直接对比;没有就换系统 DNS 后重试第 1 步
dig @223.5.5.5 目标域名 +short # 阿里公共 DNS
dig @1.1.1.1 目标域名 +short # Cloudflare
dig @8.8.8.8 目标域名 +short # Google(国内部分网络 UDP 53 不可达,超时不算结论)
换 DNS 的具体落法:Windows 在网络适配器属性里改 DNS;路由器后台改上游 DNS(治本,全家设备生效);WSL 内改法见相关 canonical「WSL 域名解析失败」。改完立刻重测第 1 步,能开 = 实锤 DNS 层。
6. 网络路径层坏:换路径而不是换 DNS — 对症
- 系统代理/Clash 类工具:换一个节点再试(规则把该域名分到了不可达节点是高频原因);
- 有代理就开代理直连测试:
curl -x http://127.0.0.1:7890 -sI -m 10 https://目标域名(端口按你的代理实际端口); - 手机开热点对比:换一条网络路径,能开 = 你原网络到该 IP 的路有问题;
- 上述都无效且确认是访问限制:走合规加速/镜像,见相关 canonical 的 GitHub/镜像条目。
怎么确认修好了
curl -sI -m 10 https://目标域名 -o /dev/null -w "http=%{http_code} dns=%{time_namelookup}s connect=%{time_connect}s total=%{time_total}s\n"
# 返回 200/301/403 且 total 不再超时 = 修好
浏览器里硬刷新(Ctrl+F5)目标站点能打开 = 用户侧确认。注意 CDN/浏览器缓存:修好后第一次仍失败,等 1-2 分钟或换隐身窗口再试。
其它环境的表现
| 环境 | 说明 |
|---|---|
| Windows 本机 | 网络适配器属性改 DNS;ipconfig /flushdns 清缓存 |
| WSL / Linux | 改 systemd-resolved 上游或 resolv.conf(见 wsl-dns-resolution-failure) |
| 路由器 | 上游 DNS 改公共 DNS,全家生效(治本) |
| Clash/V2Ray 等代理 | 先换节点再下结论——分流规则把域名指向坏节点极常见 |
| 公司/校园网 | 内网域名问内网 DNS;外网个别失败多为出口限制 |
| Docker 容器内 | 容器自带 resolv.conf,见 docker-container-dns |
症状
「个别网站打不开」的典型表现:
浏览器: 连接超时 / 无法访问此网站 / ERR_CONNECTION_TIMED_OUT
curl: curl: (28) Connection timed out after 10000 milliseconds
ping: 请求超时(ping 不通不代表网站挂——很多站点禁 ICMP)
特征:同一网络下其他 HTTPS 站点正常;失败域名稳定复现(换浏览器也一样);重启路由/清 DNS 缓存可能短暂恢复又复发(DNS 缓存被刷新的假象)。
原因
「打不开」是用户侧唯一能看到的症状,它可能来自链路中任何一层:DNS 解析失败或返回坏 IP(缓存污染/上游故障/过滤规则)、TCP 连接超时(IP 不可达、路由黑洞、端口拦截、CDN 节点故障)、TLS 握手失败(证书/SNI,少见)、HTTP 层被拒(服务端策略)。代理工具还会引入自己的断点:分流规则把域名指向不可达节点。不同层的原因对应完全不同的修法——这就是必须先分层、再动手的原因。另一个常见误区是用 ping 判断网站状态:ICMP 和 HTTPS 是两条完全不同的路径,ping 不通而浏览器能开、或 ping 通而浏览器超时,都属正常。
解法
- 定范围:基线站点 200、目标站点失败 → 进入「个别域名」排障(都失败先查网络本身)。
- 查 DNS:
getent ahosts 目标域名——无结果 = DNS 层;有结果 ≠ 排除 DNS,继续下一步。 - 直连看层:
curl -v -I -m 10 https://目标域名,输出停在Trying= TCP 层,停在Connected= TLS 层。 - 绕过 DNS 拆层:
curl --resolve 目标域名:443:<IP> https://目标域名——能连 = DNS 层坏;仍超时 = 网络路径层坏。 - DNS 层坏:换公共 DNS(223.5.5.5 / 1.1.1.1),Windows 改适配器、路由器改上游、WSL 改 resolved.conf。
- 网络路径层坏:换代理节点、开代理直连测试、手机热点换路径;确认访问限制后走合规镜像/加速。
- 验证:curl 响应码 + 浏览器硬刷新;CDN 场景等 1-2 分钟再判。
验证证据
- 本机实测(2026-09-02,WSL Ubuntu 26.04):实测复现日志(2026-09-02)
- 基线:同网络 baidu http=200 → 公网出口正常,符合「个别域名失败」现场;
- DNS 层:
getent ahosts www.flextv.cc正常返回 CNAME(queniuaa.com)与多个 A 记录 → 解析正常,DNS 层排除; - TCP 层:
curl -I直连 10s 超时(code=28,输出停在 Trying)→ 卡在 TCP 连接; - 拆层:
curl --resolve www.flextv.cc:443:<解析IP>绕过 DNS 直连依然 10s 超时 → 实锤故障在 TCP/网络路径层,不在 DNS 层(换 DNS 对该案例无效,正确方向是换网络路径); - 坏 IP 对照:指向测试网段 203.0.113.1 同样连不上 → 说明「连不上」这一表现无法区分 DNS 坏还是路径坏,必须用 --resolve 拆层。
- 素材案例(公开排障记录 22529721,2026-08-17):默认 DNS 无法解析目标域名 → 改用 1.1.1.1/8.8.8.8 后正常获得 CDN 地址 → DNS 层故障的完整证据链(nslookup + --resolve)。
- 未实测(如实标注):TLS/HTTP 层故障现场(本机未遇)、路由器后台修改(无权限环境)。
相关 canonical
按「前置 → 同根 / 同域 / 相关」读:
- 前置(先排除):
- 代理环境变量不生效/部分工具不走代理(先确认代理变量与 NO_PROXY 语义,再分层)
- WSL 域名解析失败(WSL 内全域名解析失败走这篇;个别域名失败先看本文)
- 同域(网络/DNS 家族,环境不同):
- Docker 容器内域名解析失败(容器内个别/全部域名解析失败)
- GitHub 直连慢/失败(同分层思路:curl 看网络层 → 再加速)
- 相关(报错相近,根因不同):
- curl 大文件中断无法续传(同为 curl 场景,但症状在传输阶段)
- docker pull 失败/镜像加速(镜像仓库域名连不上时的对症路径)
适用工具 (1)
本问题方案已挂到下列工具的方案页——从工具页也能回到这里,双向可达。
curl · 外部工具来源与证据
← 编码代理与终端 问题域 | 问题货架 | 遇到其它问题?去 问题空间 提交求助卡