故障排查 预计阅读 12 分钟

Clash 日志看不懂?常见报错信息含义与问题定位方法

解释 Clash 日志级别与每行字段的含义,汇总 dial tcp timeout、connection refused、DNS 解析失败、规则未命中等高频报错的成因,教你按日志把问题定位到订阅、规则或网络环节。

先判断日志来自哪个环节

Clash、Clash Meta 与 mihomo 的日志看起来相似,但同一页面里可能混有客户端日志、内核日志和配置更新记录。定位问题前,先确认报错由谁产生。客户端负责下载订阅、写入配置和启动内核;内核负责 DNS、规则匹配、代理连接与 TUN 流量处理。订阅下载失败时,修改代理规则通常没有作用;内核根本没有启动时,测试节点延迟也不会得到有效结果。

三类记录的关注点

不同客户端的菜单名称会略有差异。一般可从「设置」→「日志」或「内核」→「日志」打开实时记录;部分桌面客户端把入口放在「主页」→「日志」。mihomo 图形客户端通常还能在「设置」→「参数设置」中调整日志级别。复现问题时保持日志页面打开,清空旧记录,然后只执行一次失败操作,得到的样本最容易阅读。

读懂级别、连接方向与规则结果

常见日志级别包括 debuginfowarningerrorinfo 记录正常连接,不代表故障;warning 表示操作失败、回退或暂时异常,但内核通常仍在运行;error 更值得优先检查。排查规则时可临时使用 debug,完成后改回 info,避免大量 DNS 与连接细节持续写入日志。

[INFO] [TCP] 127.0.0.1:53142 --> example.com:443
match DomainSuffix(example.com) using Proxy[HK-01]

[WARNING] [TCP] dial Proxy (match DomainSuffix/example.com)
127.0.0.1:53142 --> example.com:443 error: i/o timeout

第一行表示本机进程从临时端口 53142 发起 TCP 连接,目标为 example.com:443。随后命中 DOMAIN-SUFFIX 规则,并交给名为 Proxy 的策略组;方括号里的 HK-01 是该组实际选择的节点。第二段说明连接已进入代理链路,但在规定时间内没有完成。由此可以先排除“规则没有命中”,把注意力转向节点、上游网络或目标站点。

看到日志时按这个顺序拆分

  1. 确认协议是 TCP 还是 UDP。网页 HTTPS 多数使用 TCP 443,也可能通过 QUIC 使用 UDP 443。
  2. 确认来源地址。127.0.0.1 通常是系统代理或本地应用;TUN 接管时可能显示虚拟网卡地址。
  3. 确认目标是域名还是 IP。只有 IP 时,部分域名规则无法参与匹配。
  4. 查看 match 后的规则类型和规则内容。
  5. 查看 using 后的策略组与实际节点,判断连接最后去了哪里。
  6. 最后读 error 内容,区分连接超时、拒绝、解析失败还是认证失败。

dial tcp timeout:连接在规定时间内没有建立

dial tcp 表示内核正在建立 TCP 连接。后面的 i/o timeoutconnect: operation timed outcontext deadline exceeded 都指向“等待超过期限”,但超时位置并不一定相同。可能是连接代理服务器失败,也可能是代理服务器连接目标站点失败。要结合错误前面的节点名称、目标地址和连续失败范围判断。

只有一个节点超时

若同一策略组里 HK-01 连续超时,而 SG-02 可以正常打开相同网站,问题集中在节点或节点线路。先在客户端执行一次延迟测试,再用实际网页验证。延迟测试 URL 返回 200 只能说明测试链路可达,不等于所有目标都可访问。连续 3 次出现 5 秒以上超时,比单次 800 毫秒更能说明连接不稳定。

所有节点同时超时

[WARNING] dial tcp 203.0.113.20:443: i/o timeout
[WARNING] dial tcp: lookup node.example.net: i/o timeout

这两行不能按同一种方式处理。第一行已经得到服务器 IP,超时发生在 TCP 连接阶段;第二行还停留在域名解析阶段。前者查服务器端口与网络路径,后者查 DNS 服务器、DNS 路由和本机网络。

connection refused:目标明确拒绝连接

connection refused 与超时不同。超时表示迟迟没有收到有效回应;拒绝连接表示目标主机很快返回了拒绝结果。常见原因是端口没有服务监听、服务已经停止、端口填写错误,或本地应用连接到了未启动的 Clash 监听端口。

dial tcp 127.0.0.1:7890: connect: connection refused
dial tcp 198.51.100.8:8443: connect: connection refused

第一行目标是 127.0.0.1:7890,说明某个应用尝试连接本机代理端口,但该端口没有进程监听。检查客户端内核状态,并确认应用代理地址与 Clash 配置一致。常见混合代理端口是 7890,但用户配置可能改为 78977899 或其他值,不能只按默认值填写。

第二行是远端地址拒绝连接。若它对应节点服务器,应核对节点端口、协议类型与订阅更新时间。把 VMess 节点端口误填到 Trojan 配置,或服务器更换端口后仍使用旧订阅,都可能立即被拒绝。此时反复切换规则模式没有作用,因为错误发生在代理服务器连接阶段。

DNS 解析失败:先确认请求由谁处理

DNS 问题常表现为网页提示找不到服务器,日志中出现 lookupno such hostall DNS requests failedcould not resolve 或上游 DNS 超时。排查关键是确认 DNS 请求走操作系统、Clash DNS 模块,还是浏览器自己的安全 DNS。三者并行时,改动其中一个不一定影响实际请求。

检查内核 DNS 配置

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: false
  enhanced-mode: fake-ip
  nameserver:
    - 223.5.5.5
  fallback:
    - tls://1.1.1.1:853

这段配置让内核在 1053 端口监听 DNS,请求不会自动出现在系统的 53 端口上。图形客户端通常会在启用 TUN 或 DNS 接管时添加相应路由。若只复制了配置,却没有让系统 DNS 指向内核,应用仍可能使用原来的解析器。相反,如果端口已被另一个程序占用,启动日志会出现 bind: address already in use

按现象区分处理方向

修改 DNS 后,应清理旧缓存再测试。Windows 可重新连接网络或在终端执行 ipconfig /flushdns;macOS 可关闭并重新打开网络接口。浏览器还可能保留自己的 DNS 与连接缓存,完全退出浏览器后复测更可靠。

规则未命中:日志可能没有 error

规则分流错误经常不会产生红色报错。连接成功,但走了 DIRECT、错误节点或最终的 MATCH,用户仍会感觉“规则失效”。Clash 与 mihomo 按配置中的顺序自上而下检查,第一条命中后停止。范围较大的规则放在前面,会遮住后面的精确规则。

rules:
  - DOMAIN-SUFFIX,example.com,DIRECT
  - DOMAIN,api.example.com,Proxy
  - MATCH,Proxy

访问 api.example.com 时,第一条 DOMAIN-SUFFIX 已经命中,因此第二条精确域名规则不会执行。若希望 API 走代理,应把 DOMAIN,api.example.com,Proxy 移到更前面。日志里若显示 match DomainSuffix(example.com) using DIRECT,说明规则系统正常工作,问题是规则顺序,而不是内核忽略配置。

日志只显示 IP 时怎么查

目标显示为 142.250.0.1:443 一类 IP 时,DOMAINDOMAIN-SUFFIX 规则可能没有可用域名。原因包括应用直接连接 IP、DNS 映射未关联到连接,或流量没有完整经过内核。可查看是否命中 IP-CIDRGEOIP 或最终 MATCH。使用 no-resolve 的 IP 规则不会为了匹配而额外解析域名,它并不是“跳过这条规则”。

规则集加载失败

远程规则集无法下载时,日志可能出现 HTTP 404、context deadline exceeded 或 provider update failed。先检查规则集 URL 与更新时间,再确认下载请求使用的策略。规则集首次加载失败可能使依赖它的规则不可用;已有缓存时,内核可能继续使用旧版本。排查时应记录失败发生在启动阶段还是定时更新阶段。

订阅、配置与内核启动错误

如果日志里完全没有 TCP 或 UDP 连接记录,先确认内核是否成功加载配置。YAML 缩进错误、策略组引用不存在的节点、端口冲突和配置字段不兼容,都可能让内核在接管流量前退出。

HTTP 状态码对应的订阅问题

日志状态 常见含义 优先检查
401 Unauthorized 请求缺少有效认证信息 订阅令牌是否完整、链接是否被截断
403 Forbidden 服务器收到请求但拒绝提供内容 订阅状态、访问限制与请求来源
404 Not Found 订阅路径不存在 链接是否过期、路径是否复制错误
429 Too Many Requests 短时间请求次数过多 暂停自动刷新,等待限制解除
5xx 订阅服务端暂时异常 稍后重试,并保留现有可用配置

YAML 与引用错误

yaml: line 42: did not find expected key
proxy group Proxy: proxy HK-01 not found
listen tcp 127.0.0.1:7890: bind: address already in use

Clash Premium、Clash Meta 与 mihomo 支持的配置字段并不完全相同。配置由较新的 mihomo 生成,却交给旧内核加载时,可能出现 unknown field 或解析失败。先在客户端的「关于」或「内核」页面确认实际内核名称与版本,再对照该内核支持的字段,不要只看客户端外壳版本。

一套可复现的日志排查流程

  1. 记录现象:写下失败时间、应用名称、目标域名,以及系统代理或 TUN 是否开启。
  2. 确认内核状态:检查内核是否运行,mixed-port 是否监听,启动日志是否有配置错误。
  3. 清空日志:把级别设为 info,清除历史记录,避免旧错误干扰判断。
  4. 只复现一次:打开一个失败页面、刷新一次订阅或执行一次节点连接,不要同时操作多个应用。
  5. 先找目标:搜索域名、IP 或订阅地址,再向前后查看 10 至 20 行上下文。
  6. 划分环节:订阅 HTTP 错误归入订阅环节;YAML 和端口错误归入启动环节;lookup 归入 DNS;match 归入规则;dial 归入连接。
  7. 做单变量测试:一次只更换一个节点、一个 DNS 上游或一种接管模式。每次改动后重新清空日志。
  8. 恢复日志级别:问题处理完成后从 debug 改回 info,减少无关记录。

例如,某网站在 TUN 模式下 8 秒后失败,而系统代理模式可在 1.2 秒内打开。日志显示规则均命中同一节点,系统代理模式能完成 TCP 连接,TUN 模式却没有对应目标记录。此时节点和规则已经基本排除,检查重点应转到 TUN 路由、应用是否走虚拟网卡、DNS 劫持以及系统权限。这样的对照测试比连续更换十个节点更有效。

向他人提供日志前,可以保留时间、错误类型、目标端口、规则类型和策略组名称,同时处理订阅令牌、认证字段、完整节点地址与本机用户名。不要只截取最后一行 error;至少保留错误前后的启动信息或连接上下文,否则很难判断超时发生在 DNS、节点还是目标站点。

下载 Clash 客户端 查看 Windows、macOS 与移动端版本