先区分订阅 URL、节点列表与 Clash YAML
“订阅链接”首先是一个 URL,而不是固定的文件格式。客户端访问 URL 后,服务器才会返回实际内容。返回结果可能是完整的 Clash YAML、只包含节点的 YAML、经过 Base64 编码的通用节点列表,也可能是网页、JSON 错误信息或已失效提示。能否直接导入,取决于客户端是否能够处理最终返回的内容。
Clash 与 Clash Meta(现常用名称为 mihomo)内核的配置入口以 YAML 为基础。完整配置通常包含端口、运行模式、节点、代理组、规则和 DNS 等字段。部分图形客户端会在导入前识别通用订阅,并调用自身集成的转换功能;内核直接读取配置文件时,则通常要求输入已经是可解析的 YAML。
三种常见结果的核心差异
| 类型 | 开头或结构特征 | 常见处理方式 |
|---|---|---|
| Clash YAML | proxies:、proxy-groups:、rules: |
作为远程配置导入,或保存为 YAML 文件 |
| Base64 节点列表 | 连续字母、数字、+、/、=,正文很少换行 |
先解码确认协议,再转换为 Clash YAML |
| 通用 URI 列表 | ss://、vmess://、trojan://、hysteria2:// |
由支持对应协议的客户端导入,或转换为目标格式 |
在 Clash 客户端中导入订阅 URL
导入前先确认系统时间正确,并确保链接能通过 HTTPS 正常访问。系统时间相差数分钟,可能导致 TLS 证书校验失败;链接复制时多出空格、换行或中文标点,也会造成请求失败。URL 应从 https:// 开始,复制后不应在末尾附带句号。
Clash Verge Rev 的远程配置入口
以 Clash Verge Rev 2.3.1 的界面为例,可进入「订阅」→「新建」,将类型设为「Remote」,在 URL 输入框粘贴地址后确认。导入完成后,在配置卡片上执行启用操作。不同版本可能把新建入口显示为加号按钮,但远程配置、URL 和更新间隔三个字段的含义相同。
- 打开「订阅」页面,选择「新建」或加号按钮。
- 选择远程配置类型,粘贴完整 HTTPS 地址。
- 名称可填写服务用途,例如“日常规则配置”,避免使用令牌作为名称。
- 保存后等待下载与 YAML 解析完成,再将该配置设为当前配置。
- 进入「代理」页面选择代理组策略,最后在「设置」→「系统设置」中开启系统代理。
Clash for Windows 的历史界面路径
仍在维护旧环境时,Clash for Windows 0.20.39 的入口是「Profiles」→ 顶部 URL 输入框 →「Download」。下载成功后,需要点击对应配置卡片使其变为当前配置。该客户端已经停止更新,这一路径主要用于识别既有安装;新部署应优先选择仍在维护、使用 mihomo 内核的客户端。
导入后不要只检查“下载成功”
- 检查配置卡片是否显示更新时间,而不是仅出现在历史列表中。
- 检查「代理」页面是否出现预期的代理组,例如“节点选择”“自动选择”或“故障转移”。
- 检查当前模式。规则配置通常应使用 Rule 模式,而不是 Global 模式。
- 检查本地监听端口。常见混合端口是
7890,但实际值应以配置中的mixed-port为准。 - 开启系统代理后,确认系统 HTTP 与 HTTPS 代理指向
127.0.0.1和客户端实际端口。
从返回内容判断订阅格式
浏览器直接打开订阅 URL 时,可能下载文件,也可能显示一长串字符。最可靠的判断依据是 HTTP 状态、响应头和响应正文,而不是文件扩展名。服务端即使使用 .txt 路径,也可能返回标准 YAML;反过来,名为 config.yaml 的地址也可能返回登录页面。
使用 curl 查看状态与响应头
curl -L --compressed -D headers.txt \
-o subscription.txt \
"https://sub.example.net/profile?token=demo-token"
-L 会跟随 301、302、307 或 308 跳转,--compressed 允许 curl 解压 gzip 或 Brotli 之外其支持的压缩响应,-D 将响应头单独写入文件。检查最终状态是否为 200,再查看 Content-Type。常见 YAML 响应可能使用 text/yaml、application/yaml 或普通的 text/plain,因此 MIME 类型只能辅助判断。
完整 Clash YAML 的结构
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
proxies:
- name: Example-Trojan
type: trojan
server: edge.example.net
port: 443
password: sample-credential
sni: edge.example.net
proxy-groups:
- name: 节点选择
type: select
proxies:
- Example-Trojan
- DIRECT
rules:
- DOMAIN-SUFFIX,example.org,节点选择
- GEOIP,CN,DIRECT
- MATCH,节点选择
只要缩进与字段合法,这类内容可以保存为 UTF-8 编码的 config.yaml。YAML 使用空格表达层级,不能把 Tab 当作缩进。名称含冒号、井号或前后空格时,建议使用引号包裹。配置能够解析,也不代表节点参数一定有效;协议类型、端口、TLS、SNI 和认证信息仍需与服务端一致。
只含节点的 provider YAML
另一种常见返回内容只有顶层 proxies:,没有 rules: 和 proxy-groups:。它通常是代理提供者文件,适合被完整配置中的 proxy-providers 引用,而不一定能单独作为主配置启动。
proxy-providers:
remote-nodes:
type: http
url: "https://sub.example.net/provider.yaml?token=demo-token"
path: ./providers/remote-nodes.yaml
interval: 21600
health-check:
enable: true
interval: 600
url: https://www.gstatic.com/generate_204
proxy-groups:
- name: 自动选择
type: url-test
use:
- remote-nodes
url: https://www.gstatic.com/generate_204
interval: 300
这里的 interval: 21600 表示每 21600 秒,也就是每 6 小时更新一次 provider;健康检查每 600 秒运行一次;代理组测速间隔是 300 秒。这三个间隔各自独立,不能把测速成功理解为订阅已经更新。
Base64 与通用节点订阅怎么处理
Base64 是编码方式,不是代理协议。它常用于把多行 URI 合并为一段便于传输的文本。典型正文由大小写字母、数字、加号、斜杠和结尾等号构成;URL-safe Base64 还可能使用连字符和下划线。只凭字符外观不能完全确定格式,必须解码后查看内容。
离线解码并识别 URI
在 macOS 或 Linux 中,可以先复制响应文件,再执行以下命令。GNU coreutils 常用 base64 -d,macOS 自带工具也支持 -D;若当前平台参数不同,可先运行 base64 --help 查看。
base64 -d subscription.txt > decoded.txt
head -n 8 decoded.txt
解码结果通常是一行一个节点 URI,例如 ss://、trojan:// 或 vmess://。其中 VMess URI 的主体还可能再次包含 Base64 编码的 JSON。不要反复解码整份文件,应先确认第一层结果是否已经出现可读协议前缀。
为什么 Base64 订阅不能总是直接交给 Clash 内核
Clash 配置加载器读取的是 YAML 结构,而通用 Base64 列表只是若干节点 URI。图形客户端如果提供“通用订阅导入”或内置转换能力,可能自动把 URI 转成 proxies 项;直接运行 mihomo 二进制并通过 -f 指定配置时,则应先取得 Clash 或 mihomo 格式的 YAML。
- 服务提供方同时提供“Clash”“Mihomo”或“Clash Meta”格式时,优先选择对应入口。
- 需要转换时,优先使用服务提供方的格式转换功能或本机转换工具。
- 转换目标要匹配内核能力。包含 VLESS、Reality、Hysteria 2 等字段时,应选择 mihomo 兼容格式。
- 转换后检查节点数量、代理组、规则和 DNS,不能只看文件是否成功生成。
更新间隔、缓存与订阅失效处理
订阅不需要每分钟刷新。远程配置通常包含完整规则和节点列表,频繁请求会增加服务端压力,也可能触发速率限制。日常使用可设置为 6 至 24 小时更新一次;节点变化频繁时可缩短到 1 小时,但不建议把自动更新间隔设为几十秒。
常用间隔换算
| 更新频率 | 秒数 | 适用场景 |
|---|---|---|
| 每 1 小时 | 3600 |
节点变更较频繁的临时配置 |
| 每 6 小时 | 21600 |
常规远程 provider |
| 每 12 小时 | 43200 |
规则与节点变化较少的配置 |
| 每 24 小时 | 86400 |
稳定的完整配置订阅 |
手动更新后仍显示旧节点
- 确认更新的是当前启用配置,而不是列表中的另一张同名配置。
- 查看客户端日志中的请求时间、HTTP 状态和解析错误。
- 关闭订阅 URL 的浏览器缓存影响,使用 curl 添加
Cache-Control: no-cache请求头进行对照。 - 检查服务端是否通过 CDN 缓存旧内容,响应头中的
Age可用于辅助判断。 - 如果使用
proxy-providers,同时检查 provider 文件更新时间,而不是只看主配置更新时间。 - 更新成功后重新选择代理组,已删除的节点可能仍被旧会话短暂占用。
HTTP 状态对应的排查方向
401或403:令牌无效、权限不足、来源限制或请求头要求不满足。404:路径已变更,或复制地址时丢失了部分参数。429:请求过于频繁,应延长更新间隔并等待限制解除。500、502、503:服务端或上游暂时异常,保留现有配置并稍后重试。200但解析失败:响应可能是登录页、错误 JSON、Base64 文本或不兼容的 YAML。
YAML 解析失败与导入后无法联网
订阅导入报错应分成“下载阶段”“解析阶段”和“运行阶段”处理。下载阶段看 HTTP 与 TLS;解析阶段看 YAML 行号和字段类型;运行阶段则检查节点握手、DNS、路由规则和系统代理。把三类问题混在一起,容易反复更换订阅地址却没有定位到实际故障。
常见 YAML 报错
- 缩进错误:列表项前的空格层级不一致,或混入 Tab。
- 重复键:同一级出现两个
rules:或两个dns:,后者可能覆盖前者,也可能直接触发严格解析错误。 - 冒号未引用:节点名称含“地区:线路”时,未加引号可能被识别为键值结构。
- 字段类型错误:
port应为数字,却被写成无法转换的文本;布尔值应使用true或false。 - 内核不兼容:配置包含 mihomo 扩展字段,但客户端仍使用较旧的 Clash 内核。
导入正常但浏览器打不开网页
- 确认当前代理组已选择可用节点,而不是处于空组或已失效节点。
- 确认系统代理监听地址与端口一致。配置为
mixed-port: 7890时,系统代理通常指向127.0.0.1:7890。 - Rule 模式下查看请求命中了哪条规则。末尾
MATCH的策略会影响未被前序规则匹配的流量。 - 检查 DNS 配置。启用
fake-ip时,应确保相关应用流量确实经过内核,避免解析路径与连接路径分离。 - 只在需要接管不遵循系统代理的应用时开启 TUN。开启后若完全断网,应检查 TUN 栈、路由安装权限和 DNS 劫持设置。
订阅导入的稳妥配置流程
初次设置时,优先选择服务端直接提供的 Clash 或 mihomo YAML。导入后保留一份最近可用的本地配置,远程更新失败时可以迅速回退。客户端支持配置合并时,可把个人规则、DNS 和脚本放在本地覆写层,避免每次订阅更新都覆盖手工修改。
- 订阅 URL 只用于客户端配置,不放入公开同步仓库。
- 完整配置与 provider 文件分开管理,明确各自的更新间隔。
- 节点名称保持唯一,避免代理组选择到同名但参数不同的节点。
- 规则修改后重新载入配置,并在连接日志中核对命中策略。
- 更换内核版本后先验证配置语法,再开启系统代理或 TUN。
判断订阅格式的关键不是链接看起来像什么,而是它最终返回什么。YAML 可以直接进入配置流程;Base64 需要先解码识别;通用 URI 列表需要由兼容客户端或可信转换流程生成目标 YAML。按下载、解析、启用、接管流量四个阶段检查,绝大多数导入问题都能被准确定位。