先区分:下载失败,还是配置解析失败

订阅更新失败,不一定是链接过期。先看错误发生在哪一步:客户端是否拿到了响应,响应是否为 Clash 配置,以及当前内核能否识别配置中的字段。按这个顺序查,比反复重装更容易定位。

先保留当前能用的配置,再创建一个用于测试的新配置。不要为了排查删除全部节点,也不要把 DNS、TUN、代理模式一起改掉。一次只调整一项,记录更新时刻和报错原文。

看到的提示优先检查下一步
401、403、404授权、链接状态、服务端限制登录提供方后台重新复制订阅
timeout、no such host网络连通性、域名解析切换 Wi-Fi 与移动数据做对照
yaml、unmarshal、line返回内容和 YAML 结构确认没有返回网页,再看报错行
unsupported、unknown proxy type协议与内核兼容性核对节点类型与客户端内核
更新成功,但节点不可用节点、策略组、分流与 DNS转入连接排查,不再只查订阅地址

第一类:链接过期、令牌失效或复制不完整

从提供方后台重新复制,不从聊天记录拼接

打开订阅提供方的账户页面,查看套餐状态、到期时间和剩余流量,再找到订阅入口。某些服务在重置订阅后会立即废弃旧地址;账户能登录,也不代表旧令牌仍然有效。

  1. 在后台选择适配 Clash 或当前 mihomo 客户端的订阅格式,使用复制按钮取得完整地址。
  2. 打开客户端的配置编辑页面,核对 URL 开头为 https://,末尾没有多出的空格、换行或中文句号。
  3. 保留原始查询参数。不要删除问号后面的内容,也不要自行把 & 后的参数截掉。
  4. 保存到新配置后手动更新一次,观察状态是否由失败变为成功,以及更新时间是否变化。

如果复制结果里出现字面文本 &,可能复制到了网页转义后的源码。应回到提供方的复制入口重新获取,而不是逐个猜测参数。扫码导入后也要核对是否确实创建了配置,不能只凭扫码成功判断订阅有效。

怎样理解 HTTP 状态码

401 通常表示认证未通过,403 可能是权限限制,也可能是防护系统拦截;404 可能是地址变更、路径错误或服务端隐藏了无效资源。单凭状态码不能断定套餐到期。若是 429,先暂停连续刷新,按服务端提示等待;5xx 更应检查提供方服务状态。

第二类:返回的不是 Clash 配置

订阅 URL 能在浏览器打开,只说明请求得到了响应。响应可能是登录页、验证码页、错误提示,也可能是另一种客户端使用的节点列表。即使状态码为 200,也不代表能被 Clash 解析。

在浏览器里查看实际返回内容

  1. 在自己的设备上打开刚复制的订阅地址。不要通过公开的网页代理代为访问。
  2. 若下载了文件,使用本地文本编辑器查看;若直接显示文本,检查开头和主要字段。
  3. 若出现登录框、验证码、<html> 或 <!DOCTYPE html>,说明拿到的是网页,而不是配置。
  4. 若内容是多条 ss://、vmess:// 等链接,或一整段编码文本,回到后台选择 Clash 格式,不要只把扩展名改成 .yaml。

常见的完整 Clash 配置会包含 proxies 或 proxy-providers,并配有 proxy-groups、rules 等字段。但不能只凭是否出现 proxies 就判定有效:使用远程代理集合的配置可能不直接内嵌节点。

还要区分“完整配置订阅”和“代理集合文件”。代理集合常以 proxies: 开头,供主配置的 proxy-providers 引用;它不一定包含日常使用需要的策略组和规则。导入位置选错,可能表现为导入后缺少策略组,或运行行为与预期不同。

第三类:网络、DNS 或 TLS 阻断了更新请求

出现连接超时、域名解析失败或证书错误时,先处理请求链路,不要立即修改 YAML。此时客户端可能还没有拿到配置文件,调整分流规则通常解决不了当前这次下载。

用两种网络做单变量对照

  1. 记下完整错误文字,保持同一个 URL,先在 Wi-Fi 下更新一次。
  2. 切换移动数据,再更新一次。若只有一种网络失败,重点检查该网络的 DNS、认证门户或访问限制。
  3. 如果已有可用配置,比较停止服务与启动服务后的更新结果。客户端版本不同,订阅请求是否经过代理、使用哪条出口也可能不同。
  4. 检查系统的“设置”→“系统”→“日期和时间”,启用自动时间;具体菜单名称随手机厂商变化。系统日期明显错误会影响证书有效期判断。

no such host 指向域名解析问题,connection refused 表示连接被拒绝,i/o timeout 表示请求超时,x509 相关提示则需要检查证书和系统时间。这些信息比一个笼统的“更新失败”更有定位价值。

如果更新必须经过代理,而唯一配置已经失效,就可能出现“需要先联网才能更新、又需要更新才能联网”的循环。可先使用另一条可信网络获取配置,或按提供方说明临时导入本地文件。不要为了绕过证书错误长期关闭验证,也不要随意把 HTTPS 地址改成 HTTP。

配置能下载,但日志显示某个 proxy-provider 或 rule-provider 获取失败,是后续资源请求出错。记录对应的资源类型和域名,分别检查可达性;主订阅更新成功并不保证所有远程资源都已更新。

第四类:YAML 语法与内核兼容性错误

有行号时,先看该行及上一层缩进

YAML 使用空格表示层级。Tab、中文冒号、漏掉的引号,以及列表缩进错位,都可能造成解析失败。报错行有时只是解析器发现问题的位置,真正错误可能在前一行,所以要一起查看上下文。

  • 同一层字段保持相同缩进;下面示例统一使用两个空格,不混用 Tab。
  • 字段分隔使用英文冒号,冒号后需要按 YAML 语法留空格。
  • 节点名含有 : 或 # 等特殊组合时,使用成对引号包住字符串。
  • 策略组引用的节点名、组名必须一致,包括大小写和空格。
  • 不要在同一层重复定义 rules 等键;不同解析器对重复键的处理可能不同。

下面仅用于对照列表和字符串的写法,不是可直接替换订阅的完整代理配置:

proxy-groups:
  - name: "手动选择"
    type: select
    proxies:
      - DIRECT

rules:
  - "DOMAIN-SUFFIX,example.com,DIRECT"
  - "MATCH,手动选择"

如果本地编辑后才开始报错,先恢复编辑前的副本。远程订阅本身有问题时,优先让提供方修正;只改本地缓存,下一次更新可能又会覆盖修改。

合法 YAML,不等于当前内核支持

原版 Clash 与 Clash Meta(现称 mihomo)的配置能力并不完全相同。比如包含 type: hysteria2 的节点,需要支持该协议的内核。较旧的原版 Clash 内核不能因为文件是 YAML 就识别这些节点。

在客户端“关于”或内核信息页面记录客户端名称、应用版本和内核版本,再与订阅提供方声明的要求对照。应用界面相似不代表内核一致;只更新订阅也不会给旧内核增加协议支持。需要更换客户端时,可先查看选型指南,再为新客户端选择对应格式。

在安卓客户端内完成一次完整复查

以经典 Clash for Android 界面为例,进入“配置”→右上角“+”→“URL”,填写名称与订阅地址,再保存。已有配置可从对应条目的菜单进入编辑或更新。不同分支的按钮名称可能不同,应以实际页面为准,不要把节点导入入口当作完整配置入口。

  1. 先更新:等待请求结束,记录成功时间或完整错误。反复点击更新不会修复格式问题,还可能触发限流。
  2. 再选中:确认当前启用的是刚更新的测试配置,而不是列表中的旧配置。
  3. 再启动:回到首页启动服务,首次启动时确认安卓的 VPN 授权,观察是否出现配置加载错误。
  4. 查策略组:打开代理页面,确认策略组中有预期节点,选择一个节点做连接测试。
  5. 查真实访问:打开一个目标网页。延迟测试成功只说明测试目标在当时可达,不代表所有网站和规则都正常。

如果更新成功、服务也能启动,但网页仍打不开,订阅解析这一关通常已经通过。接下来检查代理模式、节点状态、DNS 和应用访问控制。此时切换 TUN 或修改 mixed-port 并不是修复订阅语法的必要步骤,应按实际连接问题分别排查。

仍未解决时,提交这些脱敏信息

联系提供方或客户端维护者时,把复现条件写清楚,比只发“订阅坏了”更有用。可以整理为以下五项:

  • 客户端名称、应用版本、内核名称与版本,以及安卓系统版本。
  • 失败的具体时间、使用 Wi-Fi 还是移动数据、服务当时是否启动。
  • 完整错误文字和行号;日志中的令牌、密码、个人域名按需遮盖。
  • 浏览器返回的是配置文本、下载文件,还是登录页与错误页。
  • 同一链接换网络后的结果,以及最后一次成功更新的时间。

按“链接状态 → 返回格式 → 网络请求 → 语法与内核”顺序检查,通常可以把问题缩小到明确的一层。保留可用副本、每次只改一项,并以错误原文和更新结果验证,能减少来回试错。