Clash Meta 报错怎么办?按日志定位 Mihomo 配置、端口和 TUN 问题
简答:先打开 Mihomo 日志,复制第一条 error 或 failed 关键词,再按配置、端口、订阅、节点、代理、TUN、DNS 七类处理;修改配置前先备份,并用 mihomo -t 验证。
定义:Clash Meta 报错通常是使用旧称搜索 Mihomo 内核或相关客户端时遇到的配置解析、端口占用、订阅解析、节点连接、系统代理、TUN 或 DNS 异常。
先看这一张:日志关键词对应什么问题
本文是第三方使用指南,与 Mihomo、Clash Verge Rev 及其开发者无隶属关系。很多用户仍会用“Clash Meta”搜索相关报错,本文统一把它与 Mihomo 内核、Clash Verge Rev 客户端的常见故障放在一起说明。Clash Verge Rev 的公开说明显示,它内置 Clash.Meta(mihomo)内核,并提供系统代理与 TUN 模式;实际报错时应先区分客户端界面问题,还是内核、配置或网络问题。参考Clash Verge Rev README。
| 日志关键词或现象 | 优先怀疑 | 先做什么 | 正常判定 |
|---|---|---|---|
| yaml: line、did not find expected、cannot unmarshal | YAML 缩进、引号、字段类型或字段不支持 | 备份配置,运行 mihomo -t -f 配置文件 | 命令返回配置测试成功,且客户端能加载配置 |
| address already in use、bind、listen | 代理端口、DNS 端口或控制端口被其他进程占用 | 查占用进程,停止重复实例或更换端口 | 目标端口能监听,日志不再出现 bind 失败 |
| 403、404、unexpected character、invalid character | 订阅返回网页、鉴权失败、链接过期或内容格式不对 | 用浏览器或 curl 查看响应头和前几行内容 | 响应是预期的 YAML、URI 或 base64 内容,而不是 HTML |
| proxy group、provider、not found、empty | 代理组引用了不存在的节点或 Provider 没有成功加载 | 检查名称是否完全一致,再单独更新 Provider | 代理组能显示可选择节点,Provider 状态正常 |
| timeout、connect failed、connection refused | 节点地址、端口、DNS、网络路径或节点本身异常 | 先换一个节点,再分别测试域名解析和 TCP 连接 | 至少一个节点延迟测试返回结果并能建立连接 |
| system proxy 已开启但应用直连 | 应用不读取系统代理、代理端口错误或规则选择 DIRECT | 核对 mixed-port 和系统代理地址,再查看连接规则 | 连接记录显示目标应用,并出现代理组或节点名称 |
| TUN failed、permission denied、虚拟网卡失败 | 权限、Service Mode、驱动、系统安全软件或 TUN 配置 | 先关闭 TUN 验证普通代理,再重新授权或检查服务 | 普通代理可用,TUN 开启后能看到系统流量进入连接记录 |
不要只看最后一行日志。第一条 error、failed 或 unable 往往是根因,后续的 connection refused、restart failed 可能只是连锁结果。日志级别可临时设为 debug,排查完成后改回 info 或更低噪声级别;Mihomo 官方配置文档列出了 silent、error、warning、info 和 debug 的区别,见Mihomo 通用配置文档。
第一步:备份配置,再确认是客户端还是 Mihomo 内核报错
- 在客户端中先停用当前配置或关闭 TUN,避免修改配置后系统流量继续走坏路径。
- 复制当前配置文件、订阅配置和 Provider 文件到单独备份目录。不要把完整订阅链接、密码、UUID、节点地址或控制器密钥发到公开 Issue。
- 重新启动客户端,只观察界面是否能打开、内核是否运行、代理端口是否监听。界面能打开但内核退出,优先看核心日志;界面本身打不开,优先看客户端日志和系统事件。
- 如果使用 Clash Verge Rev,可在日志页面查看近期记录;其公开隐私说明提醒,日志和配置可能包含订阅令牌、代理地址、密码、UUID、访问域名等敏感内容,分享前必须脱敏,参考Clash Verge Rev 隐私政策。
分享日志时保留错误类型、操作系统、客户端版本、Mihomo 内核版本、是否开启 TUN、是否开启系统代理和脱敏后的关键配置;删除订阅 URL 参数、密码、UUID、IP、域名和控制器 secret。截图只截日志关键词和状态,不要截完整订阅卡片。
YAML 解析失败:先验证语法,再查字段和引用
出现 yaml:、cannot unmarshal、field not found 或类似错误时,不要先改 DNS、节点和规则。先对当前文件做语法检查:
# Linux 或 macOS;将路径替换为你的实际配置文件
mihomo -t -f /path/to/config.yaml
# Windows PowerShell;将路径替换为你的实际配置文件
.\mihomo.exe -t -f "C:\path\to\config.yaml"命令要求已安装并能直接运行 Mihomo 可执行文件;如果提示找不到命令,先改用可执行文件的完整路径。官方面板文档也使用 mihomo -t 作为激活前的最终配置验证,见MetaCubeXD 官方仓库。
- 看到行号时,先检查该行以及前后两级缩进;YAML 通常使用空格,不要混用 Tab。
- 检查冒号、短横线、引号和列表层级,例如
proxy-groups下的proxies必须是列表。 - 如果提示字段不支持,先确认该字段属于当前内核版本;不要把其他客户端或旧配置的字段直接复制进来。
- 如果提示代理组找不到节点,逐字核对节点名称、Provider 名称和代理组引用;名称大小写、空格和符号都可能影响匹配。
- 配置验证通过不代表节点一定可用,它只说明文件能被内核解析;仍需继续检查订阅、节点和网络连接。
修复时一次只改一个变量。每次修改后重新执行同一条验证命令,并记录“改了什么、验证结果是什么”,这样可以快速回滚到最后一个可用配置。
端口被占用:分别检查代理端口、DNS 端口和控制端口
出现 address already in use、bind: Only one usage 或 listen tcp 时,通常是同一客户端启动了多个内核实例,或者其他软件占用了配置中的端口。Mihomo 的入站可以由 port、socks-port、mixed-port、DNS 监听和 TUN 等组成,官方入站文档见Mihomo 入站配置。
Windows PowerShell:
# 将 7890 替换为日志中报错的端口
Get-NetTCPConnection -LocalPort 7890 -ErrorAction SilentlyContinue |
Select-Object LocalAddress,LocalPort,OwningProcess
# 将 PID 替换为上一步得到的进程号
Get-Process -Id 1234判定标准:如果能查到 OwningProcess,再确认它是否是旧的 Mihomo 实例或其他合法程序;不要看到 PID 就直接结束系统进程。
macOS:
# 将 7890 替换为报错端口
lsof -nP -iTCP:7890 -sTCP:LISTEN
# 结束确认无用的旧进程;将 1234 替换为实际 PID
kill 1234Linux:
# 将 7890 替换为报错端口
ss -ltnp | grep ':7890'
# 查看进程详情;将 1234 替换为实际 PID
ps -fp 1234如果端口由旧实例占用,先正常退出旧客户端,再启动一次;如果端口由其他必要程序占用,修改 mixed-port 或对应监听端口,并同步更新系统代理设置。改完后用本机回环地址测试,例如将端口替换为实际端口:
curl -I -x http://127.0.0.1:7890 https://example.comexample.com 是示例域名,请替换为你有权访问且本地网络可达的测试地址。返回 HTTP 响应或至少出现代理建立连接的结果,说明本地代理端口有响应;若仍是 Connection refused,说明端口没有正常监听。
订阅失败、返回 HTML 或节点为空:先看实际响应内容
订阅导入失败不一定是内核坏了。常见表现包括 HTTP 403、404、返回登录页面、返回验证码页面、响应为空、格式错误,或者导入成功但节点数为 0。Mihomo Provider 文档说明,HTTP 类型 Provider 需要 url,并可配置请求头、更新间隔和健康检查;参考Mihomo Proxy Providers 配置。
在确认你有权访问该订阅的前提下,可先查看响应头和前几行。不要把真实订阅链接写进命令历史或公开截图:
# 将 URL 替换为你的订阅地址;不要把真实 URL 分享给他人
curl -I -L --max-time 15 "https://example.com/replace-subscription"
# 仅本地查看前 20 行;将 URL 替换为你的订阅地址
curl -L --max-time 15 "https://example.com/replace-subscription" | head -n 20example.com/replace-subscription 只是示例,必须替换为实际地址。判定方法:
- 如果 Content-Type 或内容明显是
<html>、登录页、403 页面或错误提示,先处理鉴权、过期、访问限制或订阅地址问题。 - 如果返回 YAML,检查是否有
proxies:、proxy-groups:或有效的 Provider 内容;具体格式应以订阅提供方实际输出为准。 - 如果返回 URI 或 base64,不能强行当成完整 YAML;Mihomo Provider 内容文档明确区分 YAML、URI 和 base64 形式,参考Mihomo Provider 内容格式。
- 如果下载成功但节点为空,检查 Provider 是否更新成功、过滤条件是否把节点全部排除,以及代理组是否引用了正确的 Provider。
不要为了“能导入”而关闭证书校验,也不要把订阅 URL 交给不明在线解析站。无法核实订阅来源、有效期或返回内容时,应标记为“未核实”,不要据此判断服务是否正常。
节点 timeout 或测速全红:区分单节点故障和整体连接问题
timeout、connect failed、connection refused 只说明某一步连接失败,不能直接证明所有节点或整个客户端都不可用。按下面顺序做单变量测试:
- 先确认代理组中确实选中了一个节点,而不是空组、DIRECT 或 REJECT。
- 只测试一个节点,再换第二个节点;如果只有一个节点失败,优先怀疑该节点地址、端口、协议或节点侧状态。
- 如果所有节点都失败,测试节点域名解析和本地网络;不要同时修改 DNS、规则和 TUN。
- 如果延迟测试有结果但实际网页打不开,查看连接日志中的规则、目标域名、DNS 和最终出站节点。
- 如果只有某个网站失败,先检查规则是否把它匹配到 DIRECT、REJECT 或错误的代理组。
Mihomo 的 Provider 健康检查支持 URL、间隔、超时和预期状态码等配置;健康检查结果只能说明测试 URL 的连通性,不等于所有网站都能访问,参考Proxy Providers 官方文档。
系统代理不生效、TUN 无法启动:先分开验证
系统代理和 TUN 不是同一种工作方式。系统代理依赖应用遵守 HTTP、HTTPS 或 SOCKS 代理设置;TUN 在网络层接管流量,通常需要管理员或系统服务权限。Clash Verge Rev README 将系统代理和 TUN 列为不同功能,因此排查时不要两者同时开启后直接判断结果。
- 关闭 TUN,只开启系统代理,确认系统代理地址是
127.0.0.1,端口与mixed-port一致。 - 用浏览器访问一个普通测试地址,再查看 Mihomo 连接记录;如果没有连接记录,应用可能没有使用系统代理,或被系统代理绕过。
- 如果连接记录出现但规则为 DIRECT,检查模式、代理组和规则顺序;Mihomo 的规则支持 DOMAIN、IP-CIDR、PROCESS-NAME、RULE-SET 和 MATCH 等类型,参考Mihomo 路由规则文档。
- 确认普通代理可用后,再关闭系统代理并单独启用 TUN。按系统提示授权,检查虚拟网卡、Service Mode、杀毒软件和防火墙是否阻止核心进程。
- 如果 TUN 失败但普通代理正常,先保留 TUN 关闭状态,不要为了修复 TUN 同时更换节点、DNS 和规则。
官方 TUN 文档列出 system、gvisor、mixed、mips 等 stack 值,并说明不同 stack 对系统协议栈和防火墙条件有影响;配置项应以当前内核文档为准,见Mihomo TUN 配置。
DNS、Fake-IP 和 Rule Provider 报错:用最小改动定位
如果日志包含 dns resolve failed、SERVFAIL、fake-ip、rule-provider 或 behavior,先不要把所有 DNS 上游全部替换。Mihomo DNS 配置包含启用状态、监听地址、增强模式、Fake-IP 范围和过滤列表等字段,参考Mihomo DNS 配置文档。
- 先关闭 TUN,仅保留普通代理,判断问题是否只在系统级 DNS 劫持发生。
- 如果节点服务器使用域名,检查该域名是否被错误解析到 Fake-IP 段,或 DNS 上游是否全部超时。
- 如果只有某些域名失败,检查
fake-ip-filter、规则顺序和 DNS 分流,不要直接关闭所有 DNS 保护配置。 - 如果 Rule Provider 报错,检查 Provider 的
behavior与实际内容类型是否匹配;domain、ipcidr、classical 的内容格式不同,参考Mihomo Rule Provider 内容格式。 - 每次只改一个字段,重新执行
mihomo -t,再重启内核并观察同一域名是否恢复。
如果日志只显示 DNS 超时而没有配置解析错误,可能是上游、网络路径或节点连接问题;如果配置测试直接失败,则优先修复字段和格式,不能用更换节点来绕过配置错误。
最后的回滚顺序:什么时候重装,什么时候不要重装
重装不是第一步。按以下顺序更稳妥:
- 导出并备份当前配置、Provider、规则和日志。
- 恢复最后一个能通过
mihomo -t且曾经可用的配置。 - 关闭 TUN、系统代理和自动更新,重新启动内核。
- 先确认本地端口监听,再确认单个节点连接,最后恢复规则、DNS 和 TUN。
- 只有在客户端文件损坏、核心二进制无法启动或升级后持续崩溃时,才考虑从项目公开发布渠道重新安装;下载来源和版本应以项目官方页面为准。
如果升级后出现字段弃用、配置不兼容或核心无法启动,不要删除旧配置。保留旧版本和最后可用配置,先用最小配置验证内核,再逐段恢复订阅、代理组、规则和 DNS。没有日志、复现步骤或可核验版本信息时,具体原因应写为“未核实”。
常见问题
Clash Meta 报 YAML 错误,最先改哪一行?
先按日志给出的行号检查该行及前后缩进,再检查字段类型和引号。不要先改节点、DNS 或 TUN;备份后运行 mihomo -t -f 配置文件,看到配置测试成功再继续。
订阅导入后节点数量为 0,是订阅失效了吗?
未必。先查看响应是否为 HTML、403、登录页、空内容或格式不匹配,再检查 Provider 过滤条件和代理组引用。没有实际响应内容和日志时,订阅是否失效属于未核实。
系统代理开启了,但浏览器仍然直连怎么办?
先核对系统代理地址和端口是否与 Mihomo 的 mixed-port 一致,再看连接记录是否出现目标应用。如果有连接记录但规则显示 DIRECT,应检查模式、代理组和规则顺序。
TUN 报权限错误,关闭系统代理后能否继续排查?
可以。先关闭 TUN,仅测试普通代理,确认节点和端口正常;随后按系统提示重新授权,并检查虚拟网卡、Service Mode、防火墙或安全软件。不要同时更换节点和 DNS。
日志分享给别人前需要打码什么?
至少删除订阅 URL 参数、密码、UUID、节点地址、控制器 secret、内网 IP、访问域名和完整配置。保留错误关键词、系统、客户端与内核版本、TUN 状态和脱敏后的配置结构即可。