Clash DNS 解析失败怎么办?按报错定位 lookup failed、Fake-IP 与 TUN
简答:Clash DNS 解析失败时,先确认是不是 YAML 配置解析错误,再检查 DNS 上游、Fake-IP、系统代理和 TUN。使用可回滚的最小配置,并用 nslookup、curl 与日志判断是否恢复。
定义:Clash DNS 解析失败,是客户端无法把域名转换为 IP,或 DNS 请求没有进入预期的 Clash 解析链路。
先看报错:DNS 解析失败不等于订阅解析失败
本文是与相关项目及开发者无隶属关系的第三方使用指南。先看错误出现在哪一层:如果配置文件加载时出现 Parse error、YAML 缩进错误或字段无法识别,这是“配置解析失败”;如果客户端已经加载配置,但日志出现 lookup failed、SERVFAIL 或 timeout,才优先按 DNS 或网络链路排查;如果 DNS 能返回地址但节点连接出现 connection refused 或全部 timeout,则更像端口、节点或路由问题。
| 现象 | 优先检查 | 判定标准 | 下一步 |
|---|---|---|---|
Parse error | YAML 缩进、字段名、内核兼容性 | 配置无法加载或出现明确语法提示 | 恢复原配置,再逐项添加 DNS 字段 |
lookup failed | nameserver、default-nameserver、DNS 请求路径 | 域名查询失败,IP 查询可能仍正常 | 先换成最小 DNS 配置并关闭冲突的独立 DNS |
SERVFAIL | 上游 DNS、DNSSEC 或网络限制 | DNS 服务器返回失败状态 | 更换可达上游,比较直连与代理查询 |
timeout | DNS 上游不可达、TUN、IPv6 或防火墙 | 等待超时而非立即返回错误 | 关闭 TUN 做对照,再检查 IPv4 与 IPv6 |
connection refused | 本地端口、节点端口或代理进程 | 目标端口主动拒绝连接 | 检查 mixed-port 和客户端是否真正运行 |
参考 mihomo 配置示例,DNS 相关字段属于配置内容;而客户端界面是否覆盖配置,则要看具体客户端实现。
最快修复:先回滚到一份最小 DNS 配置
先复制并备份当前配置,不要直接删除原文件。以下示例只保留排障需要的字段,适用于支持这些字段的 Mihomo 内核;如果你的客户端提示字段未知,先删除新增字段并以客户端内置模板为准。
注意:default-nameserver 用来解析其他 DNS 服务器或代理服务器的域名,示例中应填写可直连的纯 IP;不要把 DoH 域名直接放进这里。nameserver 才是主要 DNS 列表。示例地址仅作格式演示,请替换为你所在网络实际可达的 DNS。
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
- 1.1.1.1
- 8.8.8.8
nameserver:
- https://1.1.1.1/dns-query
- https://8.8.8.8/dns-query
fake-ip-filter:
- '*.lan'
- '*.local'
- localhost保存后重新载入配置,再观察是否仍出现 lookup failed。如果原配置已经有 dns:,不要再复制第二个同名区块,应把字段合并到已有区块中;如果已有 tun:,也不要用整段覆盖,先只改 DNS 相关内容。
这份配置不是所有网络的通用最优值。若当前网络无法访问示例 DNS,改为当地可达的纯 IP;如果 DoH 地址本身无法建立连接,先保留纯 IP 的 nameserver 做对照。Clash Verge Rev 的配置类型定义列出了常见 DNS 字段与 fake-ip、redir-host 两种增强模式。
按步骤验证:确认 DNS 请求到底有没有进入 Clash
- 检查客户端是否真的接管流量。在 Clash Verge Rev 中确认 System Proxy 或 TUN Mode 的状态。项目设置文本说明,TUN 模式用于捕获系统流量,启用后通常不需要再开启系统代理;TUN 需要服务模式或管理员权限。若两个开关都关闭,浏览器可能完全绕过 Clash。
- 检查本地代理端口。打开客户端的端口设置,找到 Mixed Port。下面命令使用
7890只是示例,必须替换为客户端显示的实际端口。Windows PowerShell 可执行:curl.exe -x http://127.0.0.1:7890 -I https://example.com。这里的example.com是测试域名,请替换为你能正常访问的目标域名。返回 HTTP 状态或响应头,说明本地代理至少接收到请求;若提示无法连接本地端口,先修复端口或进程问题。 - 分别做系统 DNS 和 Clash DNS 查询。Windows 执行
nslookup example.com,查看 Server 和 Address;macOS 执行nslookup example.com或dig example.com。如果系统查询失败,先处理当前网络、路由器或系统 DNS;如果系统查询正常但经 Clash 代理的网页失败,重点检查 Clash DNS、TUN 和浏览器独立代理。 - 看 Connections 或日志。访问测试域名时,如果 Connections 没有对应请求,说明浏览器代理、系统代理或 TUN 没有接管;如果有请求但日志显示
lookup failed,检查 DNS 上游;如果域名解析成功而节点报timeout,不要继续改 DNS,应转查节点和路由。 - 暂时关闭 Fake-IP 做单变量对照。将
enhanced-mode从fake-ip改为redir-host,重新载入后只测试同一个域名。若redir-host能访问、fake-ip不能访问,检查fake-ip-filter、TUN DNS 劫持和局域网域名;若两者都失败,问题更可能在上游 DNS、代理或网络限制。
这里的对照只改变一个变量。不要同时改 DNS、节点、规则模式和 TUN,否则即使恢复,也无法判断真正原因。
这些 DNS 字段分别做什么:避免配置互相打架
| 字段 | 作用 | 排障时怎么用 |
|---|---|---|
default-nameserver | 解析 DNS 服务器地址等引导信息 | 优先使用可直连纯 IP;若这里不可达,DoH 或 DoT 可能无法启动 |
nameserver | 主要域名解析服务器 | 先保留少量已确认可达的服务器,避免一次加入过多上游 |
fallback | 备用 DNS 服务器 | 主 DNS 出现失败或不符合过滤条件时提供备用路径,不能替代基本连通性检查 |
nameserver-policy | 按域名或规则选择解析服务器 | 排障时可暂时移除复杂策略,防止某条策略把目标域名送到不可达上游 |
proxy-server-nameserver | 解析代理服务器自身的域名 | 代理节点使用域名时,检查它是否可解析,避免 DNS 与代理形成环路 |
fake-ip-filter | 指定不使用 Fake-IP 的域名 | 局域网、设备发现和特殊应用异常时,先加入必要的本地域名并重测 |
字段名称和模式值应以当前内核文档为准。mihomo 配置示例展示了 default-nameserver、nameserver、enhanced-mode、fake-ip-range 和 fake-ip-filter 的关系;不要把 CPU 架构名称或其他非 DNS 值填入这些字段。
浏览器、系统 DNS 和 TUN 冲突时怎么排查
浏览器可能有独立的安全 DNS,系统也可能启用了私人 DNS,路由器还可能强制指定 DNS。多条解析路径同时存在时,Clash 日志未必能看到浏览器实际发出的查询。
- Chrome:打开“设置—隐私和安全—安全”,找到“使用安全 DNS”。Google 说明,自动模式遇到问题时可能回退到未加密查询;自定义服务商遇到“找不到服务器 IP”等错误时,可先检查服务商设置或暂时关闭安全 DNS做对照。参考 Google Chrome 安全与隐私设置说明。
- Android:打开“设置—网络和互联网—私人 DNS”,可选“关闭”“自动”或“私人 DNS 提供商主机名”。Google 说明私人 DNS只保护 DNS 问答,不会保护其他网络流量;排障时可先切换为“自动”测试,再恢复原设置。参考 Google Pixel 网络与私人 DNS 设置说明。
- Windows:先关闭其他代理软件,检查系统代理是否指向 Clash 的实际端口;然后执行
ipconfig /flushdns清理系统 DNS 缓存,再重新打开客户端。 - macOS:关闭并重新开启 Clash 的 TUN 或系统代理,切换一次 Wi-Fi 后再测试。若问题只在睡眠唤醒后出现,先检查系统 DNS 是否被恢复为原来的网络设置;Clash Verge Rev 的公开 Issue #7593 记录了 macOS 唤醒后 TUN 场景下系统 DNS 未重新应用的现象,不能据此推断所有版本都会发生,但可作为针对性检查项。参考 Clash Verge Rev Issue #7593。
- iOS:在客户端内停止并重新启动 VPN 配置,切换一次飞行模式,再测试同一个域名。若仍失败,切换 Wi-Fi 与移动数据做对照;iOS 不同客户端的菜单名称可能不同,无法核实的具体按钮名称不要照搬。
仍然失败时:用结果快速定位网络层
| 对照结果 | 更可能的问题 | 建议动作 |
|---|---|---|
| 直接访问 IP 可以,域名不行 | DNS 解析链路、浏览器 DoH 或 Fake-IP | 先关闭浏览器独立 DNS,再用最小配置测试 |
| 系统 DNS 失败,Clash 也失败 | 当前 Wi-Fi、路由器、企业网络或上游 DNS 不可达 | 切换移动数据或另一 Wi-Fi 对照;确认是否只有一个网络失败 |
| 系统 DNS 正常,Clash 查询失败 | Clash DNS 字段、代理环路或 TUN 接管 | 移除 nameserver-policy,关闭 TUN,改用纯 IP 上游重测 |
| DNS 成功,所有节点超时 | 节点、端口、路由或 IPv6 路径 | 改用单个已知可用节点,关闭 IPv6 做对照 |
| 只有局域网设备打不开 | Fake-IP 对局域网域名的影响 | 在 fake-ip-filter 中加入必要的局域网后缀并重载配置 |
如果你使用的是企业网、校园网或公共 Wi-Fi,DNS 端口、DoH、IPv6 和 VPN/TUN 流量可能受到网络策略影响。不要把“某个 DNS 可用”直接等同于“节点可用”,也不要把一次成功访问当成长期稳定结论。
恢复默认与提交问题前的自查清单
- 保留原配置备份,只删除本次新增的
dns:、tun:或合并片段。 - 确认配置中没有重复的
dns:顶级区块、错误缩进或把字段写成单行字符串。 - 确认
default-nameserver使用纯 IP,DoH/DoT 地址放在适合的 DNS 列表中。 - 分别测试 System Proxy 开启、TUN 开启和两者都关闭的结果,避免同时改变多个变量。
- 记录客户端名称、内核名称、系统、错误原文、测试域名、使用的 DNS 模式和是否经过浏览器独立代理。
- 看到
Parse error时先修配置;看到lookup failed时先修解析链路;看到节点timeout时再查节点和路由。
截至 2026年10月24日,本文只引用已打开并核对的公开资料;不同客户端内置内核和菜单可能不同,未核实的版本支持情况应以客户端显示和对应内核文档为准。
常见问题
Clash 显示运行正常,但网页提示 DNS_PROBE_FINISHED_NXDOMAIN,先查什么?
先用 nslookup 查询同一域名,再检查 Chrome 的安全 DNS是否绕过 Clash。若系统查询正常而代理访问失败,优先检查 Clash 的 nameserver、Fake-IP、TUN 和浏览器独立代理;不要先更换节点。
Clash 的 Parse error 是 DNS 故障吗?
通常不是。Parse error 表示配置文件没有被正确解析,常见原因是 YAML 缩进、重复顶级字段、字段名不受当前内核支持。先恢复原配置,再逐项加入 DNS字段。
default-nameserver 为什么不能直接写 DoH 域名?
它承担引导解析职责,需要先解析其他 DNS或代理服务器地址。排障时应优先填写可直连的纯 IP;DoH 地址放入适合的 DNS服务器列表,并确认当前网络能建立连接。
Fake-IP 和 Redir-Host 哪个更适合排查?
排查时没有绝对的优先选择。可以只把 enhanced-mode 从 fake-ip 改为 redir-host 做单变量对照:前者恢复而后者失败,重点检查 Fake-IP、fake-ip-filter 和 TUN;两者都失败则继续检查上游 DNS或代理链路。
Android 上 Clash DNS 失败,私人 DNS 要不要关闭?
可以暂时切换为“自动”做对照,但不要把关闭私人 DNS当成永久方案。Google 说明私人 DNS只保护 DNS问答;测试完成后应根据实际结果恢复设置,并确认客户端是否接管了系统流量。
为什么 DNS 已经成功,但 Clash 还是打不开网页?
DNS成功只代表域名解析完成,不代表节点或代理连接成功。若日志随后出现 connection refused 或 timeout,应检查 mixed-port、节点状态、规则模式、TUN路由、IPv6和网络防火墙。