先区分测速失败与实际连接失败

Clash 客户端显示的“超时”,通常表示一次面向指定测试地址的请求没有在期限内完成。它不等于节点服务器一定离线,也不能单凭这个结果认定订阅失效。测试地址、DNS、节点握手和目标站响应中的任何一环,都可能让测速结束于超时。

本文按“本地网络 → 系统时间 → 内核与端口 → 流量路径 → DNS → 协议参数 → 服务端”的顺序排查。适用于原版 Clash 配置思路及采用 Clash Meta(现称 mihomo)内核的客户端;具体字段支持范围以正在运行的内核为准。

观察结果优先检查下一步证据
测速超时,网页能打开测试地址及测试时限确认网页确实经过该节点,而非直连
所有节点均失败本地网络、内核、DNS查看同一时段的首条错误
仅一个节点失败节点参数和服务端状态与同订阅的正常节点对照
测速正常,应用失败系统代理、规则、TUN在连接页核对实际出口
网页正常,游戏或通话失败UDP 支持及流量接管区分 TCP 测试和实际 UDP 流量

第一步:检查本地网络与系统时间

先建立直连基线

  1. 记录当前设置后,关闭客户端的系统代理与 TUN。手机端还需确认对应 VPN 连接已断开,避免退出界面后隧道仍在运行。
  2. 打开日常可直连的网站。酒店、校园或公共 Wi-Fi 若有认证页面,先完成登录;只有 Wi-Fi 图标并不能证明互联网已连通。
  3. 用手机热点重复测试。保持同一台设备、同一配置、同一节点,只替换接入网络。

如果关闭代理后也无法直连,应先处理本地网络。若家庭宽带失败而热点正常,问题更接近接入网络的 DNS、路由或 UDP 策略,但仍需日志验证,不能直接推断服务端封禁。操作系统的网络诊断也可能依赖特定探测地址,其“无互联网”提示不宜作为唯一证据。

校准时间,再处理证书报错

TLS 证书验证依赖系统时间。Windows 11 可进入「设置」→「时间和语言」→「日期和时间」,开启自动设置时间并执行同步;macOS 可进入「系统设置」→「通用」→「日期与时间」。除时区外,还要核对实际日期、年份及分钟数。

日志出现 certificate has expired or is not yet valid 时,先核对本机时间与服务端证书有效期。不要把关闭证书验证当成通用修复:这会削弱服务器身份验证,也无法修复密码错误、端口不通或协议不匹配。

第二步:确认内核运行与本地端口

图形界面能启动,不代表代理内核已经成功加载配置。先在客户端日志中寻找配置解析错误、内核反复退出或 address already in use。若配置未加载,节点列表可能仍显示缓存内容,但本地代理端口实际上没有监听。

区分代理端口与控制端口

  • port:HTTP 代理端口。
  • socks-port:SOCKS 代理端口。
  • mixed-port:同时接受 HTTP 与 SOCKS 代理请求的端口。
  • external-controller:控制 API 的监听地址,不应填进浏览器代理设置。

如果当前有效配置使用 mixed-port: 7890,可执行下列命令核对监听进程。Windows 使用 PowerShell;macOS 使用终端。没有输出时,应回到内核日志,而不是继续更换节点。

# Windows PowerShell
Get-NetTCPConnection -LocalPort 7890 -State Listen |
  Select-Object LocalAddress, LocalPort, OwningProcess

# macOS
lsof -nP -iTCP:7890 -sTCP:LISTEN

Windows 可再用 Get-Process -Id 进程号 查询所属程序,将“进程号”换成上一步的实际数字。若旧客户端占用端口,应退出旧实例或调整端口,并同步修改系统代理。不要结束来源不明的系统进程,也不要同时运行两套 TUN 接管。

第三步:确认请求经过哪个策略与节点

系统代理只影响遵循该设置的应用;部分命令行程序、游戏与自带网络栈的应用会忽略它。TUN 则通过虚拟网络接口接管匹配路由的流量,其结果还受路由、权限和排除项影响。二者不是同一个开关,也不能用“系统代理已开启”证明所有流量已经进入内核。

用显式代理请求建立对照

先在客户端选择待测节点,确认相关策略组确实指向它,再执行一次显式 HTTP 代理请求。以下命令连接本地 7890 端口,连接时限为 10 秒,总时限为 15 秒;Windows 请使用 curl.exe,macOS 与 Linux 可使用 curl。

curl.exe --proxy http://127.0.0.1:7890 --connect-timeout 10 --max-time 15 -I https://example.com/

测试地址只用于形成可重复的请求,并非节点可用性的唯一标准。收到 HTTP 状态说明该次请求至少完成了相应阶段;403 可能是目标站拒绝访问,不等于代理连接失败。若提示无法连接 127.0.0.1:7890,优先检查本地监听;若已经建立代理隧道后才失败,再检查握手、DNS 和远端响应。

  1. 打开客户端的连接页,找到刚才的目标域名。
  2. 核对命中的规则、策略组与最终节点,排除请求实际上走了 DIRECT 的情况。
  3. 若连接页完全没有该请求,先检查入口和端口;连接记录可能很快消失,可结合日志观察。
  4. 必要时短暂使用全局模式并明确选择测试节点,完成对照后恢复规则模式。

如果显式代理请求成功,而某应用失败,排查重点应转到应用代理设置和 TUN 路由,而不是反复更新订阅。开启 TUN 后才失败时,可先关闭 TUN 保留显式代理测试,再逐项检查管理员权限、其他 VPN、虚拟网卡及路由冲突。

第四步:将 DNS 失败拆成两条解析链

代理连接至少可能涉及两类域名:节点服务器域名,以及用户访问的目标域名。前者解析失败,隧道无法建立;后者失败,则可能表现为节点可握手、部分网站却打不开。两者使用的解析路径未必相同。

节点域名:先解决建立隧道的前提

检查日志中的失败域名是否等于节点的 server。mihomo 的 proxy-server-nameserver 可用于指定节点域名解析服务器;default-nameserver 则涉及解析 DNS 服务器自身域名时的引导需求。不要把节点域名的解析完全依赖于尚未建立的同一条代理链,否则可能形成循环依赖。

Windows 的 Resolve-DnsName、macOS 的 dig 可用于检查系统解析结果,但这只能说明相应工具使用的解析路径,不证明 mihomo 内置 DNS 返回了相同结果。诊断时应同时核对有效配置中的 DNS 字段与内核日志。

目标域名:检查 Fake-IP、劫持和应用缓存

  • fake-ip 模式可能返回 198.18.0.0/16 范围内的合成地址;这类地址不是网站真实服务器地址。
  • Fake-IP 地址需要由对应内核接管并映射回域名。切换客户端后遗留的系统或应用 DNS 缓存,可能让请求进入错误路径。
  • TUN 的 DNS 劫持能接管符合其配置的 DNS 请求,但应用自带的 DoH 不一定经过普通 53 端口。
  • nameserver-policy、nameserver 与 fallback 应结合实际配置检查;添加更多解析服务器不代表解析一定更快或更可靠。

更换 DNS 模式后,重新加载配置并重启受影响应用。Windows 可按需执行 ipconfig /flushdns 清理系统 DNS 缓存,但它不会清除所有浏览器内部缓存。仅关闭 IPv6 后恢复,也只能说明需要继续检查 AAAA 解析、IPv6 出口或路由,不能证明所有 IPv6 场景都应关闭。

第五步:核对协议参数与内核支持范围

当本地端口正常、请求确实进入目标节点,且节点域名可解析时,再逐字段核对协议。配置能被 YAML 解析器读取,只说明语法成立;字段不受当前内核支持、认证信息过期或服务端监听方式变化,仍会导致连接失败。

参数类别具体核对项常见误判
服务器地址server、port订阅更新后仍使用旧端口
认证与加密UUID、密码、加密方法复制时多出空格或沿用旧凭据
TLSSNI、证书、ALPN把节点显示名称当成 SNI
传输层WebSocket 路径、Host、gRPC 服务名只复制服务器与密码,遗漏传输参数
Reality公钥、short-id、服务端名称将其他节点的参数拼接使用
UDP 协议内核支持、网络放行、服务端监听用 TCP 端口测试推断 UDP 一定正常

例如 Hysteria2、TUIC 等基于 UDP 的连接,可能在限制 UDP 的网络中失败,而同网络下的 TCP 节点仍正常。TCP 端口连通测试不能验证这类协议的完整握手。相反,普通 HTTP 延迟测试成功,也不代表节点支持游戏或语音所需的 UDP 转发。

记录客户端版本和实际内核版本,两者不是同一个版本号。原版 Clash 与 mihomo 的协议支持范围不同,较旧内核也可能不识别较新的字段。遇到 unsupported proxy type 或字段解析错误,应检查配置格式和内核能力,而不是增加测速时限。

第六步:判断节点、测试地址与服务端状态

用最少变量做交叉测试

  1. 同设备、同网络、换节点:仅一个节点失败,优先核对其参数、额度和服务端维护状态。
  2. 同设备、同节点、换网络:热点正常而宽带失败,继续检查接入网络路径和协议限制。
  3. 同网络、同节点、换设备:另一设备正常,检查故障设备的覆写、内核、代理入口与缓存。
  4. 同节点、换目标站:只有一个测试地址失败,检查目标站策略和测试 URL,避免把单站异常扩大为节点离线。

测速时限可以作为诊断变量:例如把 5 秒暂时调整为 10 秒,观察是否只是建立连接较慢。这个操作不会修复认证错误、失效证书或被拒绝的端口;若仅延长时限才偶尔成功,仍需观察丢包、拥塞和握手日志。

订阅更新成功只说明配置获取成功,不证明每个节点都在线。检查服务提供方的账户状态、流量额度及维护通知;更新后应确认当前启用的配置、节点参数和更新时间确实发生变化。不要通过高频连续测速判断故障,重复少量、带时间记录的请求更便于定位。

日志收尾:保留错误阶段,隐藏访问凭据

将日志级别临时调整为 debug 后,复现一次故障并记录时间,随后恢复日常日志级别。调试日志可能包含访问域名和连接细节,向外提供时只截取相关时间窗口。

  • connection refused:通常表示连接被明确拒绝;先确认错误指向本地代理端口还是远端节点端口。
  • i/o timeout、context deadline exceeded:表示某阶段超过期限,需结合前后日志识别解析、拨号或请求阶段。
  • no such host:优先定位解析失败的具体域名,以及它走的是哪条 DNS 路径。
  • authentication failed:优先核对凭据和账户状态,重装客户端通常无法改变服务端认证结果。
  • EOF、连接重置:表示连接被提前关闭,单独一行不足以确定原因,需要结合握手阶段与服务端记录。

排查完成后,恢复规则模式、日志级别及临时改动,保留一份可复现的记录。后续若再次出现“测速超时”,即可从已验证的网络、端口与 DNS 基线继续,而不必从重装开始。代理入口和配置导入步骤可参照快速上手,常见设置问题可查阅帮助中心。