Clash 报错对照表:订阅导入失败、连不上节点、DNS 出错的日志怎么读
屏幕上那行红字,先别急着换服务
这篇是一张对照表:按你实际看到的那句报错去查,每一条都标了它出自哪个客户端、哪个源文件,以及在你自己机器上能做的检查。
有意这样写,是因为搜索这些报错时最常见的答案是「换一家」。**但这些报错里的绝大多数,根源在本机——配置写法、权限、规则引用、DNS 设置。**换一份订阅不会让一个写错的 default-nameserver 变对。
安装、订阅导入的基本流程不在这里重复,那部分见《Clash 使用教程 2026》。本文只处理「已经装好了,但它在报错」。
先说结论
- 先把日志级别调到
debug,再谈排错。 mihomo 的log-level有五档,官方文档对每一档的定义写得很死:silent静默不输出、error只输出到无法使用的错误、warning输出不影响运行的错误、info输出一般运行内容、debug尽可能输出所有信息。默认的info看不到 DNS 解析细节。 - 「订阅导入失败,尝试使用 Clash 代理导入」不是故障码,是一句流程提示。 它出自 Clash Verge Rev 的简体中文语言文件,意思是「直连取订阅失败了,换用代理再试一次」。真正的原因要去日志里找下一行。
- 订阅取不回来时,你看到的错误文本往往就是 HTTP 状态行本身(
403 Forbidden、404 Not Found)。原因在 mihomo 的源码里:状态码不在 2xx 时,它把resp.Status原样当作错误返回。 - 连接失败的那一行有四段信息,多数人只读了最后一段。
[TCP] dial 节点 (match 规则/内容) 来源 --> 目标 error: 原因——match那一段经常才是真凶。 - 配置类报错和网络无关,特征是一保存就出现:名字重复、规则引用了不存在的名字、DNS 字段自相矛盾。本文第四、第六节逐条列了原文。
- TUN 打不开基本是权限或防火墙,不是配置。各系统的具体表现见第五节。
- 确实有一类报错不是你的问题——判断方法在最后一节,以及《机场突然全挂了:30 分钟自救清单》。
一句话原则:报错分三类——取不到配置、配置本身不合法、配置合法但连不通。先判断是哪一类,再往下查。这三类的检查方法完全不同,混着试是最浪费时间的做法。
一、先把日志打开:三行就够
把级别调对
配置里的 log-level 决定你能看到什么。mihomo 官方文档(虚空终端 Docs)对五个取值的说明是:
| 取值 | 官方说明(原文) |
|---|---|
silent | 静默,不输出 |
error | 仅输出发生错误至无法使用的日志 |
warning | 输出发生错误但不影响运行的日志,以及 error 级别内容 |
info | 输出一般运行的内容,以及 error 和 warning 级别的日志 |
debug | 尽可能的输出运行中所有的信息 |
排错时调到 debug,排完调回 info——debug 会把你访问过的每一个域名都写进日志。
要读的三行
mihomo 的连接日志格式写死在 tunnel/tunnel.go 里,认得出这三种就够用了:
第一行,成功的连接:
[TCP] 192.168.1.10:54321 --> www.example.com:443 match DomainSuffix(example.com) using 香港01
读法:match 后面是命中的规则类型和规则内容,using 后面是最终走的节点或策略链。
第二行,没有命中任何规则:
[TCP] 192.168.1.10:54321 --> www.example.com:443 doesn't match any rule using 香港01
这说明走的是兜底(MATCH)。如果某个网站行为奇怪,先看它是不是落到了这一行。
第三行,失败的连接:
[TCP] dial 香港01 (match DomainSuffix/example.com) 192.168.1.10:54321 --> www.example.com:443 error: ...
这一行来自源码里的 logMetadataErr 函数,四段信息缺一不可:协议(TCP/UDP)、选中的节点、命中的规则、以及最后的原因。
为什么强调
match那一段:一个「连不上 GitHub」的问题,日志里如果显示using DIRECT,那节点再好也没用——流量压根没进代理。这类问题见第六节。
二、订阅类报错:取不回来,还是取回来了不能用
这一类的共同特征是:发生在导入或更新订阅的瞬间,和你日常上网通不通没关系。
Clash Verge Rev 弹出的原文
下面的中文都是从 Clash Verge Rev 仓库的简体中文语言文件里原样抄来的(src/locales/zh/ 目录),你在界面上看到的就是这些字:
| 你看到的原文 | 它真正的意思 | 先查什么 |
|---|---|---|
| 无效的订阅链接,请输入以 http:// 或 https:// 开头的地址 | 前端格式校验没过,根本还没发请求 | 地址开头、有没有多余空格或中文引号 |
| 订阅导入失败,尝试使用 Clash 代理导入 | 直连取订阅失败,现在改用代理重试 | 这不是终点,看下一条提示是成功还是失败 |
| 使用 Clash 代理导入订阅失败 | 直连和走代理都失败了 | 你当前有没有可用节点;日志里的原始错误 |
| 上次更新失败 | 订阅卡片上的状态标记,定时更新没成功 | 手动更新一次,看具体报什么 |
| 订阅配置校验失败,请检查订阅配置文件,变更已撤销,错误详情: | 内容取回来了,但内核拒绝加载它;客户端已自动回滚 | 冒号后面那段才是真错误,见第四、六节 |
| YAML 语法错误,变更已撤销 | 你手动编辑的配置写坏了 | 缩进、中英文冒号、Tab 混用 |
| 启动订阅配置校验失败,已使用默认配置启动;请检查订阅配置文件,错误详情: | 开机时那份配置就不合法,已退回默认配置 | 同上,看冒号后面 |
注意第二条和第三条是一组。第一次失败只说明「直连取不到」,这是一条关于你到订阅地址这段网络的信息,不是关于节点质量的信息。
日志里那串英文状态
当订阅地址回了一个非 2xx 的 HTTP 状态,mihomo 的处理方式很直白:component/resource/vehicle.go 里,状态码不在 200–299 之间时执行 errors.New(resp.Status)——把 HTTP 状态行原样当成错误文本。所以你在日志里看到的会是:
| 日志里的文本 | 含义 | 本机可做的检查 |
|---|---|---|
403 Forbidden | 对方收到了请求但拒绝提供 | 换一个网络环境试同一地址;确认不是被中间设备拦截 |
404 Not Found | 地址本身在对方那里不存在 | 逐字符核对地址,注意是否被聊天软件截断 |
502 / 503 / 504 | 对方服务端问题 | 隔几分钟再试;这一类你在本机改什么都没用 |
| 超时、无响应 | 请求根本没到 | 这正是「尝试使用 Clash 代理导入」要解决的情况 |
源码里还有一个细节值得知道:304 Not Modified 不算错误——它会被当作「内容没变」正常返回。所以看到 304 不用管。
内容取回来了,但解析不了
这一组来自 mihomo 的 adapter/provider/provider.go 和 common/convert/converter.go,原文如下:
| 报错原文 | 意思 |
|---|---|
file must have a 'proxies' field | 取回的内容里没有 proxies 这一节——十有八九拿到的是 HTML 错误页,不是配置 |
file doesn't have any proxy | 有 proxies 字段但里面是空的 |
doesn't match any proxy, please check your filter | 节点是有的,但被你写的 filter 正则全过滤掉了 |
provider need one proxy at least | 同上,结果集为空 |
invalid filter regex: ... | 你写的过滤正则本身语法错 |
convert v2ray subscribe error: format invalid | 按 v2ray 订阅格式解析失败,内容格式对不上 |
unsupport proxy type: xxx | 配置里写了当前内核不认识的节点类型 |
missing type | 某个节点条目漏了 type 字段 |
第一条最值得单独说:file must have a 'proxies' field 通常意味着你把一个网页存成了配置。手动检查方法是把取回的文件开头看一眼——如果第一个字符是 <,那它是 HTML。
关于「先有节点才能用节点取订阅」这个循环:当直连取不到、手上又没有任何可用节点时,两条路都断了。此时能做的是换一个网络环境(例如换到手机热点)完成一次导入,把配置文件落到本地。这属于已经没有可用出口的情形,处理顺序见《机场突然全挂了:30 分钟自救清单》。
三、连接类报错:节点连不上的那一行
先明确一件事:mihomo 不会在日志里写一句「节点已失效」。它写的是 dial ... error: 加上底层网络库给出的原因。按原因分类:
error: 后面常见的内容 | 发生在哪一步 | 本机检查 |
|---|---|---|
| connection refused | 握手前,对方端口直接拒绝 | 该端口在你这个网络下是否被阻断——换端口的同一节点试 |
| i/o timeout / context deadline exceeded | 握手中,一直没回应 | 是否只有某一个节点这样;同地区另一个节点是否正常 |
| no route to host / network is unreachable | 本机路由层 | TUN 是否处于半开状态;虚拟网卡是否残留 |
| TLS handshake / certificate 相关 | TLS 协商阶段 | 先看系统时间:证书校验对时钟敏感;再看 sni/servername 字段是否被改过 |
| EOF | 连上了又被立即断开 | 换协议试一次,见《2026 年还在用的协议》 |
一个诊断技巧,不用改任何配置:把客户端切到全局模式再试同一个网址。
- 全局模式下通了 → 问题在规则,看第六节。
- 全局模式下也不通,但换一个节点就通了 → 问题在那个节点。
- 全局模式下换哪个节点都不通 → 问题在你到所有出口的这条链路上,这时候才轮到怀疑外部因素。
这三步的判断只需要两分钟,却能把后面所有排查的方向定下来。如果结论是「能连上但很慢」,那是另一篇的范围:《翻墙慢,到底是节点问题还是本地问题?》。
各客户端的中文提示
| 客户端 | 原文提示 | 出处 |
|---|---|---|
| Clash Verge Rev | 无法从内核获取代理信息。请尝试重启内核;若问题仍然存在,请打开日志目录检查内核日志。 | src/locales/zh/proxies.json |
| Clash Verge Rev | 内核通信错误,请重启电脑再试 | src/locales/zh/home.json |
| Clash Verge Rev | 某某 更新失败: 某某(代理集更新) | src/locales/zh/proxies.json |
| FlClash | 切换代理失败,已恢复上一次的选择 | arb/intl_zh_CN.arb |
| FlClash | 未知网络错误 | 同上 |
| Clash Meta for Android | 更新失败 / 更新 某某: 某某 | service/src/main/res/values-zh/strings.xml |
「无法从内核获取代理信息」这一条特别值得认识:它说的是图形界面和内核之间的通道断了,不是节点的问题。内核可能已经崩了,也可能外部控制端口被占用。它的提示自己就给了正确的下一步——去日志目录看内核日志。
四、DNS 与 fake-ip:最容易被误读的一类
DNS 出问题的表现往往不像 DNS 问题:某些网站打不开、某些 App 转圈、浏览器能开但客户端不行。
配置校验阶段的 DNS 报错
这一组出现在启动或保存配置的瞬间,全部来自 mihomo 的 config/config.go 与 hub/executor/executor.go:
| 报错原文 | 它在说什么 |
|---|---|
if DNS configuration is turned on, NameServer cannot be empty | 开了 dns.enable 却没给 nameserver |
default nameserver should have at least one nameserver | default-nameserver 一个都没写 |
default nameserver should be pure IP | default-nameserver 只能填纯 IP。填域名会死循环:解析这个域名本身又需要 DNS |
DNS NameServer[n] unsupport scheme: xxx | 协议前缀不认识(拼错 https、tls、quic 之类) |
DNS NameServer[n] format error: xxx | 那一条的写法不合法 |
dns.fake-ip-range must be a IPv4 prefix | fake-ip-range 必须是 IPv4 网段写法 |
disallow fake-ip-range and fake-ip-range6 both empty with fake-ip mode | 选了 fake-ip 模式却两个网段都没给 |
if "respect-rules" is turned on, "proxy-server-nameserver" cannot be empty | 开了 respect-rules 就必须配 proxy-server-nameserver |
DNS server must be enable | 某项功能(如 TUN 的 DNS 劫持)依赖 DNS 模块,但它没开 |
disallow empty 'proxy-server-nameserver' when 'proxy-server-nameserver-policy' is set | 写了 policy 却没写对应的 nameserver |
default nameserver should be pure IP 是这里最值得记住的一条,因为它的成因很反直觉:default-nameserver 的职责就是解析「节点服务器的域名」,如果它自己也是个域名,就没有起点了。填 IP 是硬性要求,不是风格偏好。
fake-ip 造成的困惑
enhanced-mode: fake-ip 的做法是:给每个域名发一个假的内网地址(官方示例默认段是 198.18.0.1/16),真正的解析推迟到连接建立时再做。好处是快,副作用是——
- 你用
ping某个域名,得到的是198.18.x.x这种地址,这是正常的,不是被劫持; - 任何拿 IP 去做判断的软件都可能困惑(某些游戏、某些依赖 IP 白名单的客户端);
- 需要例外的域名要写进
fake-ip-filter。
相关的校验报错也很具体:dns.fake-ip-filter[n] [规则] error: invalid action 'xxx', must be 'fake-ip' or 'real-ip'、... rule-set 'xxx' not found、... rule type 'xxx' not supported, only domain-based rules allowed。最后一条的意思是:fake-ip-filter 里只能写基于域名的规则,写 IP 类规则会被拒绝。
怎么确认 DNS 到底有没有走对
把 log-level 调到 debug,你会看到 [DNS] resolve 域名 error: 原因 这类行(定义在 tunnel/tunnel.go)。内核启动时 DNS 服务本身起不来,则会有 Start DNS server error: 或 Start DNS server(UDP) error:(定义在 dns/server.go)。
但日志只说明内核内部发生了什么,不能说明你的系统最终用了谁。那要在外面测:用 DNS 泄漏检测 看最终出去的解析服务器是谁,用 IP 地址查询 确认出口本身有没有变。如果你怀疑的是「解析结果被改了」而不是「泄漏」,那是另一套判断方法:《DNS 污染自测:三条命令分清污染、劫持和节点故障》。
五、TUN 模式与权限:各系统坑不一样
TUN 要做两件高权限的事——创建虚拟网卡、改写系统路由表。因此 TUN 打不开,九成是权限或防火墙,不是配置写错。
你会看到的原文
| 客户端 | 原文 | 含义 |
|---|---|---|
| Clash Verge Rev | TUN 模式需要安装服务模式或管理员模式 | 没有拿到高权限 |
| Clash Verge Rev | 由于服务不可用,TUN 模式已自动关闭 | 后台服务没跑起来,客户端主动关了 TUN |
| Clash Verge Rev | 自动关闭 TUN 模式失败 | 连关都没关成,通常伴随内核异常 |
| Clash Meta for Android | 无法启动 VPN 组件 | VPN 授权没给,或被另一个 VPN 应用占着 |
| FlClash(Windows) | Windows 拒绝运行 FlClashCore.exe(错误 某码)。智能应用控制、AppLocker 等应用控制策略会拦截未签名程序 | 系统的应用控制策略拦下了内核进程 |
FlClash 那条提示自己就写明了原因和解法,这类提示不要略读——它比任何第三方教程都准。
mihomo 官方文档写明的限制
这几条来自虚空终端 Docs 的 Tun 页面,是设计上的限制,不是 bug:
- 协议栈可选
system/gvisor/mixed/mips,默认gvisor,文档建议无问题时用mixed。 - 防火墙开启时无法使用
system和mixed协议栈。Windows 的放行路径文档写的是:设置 → Windows 安全中心 → 允许应用通过防火墙 → 选中内核。 - macOS 上 TUN 网卡名只能用
utun开头。文档说 macOS 一般无需配置,防火墙默认放行签名软件。 dns-hijack有平台限制:文档原文是「在 MacOS / Windows 无法自动劫持发往局域网的 dns 请求」「在 Android 如开启 私人dns 则无法自动劫持 dns 请求」。安卓用户如果开了系统的「私人 DNS」,这是一个已知会互相打架的组合。strict-route在 Windows 上的作用是「添加防火墙规则以阻止 Windows 的普通多宿主 DNS 解析行为造成的 DNS 泄露」,文档同时提醒「它可能会使某些应用程序(如 VirtualBox)在某些情况下无法正常工作」。在 Linux 上它「让不支持的网络无法到达」「将所有连接路由到 tun」。auto-redirect仅支持 Linux,且需要auto-route已启用;配置校验会直接报'auto-route' is required by 'auto-redirect'。
其他与 TUN 相关的启动校验报错:when tun is enabled, iptables cannot be set automatically、not allowed two tun listener using auto-detect-interface。
一个常被忽略的后果:TUN 异常退出后虚拟网卡和路由表可能没清干净,表现为「关掉代理也上不了网」。遇到这种情况,先完全退出客户端(不是关窗口),必要时重启系统——路由表恢复后再谈别的。
六、规则与分流:看起来像断网,其实是走错了路
这一类最会骗人:某个网站打不开,你以为节点坏了,其实是它被规则送去了直连。
配置校验会拦下的名字问题
来自 config/config.go,原文模板如下(方括号里会填进实际内容):
| 报错模板 | 触发原因 |
|---|---|
rules[n] [规则原文] error: proxy [名字] not found | 规则指向了一个不存在的节点或策略组 |
rules[n] [规则原文] error: format invalid | 这条规则写法不合法 |
rules[n] [规则原文] error: rule set [名字] not found | 引用了没有定义的规则集 |
rules[n] [规则原文] error: sub-rule [名字] not found | 引用了没有定义的子规则 |
sub-rule error: circular references [名字] | 子规则互相引用成环 |
proxy 名字 is the duplicate name | 两个节点重名 |
proxy group 名字: the duplicate name | 两个策略组重名 |
can not defined a provider called '名字' | 代理集用了保留名字 |
tunnel proxy 名字 not found | tunnels 段引用了不存在的出口 |
configuration file 路径 is empty | 配置文件是空的 |
这些全部发生在加载阶段,你的网络状况对它们没有任何影响。最高频的成因是:订阅更新后节点被改名或下线,而你手写的自定义规则、策略组还指着旧名字。
FlClash 把同类问题翻成了中文:「某某 是一个无效的代理」「某某 是一个无效的代理集」「某某 是一个无效的策略」「某某 是一个无效的 SUB_RULE」。含义和上表一一对应。
没有报错,但走错了路
更麻烦的是这一类:**配置完全合法,没有任何红字,但某个站点就是不通。**判断只要一步——在日志里搜那个域名,然后看它那一行:
- 出现
using DIRECT→ 规则把它判成了国内直连。常见于 GeoIP 库把某些地址归错,或者自定义规则顺序不对(Clash 的规则是从上往下第一条命中生效,一条过于宽泛的规则写在前面会吃掉后面所有规则)。 - 出现
doesn't match any rule using ...→ 走了兜底。兜底指向哪里,它就去哪里。 - 出现
match ... using 某节点但仍然失败 → 规则没问题,回到第三节按连接类排查。
顺序问题是自定义规则最常见的错误,而它不会报错——因为它语法完全正确。
七、什么时候这不是你的问题
前六节都是本机可查的。但确实存在一类情况,你怎么改都没用。特征是同时满足下面几条:
- 全局模式下,所有节点都连不上(不是某几个);
- 换一个完全不同的网络环境(例如手机热点)后,同一份配置仍然全部失败;
- 订阅地址本身返回的是明确的 HTTP 错误(如 403),而不是超时;
- 你的配置文件没有任何改动——加载阶段零报错。
四条都对上,那问题不在你的客户端。这时该做的不是继续改配置,而是按顺序处理:《机场突然全挂了:30 分钟自救清单》。
反过来说,只要还有一个节点能通,或者换个网络就好了,那问题就在本机侧,本文前六节覆盖得到。
本文的边界:这里不会出现「换一家试试」这种建议,也不提供任何节点或订阅来源。报错对照表的价值在于让你知道那行红字在说什么——知道了,多数情况你自己就能修。
参考资料
以下源码与文档均于 2026 年 9 月 20 日核对;版本号于 2026 年 9 月 21 日通过 GitHub 发布接口复核。
mihomo 内核(错误文本的来源)
tunnel/tunnel.go— 连接日志格式logMetadataErr/logMetadata,以及[DNS] resolve %s error: %scomponent/resource/vehicle.go— 订阅抓取;HTTP 状态码非 2xx 时errors.New(resp.Status),304 Not Modified单独放行adapter/provider/provider.go—file must have a 'proxies' field、doesn't match any proxy, please check your filter等adapter/parser.go—missing type、unsupport proxy type: %scommon/convert/converter.go—convert v2ray subscribe error: format invalidconfig/config.go— 规则、重名、DNS、fake-ip 的全部校验报错原文hub/executor/executor.go—configuration file %s is empty、DNS server must be enable、when tun is enabled, iptables cannot be set automaticallylistener/sing_tun/server.go—'auto-route' is required by 'auto-redirect'、not allowed two tun listener using auto-detect-interfacedns/server.go—Start DNS server error: %s
mihomo 官方文档(虚空终端 Docs)
- 全局配置 — 日志级别 — 五档
log-level的定义原文 - DNS 配置 —
enhanced-mode、fake-ip-range默认值198.18.0.1/16 - 入站 Tun — 协议栈取值与差异、防火墙放行路径、
dns-hijack的平台限制、strict-route在 Windows / Linux 上的行为(页面标注更新于 2026 年 9 月 14 日)
各客户端的界面文案(原文出处)
- Clash Verge Rev 简体中文语言文件 —
src/locales/zh/profiles.json、shared.json、settings.json、proxies.json、home.json - FlClash 简体中文词条 —
arb/intl_zh_CN.arb - Clash Meta for Android 简体中文字符串 —
design/.../values-zh/strings.xml、service/.../values-zh/strings.xml
版本(2026-09-21 通过 GitHub Releases 接口复核):mihomo v1.19.31(2026-09-14)、Clash Verge Rev v2.5.4(2026-09-20)、FlClash v0.8.98(2026-09-14)、Clash Meta for Android v2.11.34(2026-09-14)、ClashX Meta v1.4.45(2026-09-14)。
将本指南加入收藏夹
跨境网络环境瞬息万变。建议按下 Ctrl+D (Windows) 或 Cmd+D (Mac) 收藏本页,以便在连接波动时快速查阅解决方案。
加入 5,000+ 跨境从业者,第一时间获取最新的 GFW 封锁动态与协议升级提醒。
* 我们绝不发送垃圾邮件,您可以随时取消订阅。
KUAJIE VPN