DNS 问题为什么会导致节点连接异常
解释 DNS 在代理链路中的两个位置:解析节点域名和解析目标网站。节点域名被污染会直接连不上节点,目标域名本地解析与远端解析的差异则影响可用性与隐私,并给出 fake-ip 与 redir-host 的对比和排查方法。
DNS 是把域名翻译成 IP 地址的系统,而在代理链路里它出现在两个位置:一是解析节点自己的域名,二是解析你要访问的目标网站域名。前者出错,客户端根本连不上节点,表现为超时;后者出错,则会出现「节点已连接但网页打不开、打开慢或打开的是错误内容」。排查连接异常时,第一步是分清问题出在哪个位置——两者的处理方法完全不同。本文适用于 Clash 系、sing-box 等带独立 DNS 模块的客户端,也适用于理解 v2rayN、Shadowrocket 的解析行为。
核心结论
- DNS 在代理链路中出现两次:解析节点域名、解析目标域名;
- 节点域名被污染 → 连不上节点;目标域名解析异常 → 连上了但打不开网页;
- 目标域名交给节点在远端解析(remote DNS),可以同时避开污染与泄漏;
- fake-ip 与 redir-host 是客户端处理目标域名的两种模式,行为差异需要了解。
工作原理
不使用代理时,应用访问网站的第一步是向系统配置的 DNS 服务器查询域名对应的 IP。使用代理后,链路变成两段:
- 客户端 → 节点:客户端需要先知道
node1.example.com的 IP 才能建立 TLS 连接。这次解析发生在本地,走系统或客户端配置的 DNS; - 节点 → 目标网站:你访问的目标域名,既可以在本地解析出 IP 再把 IP 交给节点,也可以把域名原样交给节点、由节点在远端解析(即 remote DNS)。
Trojan 协议的请求结构原生支持携带域名,所以「把解析推迟到远端」是天然可行的,这也是多数客户端的推荐行为。
理解「污染为什么可能发生」需要知道一点背景:传统 DNS 查询默认走明文 UDP 53 端口,请求和应答都不加密、不验证来源,中间设备既能看到你查询了什么,也能抢先返回伪造的应答。加密 DNS(DoH/DoT)和远端解析之所以有效,正是因为绕开了这条明文通道。
核心组成
一条完整的代理 DNS 链路涉及三个环节:
- 节点域名解析:只在本地发生。若本地 DNS 被污染,解析到错误 IP,客户端连接的就是错误目标,通常直接超时或 TLS 握手失败。这是全部节点显示 Timeout 的常见原因之一;
- 目标域名解析位置:本地解析意味着解析请求以明文 UDP 发往本地 DNS,可能被污染,也把访问意图暴露在本地网络——后者就是所谓 DNS 泄漏;远端解析则由节点所在网络完成,结果更准确,且解析地理位置与出口一致,CDN 调度也更合理;
- 客户端 DNS 模块:Clash 系、sing-box 内置 DNS 服务器,接管系统解析请求后按规则分流:国内域名走本地 DNS,其余走加密 DNS 或远端解析,并以 fake-ip 或 redir-host 模式响应应用。
优点
正确配置客户端 DNS(目标域名远端解析 + 客户端接管本地解析)带来三方面收益:
- 避开污染:被污染域名的解析不再依赖本地运营商 DNS,拿到的是真实结果;
- 避免泄漏:解析意图不暴露给本地网络,隐私边界与流量边界一致;
- 分流准确:域名信息保留到规则匹配阶段,按域名分流的规则(如国内直连、其余走代理)才能正确命中,CDN 也会返回离节点出口更近的接入点。
限制
- 多一层依赖:客户端 DNS 模块配置错误(上游不可达、分流规则冲突)本身会制造「节点正常但无法上网」的故障,排查思路见Trojan 连接成功但无法打开网页怎么办;
- fake-ip 的兼容性问题:少数把 IP 持久化保存的应用(局域网发现、部分游戏平台)可能拿到虚假 IP 后行为异常,需要为其配置 fake-ip 过滤;
- 缓存残留:切换代理开关后,系统或浏览器缓存的旧解析结果(包括 fake-ip 地址)可能短暂造成访问异常,刷新 DNS 缓存即可;
- 无法解决非 DNS 问题:节点下线、线路阻断与 DNS 无关,调整解析不会有帮助。
fake-ip 与 redir-host 模式的区别
| 对比项 | fake-ip | redir-host |
|---|---|---|
| 应答内容 | 返回 198.18.0.0/15 段的虚假 IP | 返回真实解析结果 |
| 响应速度 | 即时,无需等待上游 | 取决于上游 DNS 耗时 |
| 域名保留 | 转发时映射回域名,规则匹配准确 | 依赖解析结果,域名规则可能失配 |
| 泄漏风险 | 低,解析可完全推迟到远端 | 较高,本地会产生真实解析 |
| 兼容性 | 个别依赖真实 IP 的应用需过滤 | 兼容性较好 |
简单说:fake-ip 用「先给假地址、转发时再还原域名」换取速度与准确分流,是 mihomo 等内核的默认推荐;redir-host 行为更接近传统解析,兼容性好但污染与泄漏风险更高,部分内核已不再推荐。日常使用建议 fake-ip 加上必要的过滤名单。
适用场景与排查方法
怀疑 DNS 引起连接异常时,按两个位置分别验证:
-
验证节点域名:分别用系统 DNS 与公共 DNS 查询并对比:
nslookup node1.example.com nslookup node1.example.com 1.1.1.1结果差异明显即怀疑污染,可在客户端配置可靠 DNS 上游,或用服务方提供的 IP 直连测试(注意配合正确的 SNI,原理见 Trojan 协议如何通过 TLS 建立连接);
-
验证目标域名:开启代理后访问 DNS 泄漏检测页面,查看解析服务器归属。显示本地运营商即存在泄漏,应在客户端开启 DNS 接管并选择远端解析或加密上游;
-
验证客户端 DNS 模块:检查 DNS 上游是否可达、fake-ip 过滤名单是否覆盖出问题的应用,必要时对照客户端文档恢复默认 DNS 配置再逐项修改。Clash 系配置中对应
dns段的enhanced-mode(fake-ip / redir-host)、nameserver与fallback字段;sing-box 则在dns配置块中定义服务器与分流规则。修改配置后记得重载并清空一次系统 DNS 缓存,避免旧结果干扰判断。
把 DNS 检查纳入日常节点测试流程(方法见Trojan 节点如何测试延迟、丢包和稳定性),可以在故障发生前发现解析异常。
延伸阅读
- 网络基础栏目:代理相关网络知识的其余文章;
- DNS 术语条目:DNS 的定义与常见误解;
- Trojan 节点显示 Timeout 的完整排查方法:连不上节点时的完整排查顺序;
- Trojan 连接成功但无法打开网页怎么办:目标域名解析异常的典型表现与处理。
常见问题
- 怎么判断节点连不上是不是 DNS 污染造成的?
- 分别用系统默认 DNS 和公共 DNS 查询节点域名,例如 nslookup node1.example.com 与 nslookup node1.example.com 1.1.1.1,对比两组返回的 IP。如果结果差异明显,或系统 DNS 返回明显异常的地址,污染嫌疑就很大;此时可在客户端配置可靠 DNS,或改用服务方提供的 IP 直连验证。
- DNS 泄漏会带来什么实际影响?
- 泄漏本身不影响连接速度,主要是隐私问题:域名解析请求发往本地运营商 DNS,等于把访问了哪些网站的意图暴露给了本地网络;同时被污染的解析结果还可能导致部分网站打不开。通过检测页面查看解析服务器归属即可确认是否泄漏,由客户端接管 DNS 或使用远端解析可以避免。
- fake-ip 模式下 nslookup 返回 198.18 开头的地址,是不是坏了?
- 不是。fake-ip 模式下客户端故意返回 198.18.0.0/15 保留段的虚假地址,用来立刻响应应用的解析请求并在转发时映射回真实域名,这是正常工作状态。只有关闭代理后仍解析到 fake-ip 地址(缓存未清理),才需要刷新 DNS 缓存或重启网络。
- 客户端里节点用 IP 填写,是不是就不受 DNS 影响了?
- 只解决了一半。节点地址用 IP 填写后,连接节点这一步确实绕开了域名解析,不再受节点域名污染影响;但目标网站的域名仍需要解析,解析在本地还是远端、是否被污染,依旧决定网页能否正常打开。而且 Trojan 证书通常签给域名,直接填 IP 可能引起证书校验问题,需要正确配置 SNI。