在没有代理的情况下,DNS 的工作流程很简单:你输入域名,系统向 DNS 服务器查询对应的 IP,拿到之后发起连接。加上代理之后,这个流程会变得复杂——因为现在有两套 DNS 机制可能同时存在,而它们的配置未必一致。
理解这一点是排查的前提:代理客户端通常会接管 DNS 查询,使用它自己配置文件里指定的 DNS 服务器,而不是你在系统里设置的那个。所以在系统设置里改 DNS,往往对代理环境下的解析没有影响。
先确认问题是否真在 DNS
这个判断只需要一步:用 IP 地址直接访问。
找一个你知道 IP 的境外服务,在浏览器里直接输入它的 IP。或者用命令行工具向某个境外 IP 发送探测包。
- IP 能通,域名不行 → 问题在 DNS 解析
- IP 也不通 → 问题在转发层,应该去看连接成功但无法上网的排查
确认在 DNS 层之后,再往下细分。
三种典型的 DNS 故障
| 现象 | 原因 | 处理方向 |
|---|---|---|
| 域名解析出错误 IP,连上后是无关内容或超时 | DNS 查询走了直连并被污染 | 改用加密 DNS,让查询走代理 |
| 解析请求长时间无响应 | 配置的 DNS 服务器不可达 | 更换 DNS 服务器地址 |
| 部分网站极慢或打不开,其他正常 | 解析到 IPv6 但节点无 IPv6 出口 | 调整 IP 版本策略 |
查询被污染
传统 DNS 使用明文传输,没有任何完整性校验。中间设备可以抢先返回一个伪造的应答,客户端会采信最先到达的那个结果。这就是 DNS 污染的基本原理。
被污染时的典型表现是:域名能解析出结果(所以不会提示「找不到服务器」),但解析出来的 IP 是错的,连接过去要么超时,要么返回无关内容。
处理方式是让 DNS 查询避开明文路径:
- 在客户端的 DNS 配置里,把默认 DNS 改为加密 DNS(DoH 或 DoT 形式的地址);
- 确认「使用代理进行 DNS 查询」之类的选项已开启,让查询本身也走隧道;
- 保留一组国内 DNS 用于解析国内域名,避免所有查询都绕道境外拖慢速度。
大部分 Clash 内核的客户端都支持这种分流式 DNS 配置:国内域名用国内 DNS 直接解析,境外域名用加密 DNS 经代理解析。这是目前比较合理的默认策略。
DNS 服务器不可达
如果配置里填的 DNS 地址本身连不上,解析请求会一直超时,浏览器表现为长时间转圈后报错。
原因可能是:
- 填写的加密 DNS 服务已停止服务或更换了地址;
- 该 DNS 服务在你的网络环境下被阻断;
- 配置格式写错(加密 DNS 的地址格式和普通 DNS 不同)。
排查方法是临时换一个公认可用的 DNS 地址测试。如果换了之后正常,说明原来那个确实有问题。建议在配置里同时填写两到三个 DNS 服务器作为备份,避免单点失效。
IPv6 相关的问题
这一类比较隐蔽,表现往往不是「完全打不开」,而是「有些网站特别慢」。
现代操作系统在双栈环境下会优先尝试 IPv6 连接。如果域名解析出了 IPv6 地址,而你的代理节点只有 IPv4 出口,那么:
- 系统先尝试 IPv6,连不通;
- 等待超时(可能几秒到十几秒);
- 回退到 IPv4 重试。
用户感受到的就是「打开特别慢」。移动网络下 IPv6 普及率更高,这个问题在手机上更常见,相关内容见 Wi-Fi 能用但流量不能用。
处理方式:在客户端的 DNS 配置里把 IP 版本策略设为「仅 IPv4」或「优先 IPv4」。不建议在操作系统层面全局禁用 IPv6,那样影响面太大。
关于 DNS 泄漏
DNS 泄漏指的是:你的流量走了代理,但域名查询仍然发给了本地运营商的 DNS 服务器。这意味着运营商能看到你访问了哪些域名,即使流量内容本身是加密的。
严格来说这是隐私问题而不是连接问题——泄漏状态下网络往往还是能用的。但它常常和解析异常同时出现,因为走直连的查询更容易被污染。
检查方式是使用在线的 DNS 泄漏检测服务,看返回的 DNS 服务器是否位于你的节点所在地区。如果显示的是国内运营商的服务器,说明存在泄漏。
处理方式和防污染一致:确保客户端接管了 DNS 查询,并且查询经由代理发出。
完整的排查顺序
- 关闭代理,确认基础网络和直连解析正常;
- 用 IP 直接访问,判断问题是否在 DNS 层;
- 查看客户端的 DNS 配置段,确认使用的是哪些 DNS 服务器;
- 确认 DNS 查询是否走代理;
- 更换为加密 DNS 后重新测试;
- 调整 IP 版本策略为优先 IPv4;
- 清空系统和浏览器的 DNS 缓存(浏览器有独立的 DNS 缓存,可能保留着错误结果);
- 检查是否有 hosts 文件残留条目干扰特定域名;
- 换设备交叉验证,确认不是单机配置问题。
第七步经常被忽略。修改配置之后如果不清缓存,可能仍然拿到旧的错误结果,导致误以为调整无效。
怎么确认已经修好
三个验证点:
- 用域名访问之前打不开的网站,能正常加载;
- 做一次 DNS 泄漏检测,返回的服务器位置符合预期;
- 访问国内网站的速度没有明显变慢(确认分流 DNS 配置合理,国内域名没有绕道境外解析)。
第三点用来避免一种过度修正:把所有 DNS 查询都扔给境外服务器,虽然解决了污染,但国内网站的解析会明显变慢,整体体验反而下降。
仍未解决时收集这些信息
- 客户端名称、版本,以及 DNS 配置段的内容(注意隐去可能包含账号信息的部分);
- 用 IP 访问和用域名访问的对照结果;
- 具体哪些域名解析失败,哪些正常;
- DNS 泄漏检测的结果;
- 是否使用了第三方配置文件,来源是哪里。
如果你使用的是机场提供的官方配置,DNS 部分通常已经调好,出问题时优先联系机场;如果用的是第三方配置或自己修改过,那么问题大概率在配置本身,可以先换回官方配置做对照。配置来源的选择和导入方法见 Clash 订阅导入与基础配置。