TL;DR:从 Clash/Mihomo 迁到 sing-box,不是把 YAML 改成 JSON 这么简单。节点、选择器、路由和 DNS 都要重新映射;能跑通节点只算完成一半,DNS 和规则才是最容易暗错的地方。
很多人切到 Hiddify、Karing 或 sing-box 官方客户端,是因为想用同一套内核覆盖手机和桌面。问题在于,Clash 系配置的思路和 sing-box 不一样。直接找在线转换器,常见结果是「节点能连,分流乱了」。
迁移前先看这张表
| Clash/Mihomo | sing-box | 迁移注意 |
|---|---|---|
proxies | outbounds | 单个节点基本可映射 |
proxy-groups | selector/urltest outbounds | 选择器也算 outbound |
rules | route.rules | 字符串规则改对象数组 |
rule-providers | route.rule_set | .mrs 不能直接当 .srs 用 |
dns.nameserver | dns.servers | 服务器要先定义 tag |
nameserver-policy | dns.rules | 域名匹配逻辑要重写 |
最关键的一点:sing-box 的配置更像「组件注册 + 引用」。先定义 DNS server、outbound、rule_set,再在 route 或 dns 里引用 tag。
一个最小映射例子
Clash 写法:
proxies:
- name: us-1
type: trojan
server: example.com
port: 443
proxy-groups:
- name: Proxy
type: select
proxies: [us-1, DIRECT]
rules:
- DOMAIN-SUFFIX,example.org,Proxy
- MATCH,DIRECT
sing-box 需要把节点和选择器都放进 outbounds:
{
"outbounds": [
{ "type": "trojan", "tag": "us-1", "server": "example.com", "server_port": 443, "password": "xxx" },
{ "type": "selector", "tag": "Proxy", "outbounds": ["us-1", "direct"] },
{ "type": "direct", "tag": "direct" }
],
"route": {
"rules": [
{ "domain_suffix": ["example.org"], "outbound": "Proxy" }
],
"final": "direct"
}
}
不要照抄这个片段到生产配置,它只是说明结构差异。
DNS 是迁移失败重灾区
Clash 里很多人只写 nameserver 和 fallback;sing-box 里更推荐给 DNS server 打 tag,然后用 dns.rules 分派。迁移时检查三件事:
- 解析代理服务器域名的 DNS 不能依赖代理本身。
dns.rules的命中顺序是否和原nameserver-policy一致。- IPv6 是否需要开启;不确定时先关闭,减少变量。
如果切换后网页偶发打不开,别只看节点延迟。先看 DNS 日志,确认域名被哪个 resolver 处理。
什么时候可以用转换工具
适合转换:纯节点列表、少量域名规则、没有 provider 和脚本覆写。
不适合转换:
- 多层
proxy-groups互相引用。 - 远程规则集很多,且格式为
.mrs或自定义.list。 - DNS 分流依赖
nameserver-policy。 - Clash 配置里有 JavaScript parser/override。
需要换订阅时,优先让服务商直接导出 sing-box/Hiddify 格式;如果后台只有 Clash 格式,再考虑转换。也可以准备配套订阅线路作为多客户端测试源,但仍要确认当前客户端选的是 sing-box 导出。
迁移验收清单
- 节点列表存在,selector 能手动切换。
- 自动测速组不会把
direct当成远端节点。 route.final符合你的预期。- DNS 日志里没有循环解析。
- 常用 App 的域名命中正确 outbound。
- 重启客户端后远程 rule_set 能正常更新。
完成这些再把旧 Clash 客户端停掉。否则两个客户端同时开系统代理或 TUN,排错会变得很乱。
落地前复查清单
把 sing-box 订阅格式迁移 当成一次可回滚的小变更处理。先记录当前环境、账号状态、版本号和关键参数,再执行正文步骤。如果你属于“从 Clash/Mihomo 客户端切到 Hiddify、Karing 或 sing-box 官方客户端的用户”,不要在同一轮里同时改账号、网络、客户端和计费设置,否则失败后很难判断是哪一项造成。
| 检查项 | 记录方式 |
|---|---|
| 当前目标 | 写清这次只要解决 sing-box 订阅格式迁移 的哪一个问题 |
| 基线状态 | 截图或保存现有配置、账单、地区、版本号 |
| 操作窗口 | 选择低峰时段,避免影响正在运行的任务 |
| 验证指标 | 用成功率、延迟、费用、可登录状态或页面返回结果判断 |
| 回滚入口 | 保留旧配置、旧密钥、旧订阅或原始文件路径 |
失败后怎么复盘
如果按流程走完仍然失败,先不要继续叠加新方案。把现象拆成三类:完全不可用、偶发失败、能用但成本或速度不达标。完全不可用优先检查前置条件;偶发失败看时间段、地区和上游状态;成本或速度问题再回到 客户端、协议、规则和网络工具配置 的具体约束。完成后对照“按检查表确认订阅能否迁移,避免切换客户端后节点或 DNS 失效”复核一次,只保留能稳定复现改善的改动。