TROUBLESHOOTING · 故障排查
Clash 订阅更新失败的常见原因与自动更新设置方法
订阅更新失败多与网络环境、链接失效或客户端缓存有关。按顺序排查原因,并开启定时自动更新,让节点列表保持最新。
订阅更新是怎么一回事
订阅地址本质上是一个由服务商生成的 URL,请求之后返回一份 Clash 配置:通常是 YAML 文本,也可能是 base64 编码的节点清单。客户端点下「更新」时,会依次完成四步:向订阅地址发起 HTTPS 请求、下载返回内容、解析为配置、写入本地并设为当前配置。
这四步里任何一步出错,界面上都只显示「更新失败」四个字。排查因此有固定顺序:先确认网络能不能连通订阅地址,再确认链接本身是否有效,最后处理客户端的缓存与解析问题。按这个顺序走,绝大多数失败都能在几分钟内定位到具体环节。
常见原因与排查顺序
一、网络无法连通订阅地址
订阅域名被阻断、DNS 被污染,是更新失败最常见的原因。判断方法很直接:把订阅链接复制到浏览器地址栏打开。能返回一大段文本,说明网络层是通的;长时间转圈或直接报错,说明这条地址在当前网络下根本到不了服务器。
- 客户端已有可用节点时,先连接节点、开启系统代理,再更新订阅。Clash Verge Rev 的订阅设置里提供「使用系统代理」开关,打开后更新请求会走当前代理,成功率明显提高。
- 手头没有可用节点时,在能访问的环境(比如手机流量)下用浏览器打开订阅链接,把内容保存为
.yaml文件,再用客户端的「导入本地文件」方式添加。 - 把系统 DNS 改为
223.5.5.5或119.29.29.29这类公共 DNS,排除污染导致的解析错误。
二、订阅链接失效
套餐到期、流量耗尽、服务商重置订阅 token,都会让旧链接变成废链接。浏览器打开后返回的不是配置,而是 401、403 或一行英文错误提示,基本可以断定链接失效。
处理方式:登录服务商的用户后台,重新复制订阅地址;在客户端里删除旧订阅条目,按新地址重新添加。注意有些服务商会区分 Clash、Clash Meta 等不同格式的链接,复制时选 Clash 或 mihomo 对应的那一条。
三、客户端缓存与解析失败
两种典型表现。一是更新看似成功,节点列表却没变化——这是客户端缓存了旧配置,删除订阅后重新添加即可。二是直接报解析错误,常见原因是订阅返回的内容不是 Clash 格式:部分服务按 User-Agent 区分返回内容,客户端标识没被识别时,可能返回其他协议的节点清单,Clash 自然解析不了。
处理方式:确认订阅地址带有 target=clash 之类的格式参数;没有的话用订阅转换工具生成 Clash 格式链接。另外,mihomo(Clash Meta)内核对新字段的兼容性最好,老旧内核解析失败的配置,换用 mihomo 内核的客户端往往一次通过。
四、系统时间偏差导致 TLS 校验失败
系统时间与标准时间差得太多,HTTPS 握手时证书会被判定为不在有效期内,日志里出现 certificate expired 或 x509 字样。开启系统的自动对时功能,校准后重试即可。这类问题在长期关机的设备、重置过主板的机器上比较常见。
开启定时自动更新
节点列表会随服务商的调整不断变化,全靠手动更新总会忘记。各客户端的自动更新设置位置如下:
- Clash Verge Rev(Windows / macOS / Linux):「订阅」页找到对应条目,点编辑图标,在「更新间隔」里填入分钟数,例如
1440表示每天一次;留空或填0表示不自动更新。建议同时打开「使用系统代理」。 - Clash for Android:「配置」页点订阅条目右侧的菜单,选择编辑,设置「自动更新间隔」,单位同样是分钟。注意系统后台限制:应用被清理后定时器会停,隔几天手动补一次更稳妥。
- Clash for Windows:Profiles 页右键订阅条目可以设置更新间隔。该客户端已停止维护,长期使用者建议迁移到 Clash Verge Rev。
- ClashX Meta(macOS):菜单栏图标的配置菜单里提供手动更新与自动更新选项。
mihomo 命令行场景没有界面开关,订阅就是配置文件本身,用 cron 定时下载再热加载即可:
# 每天 06:00 更新配置并通知 mihomo 热加载
0 6 * * * root curl -fsSL "https://example.com/sub?target=clash" -o /etc/mihomo/config.yaml.tmp \
&& mv /etc/mihomo/config.yaml.tmp /etc/mihomo/config.yaml \
&& curl -fsS -X PUT "http://127.0.0.1:9090/configs" \
-H "Content-Type: application/json" \
-d '{"path":"/etc/mihomo/config.yaml"}'
两个细节:先下载到临时文件再 mv 覆盖,避免网络中断时把可用配置写成半个文件;PUT /configs 触发 mihomo 热加载新配置,不需要重启进程,前提是 external-controller 已开启且监听 9090 端口。
注意
自动更新间隔不宜太短。节点列表多数一天才变一次,720 到 1440 分钟足够;请求太频繁可能触发服务商的限流策略,反而把订阅地址拉进黑名单。
手动更新与结果验证
排障期间以手动更新为主:桌面客户端在订阅或配置页点「更新」按钮,Clash for Android 在配置页下拉即可刷新。每次更新后核对三件事:
- 订阅条目旁的时间戳是否刷新到刚才;
- 代理页的节点列表有没有出现新节点、移除已下线的节点;
- 任选一个节点做延迟测试,确认能测出数值而不是超时。
如果更新成功、时间戳也变了,但所有节点全部超时,问题就不在订阅,而在节点可用性或本地网络环境。按首次连接的标准流程逐项验证:换节点、换网络、检查系统代理与 TUN 模式的状态。
常见问题
点更新没有任何提示,也没报错?
打开客户端的日志面板(Clash Verge Rev 在「日志」页)再点一次更新,把报错原文对照前文四种原因归类:出现 timeout 是网络问题,出现 401 或 403 是链接问题,出现 yaml 或 parse 字样是格式问题,出现 certificate 是系统时间问题。
浏览器能打开订阅,客户端却更新失败?
优先打开「使用系统代理」再更新;其次检查是否同时开启 TUN 模式与系统代理产生冲突,关掉其中一个再试;仍然失败则怀疑 User-Agent 识别问题,换一条带格式参数的订阅链接。
自动更新会覆盖我选好的节点吗?
订阅更新是覆盖式的,节点列表会整体替换。多数客户端会记住当前选中的节点名称,更新后自动重选同名节点;只有节点被改名或下线时才需要重新选择。
有多个订阅,能合并到一起吗?
mihomo 内核支持 proxy-providers,可在一份配置里引用多个订阅地址并聚合成代理组;部分图形客户端也提供多订阅合并功能。合并后注意给代理组起容易区分的名字,避免选节点时混淆来源。