订阅地址与配置格式:先区分下载入口和返回内容
订阅链接是获取配置的入口,不是某一种文件格式。客户端访问同一个 HTTPS 地址,可能收到 Clash YAML、Base64 编码的节点列表,也可能收到 sing-box JSON。有些服务会根据地址参数、账户设置或请求头中的 User-Agent 返回不同内容。因此,链接能在浏览器打开,不代表它能直接导入当前客户端。
排查时分三层检查:请求是否成功、返回内容是什么格式、目标内核是否理解其中的协议和字段。HTTP 200 只说明请求获得了响应;返回内容仍可能是登录页、流量到期提示或错误 JSON。把这些响应交给配置解析器,常见结果就是导入失败、节点数为零或提示缺少字段。
三种常见格式分别保存哪些信息
| 格式 | 典型结构 | 通常包含 |
|---|---|---|
| Clash YAML | proxies、proxy-groups、rules | 节点、策略组、分流规则;完整配置还可包含 DNS 与监听设置 |
| Base64 节点列表 | 解码后为逐行排列的协议分享链接 | 节点连接参数;通常不含完整的 DNS、规则与 TUN 设置 |
| sing-box JSON | inbounds、outbounds、route | 入站、出站、路由;完整配置还可包含 DNS 等模块 |
Clash YAML:完整配置与节点提供者不是一回事
完整 Clash 配置可以描述节点、策略组和规则。下面是一份仅直连的结构示例,混合代理端口为 7890,只监听本机。它用于展示字段位置,不会提供远程代理连接。若本地已有程序占用该端口,需要先调整端口。
mixed-port: 7890
allow-lan: false
mode: rule
proxies: []
proxy-groups:
- name: 手动选择
type: select
proxies:
- DIRECT
rules:
- MATCH,手动选择
另有一种 YAML 只在顶层包含 proxies,用于作为 proxy-providers 的节点来源。它不等于完整运行配置,需要由主配置通过提供者名称引用,并在策略组中使用。类似地,规则提供者文件常以 payload 开头,也不能当作节点订阅导入。
“Clash 格式”还存在内核能力差异。mihomo 延续了 Clash 配置体系,但增加了协议支持与扩展字段。能被 mihomo 解析的配置,不代表能被原版 Clash 解析。判断兼容性应查看实际内核,而不是只看图形客户端名称。
Base64:编码容器,不是独立代理协议
常见 Base64 订阅会把多行 ss://、vmess://、trojan:// 等分享链接整体编码。解码只是恢复文本,不会自动获得策略组或分流规则。部分订阅直接返回明文 URI 列表;单条分享链接内部还可能再次使用 Base64,因此需要区分外层订阅编码与协议自身编码。
Base64 也不提供保密性。解码后可能直接看到服务器地址、端口和认证信息。订阅地址中的令牌与下载后的配置都应按凭据保存,不宜放入公开截图、聊天记录或问题工单附件。
sing-box JSON:需要目标版本对应的配置结构
sing-box 通常使用 JSON 描述配置,但并非任何 JSON 节点数组都是完整 sing-box 配置。下面同样是仅直连的结构示例:监听本机 7890,把进入该混合入站的连接交给 direct 出站。
{
"inbounds": [
{
"type": "mixed",
"tag": "local-mixed",
"listen": "127.0.0.1",
"listen_port": 7890
}
],
"outbounds": [
{
"type": "direct",
"tag": "direct"
}
],
"route": {
"final": "direct"
}
}
此示例与前面的 YAML 应分别测试,不要同时启动并争用端口。实际订阅往往包含 TLS、DNS、路由规则和选择器;这些模块有各自的版本要求。转换目标应尽量明确到客户端使用的 sing-box 版本,而不是笼统选择“JSON”。
订阅转换的过程:解析、映射与补全
转换器通常先读取源内容,解析成内部节点对象,再按目标配置模式输出。节点列表缺少的策略组、规则、DNS 和监听项,往往由转换模板补全。因此,转换结果既取决于订阅本身,也取决于所选模板与转换器支持的协议版本。
- 识别源格式。判断内容是完整配置、节点提供者、明文 URI 列表,还是需要先解码的 Base64 文本。
- 解析协议参数。提取服务器、端口、认证、传输层、TLS 与协议专用选项。
- 映射目标字段。把节点写入 Clash 的
proxies或 sing-box 的outbounds,并处理名称引用。 - 生成运行结构。根据模板创建策略组、路由与 DNS;最后使用目标内核检查配置。
例如,Clash 节点使用的 server 与 port,在 sing-box 中通常对应 server 与 server_port。但这不意味着只替换键名就能完成转换:策略组引用、TLS 对象、传输配置和规则动作都有结构差异。
互转时最容易丢失的字段与语义
节点能导入,不代表连接参数完整
服务器和端口正确只是第一步。TLS 的服务器名称、证书验证设置、ALPN,以及 WebSocket 的路径与 Host 请求头,都可能影响握手。Reality 的公钥和 short ID、协议特定的 UDP 选项,也需要转换器明确支持。把不认识的字段静默删除,可能让配置通过语法检查,却无法连接。
- 认证与编码:密码或用户名中的特殊字符可能涉及 URI 百分号编码;重复解码会改变原值。
- 传输层:WebSocket、gRPC 等传输参数需逐项映射,不能只保留节点类型。
- TLS:保留服务器名称与验证策略。遇到证书错误时,应排查原因,不应以关闭验证作为通用转换修复。
- UDP:节点协议、服务器端与目标内核都需支持对应能力,格式转换本身不会增加 UDP 支持。
规则、DNS 与 TUN 无法按名称机械照搬
Clash 的 proxy-groups 与 sing-box 的选择器、测速出站并非完全等价。即使都能“自动选择”,探测 URL、测试间隔和切换行为也可能不同。节点重命名后,还必须同步更新所有策略组和规则中的引用,否则会出现找不到出站或策略组为空的问题。
Clash 的 rules、规则提供者与 sing-box 的路由规则、规则集也不能互相直接粘贴。规则顺序、域名匹配语义和最终回退目标需要核对。DNS 的 Fake-IP 范围、域名过滤与解析出口同样会影响实际访问行为;只比较节点数量无法发现这些差异。
TUN 更接近运行环境配置,而不是节点属性。macOS 上的虚拟网卡授权、路由接管和客户端服务组件由具体客户端管理。从一份完整配置转换出的 TUN 字段,即使语法正确,也不代表目标 Mac 客户端已经完成授权。初次验证应先确认本机代理入站可用,再按客户端流程开启 TUN。
Mac 上的导入与验证顺序
先确定内核,再选择订阅入口
- 在客户端的「关于」或内核信息页面记录内核名称和版本。客户端版本与内核版本分开记录,界面路径以实际客户端为准。
- 在服务的订阅管理页面选择对应格式。mihomo 客户端优先选择明确标注 Clash Meta 或 mihomo 的入口。
- 在客户端的订阅或配置页面添加远程地址,执行更新,再选中刚导入的配置。不同客户端的菜单名称可能不同。
- 查看更新日志与配置检查结果。记录节点数、失败字段和报错行号,再决定是否需要转换。
使用内核检查,不用文件扩展名代替验证
若 Mac 已安装对应的命令行内核,可以在终端运行下列检查。命令假设当前目录中的文件分别名为 config.yaml 与 config.json,二进制已加入 PATH。图形客户端内置的检查功能也可用于同一目的,不必为了验证而替换其内核文件。
mihomo -t -f config.yaml
sing-box check -c config.json
检查通过说明目标内核接受配置,不代表远端节点可达、账号有效或规则符合预期。检查失败时应保留原始配置,围绕第一条明确错误修复,避免同时修改节点、DNS 与规则后失去对照。
如果客户端显示的实际混合端口为 7890,可通过下列命令显式使用 HTTP 代理,验证本机入站与一次 HTTPS 访问。此命令不依赖终端是否读取 macOS 系统代理。
curl --proxy http://127.0.0.1:7890 --head --max-time 15 https://example.com
测试时同时查看客户端连接记录,确认命中的规则和最终出站。能返回 HTTP 响应不等于一定经过远程节点:若匹配到 DIRECT,流量仍是直连。这条命令也不能证明 TUN 已接管终端,因为它已经显式指定了代理。
常见导入问题与转换后的检查清单
“解析失败”与“导入后没有节点”
先查看返回内容是否为 HTML 登录页或错误提示,再确认配置层级。完整配置入口收到只有 payload 的规则文件,或节点提供者入口收到完整配置,都可能失败。YAML 还应检查缩进,避免使用制表符;JSON 则应检查尾随逗号与字符串引号。不要把 YAML 文本仅改名为 .json 后再次导入。
“节点数量正确,但部分节点无法连接”
选一个失败节点,对照转换前后的协议、端口、TLS 和传输字段。若错误集中在某一种协议,应先核对目标内核与转换器是否支持该协议。若全部节点同时失败,再检查账户状态、本机网络、系统时间和 DNS,避免把所有问题都归因于格式。
“手动修复后,下次更新又恢复原样”
远程订阅更新通常会重新生成或覆盖配置。需要长期保留的规则、策略组或 DNS 调整,应使用客户端支持的覆写、合并或扩展功能,或在可控的转换模板中维护。先确认合并顺序与数组处理方式,再进行修改,避免自定义规则被追加到最终兜底规则之后而无法命中。
- 保留原始订阅地址与原始响应,转换文件另存,便于回退。
- 核对节点数量、名称与策略组引用,区分主动过滤与意外丢失。
- 确认监听地址、实际端口、局域网访问开关及控制接口设置。
- 分别验证普通 HTTPS、需要的 UDP 场景,以及代理与直连规则。
- 执行一次订阅更新,确认自定义设置仍然有效。
选择格式的核心是让“源内容、转换器、目标内核”三者匹配。完整 Clash YAML 与完整 sing-box JSON 可以承载运行策略;Base64 节点列表通常只提供连接材料。需要互转时,应把节点映射与策略重建分别检查,再处理 macOS 系统代理或 TUN 接管。