Clash 报错原因怎么查?按日志、端口、订阅、DNS 和 TUN 排查
简答:Clash 报错应先看第一条 error 或 warning,再判断失败发生在配置加载、订阅下载、本地端口、DNS 解析、节点连接还是系统接管。最快做法是先关闭 TUN、保留系统代理,确认一个节点能否连接;如果订阅能更新但节点全部超时,优先检查节点、协议兼容性和本地网络,而不是继续重装。
定义:Clash 报错是客户端界面或 mihomo 等内核在配置解析、网络连接、DNS、端口监听、系统代理或 TUN 接管阶段返回的错误信息。
先看现象:一张表判断 Clash 报错从哪里查
本站是第三方使用指南站,不是任何客户端或相关品牌的官方站点。不同客户端的菜单名称可能略有差异,以下以 Clash Verge Rev、mihomo 和 FlClash 的公开文档为参照;具体版本和界面请以对应项目当前说明为准。
| 看到的现象 | 优先检查 | 先做什么 |
|---|---|---|
| 启动后立即闪退或配置加载失败 | YAML 缩进、字段拼写、内核兼容性 | 打开日志,找到第一条 yaml:、unsupported 或配置路径错误 |
提示类似 address already in use | 7890 或其他监听端口被占用 | 查询占用进程,关闭旧实例或更换本地端口 |
| 订阅更新失败,但旧配置仍能打开 | 订阅地址、网络、证书、返回内容 | 先用浏览器或命令行确认链接能返回内容,再检查格式 |
| 订阅能更新,但所有节点都超时 | 节点状态、协议字段、系统网络或出口链路 | 换两个不同地区或协议的节点交叉测试 |
| 只有一个节点失败 | 单节点地址、端口、认证或节点本身 | 先换节点,不要先改全局 DNS 或重装客户端 |
| 浏览器能用,终端或应用不能用 | 应用是否读取系统代理、代理端口是否一致 | 确认系统代理地址和端口;必要时启用 TUN |
| TUN 启动失败或开启后断网 | 管理员权限、服务模式、虚拟网卡、防火墙和 DNS | 先关闭 TUN 恢复网络,再按权限和 DNS 顺序排查 |
| 提示证书已过期或尚未生效 | 系统日期、时间、时区和证书链 | 同步系统时间后完全退出客户端,再重试 |
Clash Verge Rev 的公开设置中,系统代理和 TUN 是两种不同的接管方式:系统代理依赖应用主动读取系统代理设置;TUN 通过虚拟网卡和路由接管更多系统流量,启用 TUN 时通常不需要再打开系统代理。可参考其系统代理与 TUN 模式说明。
正确顺序:先看第一条日志,再逐层定位
- 保留原现场。不要一看到报错就删除配置或重装。记录客户端名称、内核名称、报错时间、当前模式,以及是所有节点还是单个节点失败。
- 打开日志并找第一条异常。优先查看第一条
error或warning,后面的超时往往只是前面配置、DNS 或端口失败的连锁结果。mihomo 文档说明,error级别主要输出错误和不可用日志,debug会输出更多运行细节,可在短时间内临时提高日志级别。 - 关闭 TUN 做对照。先只开系统代理,测试浏览器和一个普通命令行请求。如果系统代理可用而 TUN 不可用,问题范围就缩小到虚拟网卡、服务权限、路由、DNS 或防火墙。
- 确认模式。Rule 模式按规则匹配,Global 模式需要在 GLOBAL 代理组选择代理,Direct 模式则直接连接。模式定义可参考mihomo 通用配置文档。排查时不要同时修改模式、DNS、节点和规则,否则无法判断是哪一步起效。
- 最后才清理配置。只有确认配置文件损坏、残留进程或客户端数据异常时,才备份配置、订阅名称和必要日志,再重置客户端数据。
如果日志中出现新协议、新字段或 unsupported,先核对客户端实际使用的内核。客户端只是图形界面,真正解析 YAML、建立连接和处理 TUN 的通常是内核;旧内核可能无法识别较新的字段或协议。Clash Verge Rev 官方仓库将其描述为面向 Windows、macOS 和 Linux 的图形客户端,并提供 Mihomo 相关集成;FlClash 官方仓库则明确说明其基于 ClashMeta。版本和内核关系应以Clash Verge Rev 仓库、FlClash 仓库及实际客户端设置页为准。
常见报错一:端口占用、代理端口不一致
address already in use 或类似“端口已被占用”的提示,表示程序尝试监听某个本地端口时,该端口已经被其他进程占用。mihomo 的入站配置包括 port、socks-port、mixed-port、redir-port 和 tproxy-port,具体用途可查看mihomo 入站配置文档。
Windows:打开 PowerShell,执行:
Get-NetTCPConnection -LocalPort 7890 -ErrorAction SilentlyContinue | Select-Object LocalAddress,LocalPort,State,OwningProcess
再执行:
Get-Process -Id 进程号
确认是旧的 Clash、mihomo 或其他软件后,先在任务栏退出;不要直接结束不认识的系统进程。若客户端支持,在设置中的端口配置里把 HTTP、SOCKS 或 Mixed 端口改为未占用端口,然后让系统代理使用同一个新端口。
macOS:终端执行 lsof -nP -iTCP:7890 -sTCP:LISTEN,查看占用端口的进程;确认后退出对应应用,或在客户端端口设置中更换端口。
Linux:终端执行 ss -lntp | grep 7890。如果没有输出,说明 TCP 7890 当前没有监听;如果有输出,先核对进程名称和 PID。
Windows 用户通常只需要检查 HTTP、SOCKS 或 Mixed 端口;redir-port 和 tproxy-port 主要与特定系统的透明代理方式有关,不要因为界面出现这些字段就全部填写。Clash Verge Rev 的设置文件也区分 Mixed、SOCKS、HTTP、Redir 和 TProxy 端口,具体是否显示取决于客户端版本和平台。
常见报错二:订阅更新失败、YAML 错误与协议不兼容
订阅更新失败和配置解析失败不是同一类问题。前者是客户端没有成功取得订阅内容,后者是已经取得内容但内核无法解析。
- 订阅更新失败:检查订阅地址是否完整、是否被浏览器截断、是否需要登录、返回内容是否为空,以及当前网络是否能访问订阅服务器。可以在 PowerShell 中使用
curl.exe -I "订阅地址"查看响应状态;不要把完整订阅链接发到公开平台。 - 返回 HTML 而不是配置:如果命令行或浏览器得到的是登录页、验证码页或错误页面,客户端自然可能无法把它当作 YAML 或订阅格式解析。
- YAML 语法错误:常见线索包括
yaml: line N:、缩进不一致、冒号后缺少空格、列表层级错误,以及把全角标点写进配置。先定位日志中的行号,不要凭感觉重写整份配置。 - 字段或协议不支持:如果日志出现
unsupported、未知字段或未知代理类型,先核对内核版本和配置来源。不要把 Mihomo 专用字段直接复制给不支持它的旧内核。
官方发布页会同时列出稳定版本和预发布版本,版本号、资产名称和校验值应以mihomo 官方 Releases为准。升级前建议备份当前配置,并先用一份最小配置验证内核能否启动。
最小化验证方法:复制配置后只保留一个已知可用的代理节点、一个代理组和必要的基础字段;如果最小配置可以启动,再逐段恢复 DNS、规则集、代理提供者和 TUN 设置。这样比一次性修改整份订阅更容易定位。
常见报错三:timeout、connection refused、reset by peer 怎么区分
| 日志关键词 | 通常表示 | 验证动作 |
|---|---|---|
timeout、i/o timeout | 在规定时间内没有完成连接或读取 | 换节点、换网络、检查目标端口和 DNS;对比单个节点与全部节点 |
connection refused | 目标地址主动拒绝连接,或目标端口没有服务监听 | 确认地址、端口和协议参数,优先换另一个节点验证 |
connection reset by peer | 连接被对端或中间设备重置 | 检查协议、TLS、认证和网络变化,不要只反复刷新节点 |
connect failed | 连接建立阶段失败,原因需要结合前后日志 | 继续看同一时间点的 DNS、TLS、认证或路由信息 |
边界判断很重要:如果订阅能更新,说明至少订阅下载这条链路已经成功,但不等于节点连接一定正常。此时下一步应查节点地址、端口、协议字段、认证参数和实际网络,而不是继续反复更新订阅。如果只有一个节点超时,优先按单节点故障处理;如果全部节点超时,再检查系统代理、DNS、网络限制、时间和内核兼容性。
不要把“节点延迟测试失败”和“实际网页打不开”完全等同。延迟测试使用的地址、协议和连接方式可能不同;排查时应同时看连接日志,并用一个明确的 HTTP 请求做交叉验证。
DNS、Fake-IP 与证书时间错误:先恢复再细查
出现 DNS resolve failed、域名打不开、规则命中异常或 TUN 开启后断网时,DNS 是常见排查点,但不建议一开始就随意替换所有 DNS。mihomo 的 DNS 文档说明,Fake-IP 和 Redir-Host 是不同的增强模式,DNS 查询也可能遵循路由规则;使用代理解析时,还要考虑 proxy-server-nameserver,避免解析代理服务器自身时形成依赖循环。具体字段可参考mihomo DNS 配置文档。
- 先关闭 TUN,保留系统代理,确认普通网页是否恢复。
- 检查 DNS 是否启用、增强模式是
fake-ip还是redir-host,以及是否误把本地网段、内网域名或登录域名纳入代理解析。 - 在 TUN 或 Fake-IP 模式下,
nslookup返回198.18.x.x可能是 Fake-IP 地址池中的正常结果,不要仅凭这个地址判断 DNS 失败;应结合实际访问和日志判断。 - 如果日志包含
x509: certificate has expired或certificate is not yet valid,先同步系统日期、时间和时区,完全退出客户端后重新启动,再测试同一节点。
不要为了绕过证书问题长期关闭 TLS 证书校验。证书校验关闭只能改变验证行为,不能证明节点、域名或网络链路本身正常。
TUN 启动失败、系统代理不生效:按平台速查
Windows:在 Clash Verge Rev 中先确认系统代理开关是否成功,再检查 TUN 所需的服务模式或管理员权限。官方界面说明中,TUN 模式需要服务模式或管理员模式;如果提示服务不可用,先安装或切换服务模式,再重新开启 TUN。Windows 防火墙可能需要允许对应内核程序通过,具体程序名以客户端当前安装目录和日志为准。
macOS:使用系统代理时,检查“系统设置”中的网络代理是否出现正确的本机地址和端口;使用 TUN 时,留意系统是否弹出网络扩展或权限确认。若 TUN 一开就断网,先关闭 TUN 恢复网络,再分别验证 DNS、默认路由和防火墙,不要同时修改多个配置。
Linux:先确认系统代理环境变量和桌面代理设置是否一致,再检查 TUN、路由和防火墙。可以用 ss -lntp 查看监听端口,用 ip route 查看路由;如果系统代理可用而某个命令行工具不可用,说明该工具可能没有读取系统代理设置,此时再考虑 TUN 或为该工具单独配置代理。
Android:使用 FlClash 或其他基于 ClashMeta 的客户端时,开启 VPN/TUN 会触发 Android 系统 VPN 授权。若提示无法启动或流量不经过客户端,进入系统设置中的“VPN”或“应用网络权限”检查授权,并关闭系统中可能抢占 VPN 的其他应用。FlClash 官方仓库说明其支持 Android,并提供 Android VPN 相关功能;具体按钮名称以当前版本为准。
系统代理不是强制接管:有些终端、游戏、UWP 应用或自带网络栈的程序不会读取系统代理。Clash Verge Rev 文档也说明,TUN 用于接管不支持系统代理的程序;Windows 下如果只有商店应用不通,还要检查客户端提供的 UWP 相关工具或回环限制处理。
规则、Global、Direct 与 Rule:为什么看似连接却打不开
模式和规则决定请求最终走代理、直连还是被拒绝。Rule 模式下,规则从上到下匹配;Global 模式需要在 GLOBAL 代理组中选择代理;Direct 模式则不经过代理。排查时可以暂时切换到 Global,并手动选择一个节点:如果 Global 能用而 Rule 不能用,优先检查规则顺序、Rule Provider 更新状态和域名匹配;如果 Global 也不能用,继续查节点、DNS、端口和网络。
规则集或 Rule Provider 更新失败时,不要马上修改全部规则。先确认规则集地址能否访问、返回内容是否完整、客户端日志是否显示下载或解析错误。mihomo 官方规则文档列出了包括 RULE-SET 在内的规则写法,可参考mihomo 路由规则文档。排查完成后恢复原模式,并记录实际改变的设置。
排查完成后的安全清单
- 分享日志前打码订阅链接、token、用户名、密码、节点地址、服务器 IP 和端口。
- 不要公开
external-controller地址、密钥或面板访问信息。 - 不要把完整配置文件直接上传到公开论坛;先删除认证、订阅和节点敏感字段。
- 每次只改一个变量,并记录改动前后的结果。
- 确认问题解决后,恢复不必要的
debug日志,避免长期生成大量日志。 - 如果升级内核,先备份旧版本和配置;官方发布页中的版本、预发布状态与校验值可能变化,以当前页面为准。
如果你只是想恢复网络,最稳妥的回滚顺序是:关闭 TUN → 关闭客户端系统代理 → 检查系统代理是否被残留设置占用 → 重启客户端 → 导入备份配置。完成后再逐项开启 DNS、规则和 TUN。
参考资料
本文操作依据以下公开资料整理:Clash Verge Rev 系统代理与 TUN 说明、Clash Verge Rev 官方仓库、FlClash 官方仓库、mihomo 通用配置文档、mihomo 入站配置文档、mihomo DNS 文档和mihomo 官方发布页。客户端界面、版本号和内核支持范围会变化,操作前请以当前官方文档为准。
常见问题
Clash 报错后是不是直接重装最快?
通常不是。先保留日志并关闭 TUN,确认系统代理、端口和一个节点是否能工作;只有确认配置损坏、残留进程或客户端数据异常时,才备份后重置或重装。
订阅可以更新,但为什么所有节点仍然 timeout?
订阅更新成功只说明订阅下载链路正常,不代表节点链路可用。下一步检查节点地址、端口、协议、认证参数、内核兼容性和本地网络,并用不同节点交叉测试。
看到 address already in use 应该改哪个端口?
先查日志中具体被占用的端口。Windows 可用 PowerShell 查询 7890,macOS 用 lsof,Linux 用 ss;确认占用进程后退出旧实例,或在客户端端口设置中更换对应的 HTTP、SOCKS 或 Mixed 端口。
Fake-IP 模式下 nslookup 返回 198.18.x.x 是 DNS 报错吗?
不一定。Fake-IP 模式可能使用 198.18.x.x 地址池,单凭 nslookup 结果不能判断失败。应结合实际访问、客户端 DNS 日志和是否能建立连接综合判断。
提示 x509 certificate has expired 或 not yet valid 怎么办?
先同步操作系统的日期、时间和时区,完全退出客户端后重新启动,再重试同一节点。不要为了绕过时间错误而长期关闭证书校验。
系统代理已经打开,为什么终端或应用仍然不走?
系统代理依赖应用主动读取代理设置,部分终端、游戏和 UWP 应用可能不遵守。先确认应用使用的代理地址和端口,再根据客户端文档启用 TUN 或配置该应用自己的代理。