本文写给第一次遇到 Sing-box 配置报错、不懂 JSON、只想快点修好的朋友。如果你已经是老手,可直接跳到文末「完整配置模板」复制即用。
一、先别慌:你遇到的其实是「版本不认老配置」
如果你的客户端(比如 SFI、ShellCraft、ikwei、Mihomo Party 里跑的 sing-box 内核)某天更新后,突然弹出类似下面的报错:
ERROR[0000] decode config: fail to decode rule_set: unknown field
ERROR[0000] initialize rule-set: load rule-set: invalid format
或者客户端直接闪退、连不上网——这 99% 不是你操作失误,而是 Sing-box 这个工具在 1.8、1.12、1.13、1.14 几次大版本里,悄悄改了配置文件的「写法规矩」。
打个比方:就像你拿着 2015 年的 Word 文档,用最新版 Word 打开时格式乱了。文档没坏,只是「打开方式」变了。
本文目标:不解释枯燥的原理,只带你把旧配置改成新版本认得的样子,10 分钟搞定。
二、三句话搞懂 Sing-box 是什么
- Sing-box 是「代理内核」:你手机/电脑上那些叫「SFI」「NekoBox」「ShellCraft」的 app,背后真正干活的引擎就是它。你平时只管填订阅链接,很少直接碰它。
- 为什么有人用它:它速度快、省内存,而且原生支持 Reality、Hysteria2、TUIC 这些新协议(简单理解:就是更隐蔽、更不容易被墙发现)。
- 配置文件长什么样:一个
.json文本文件,里面用大括号{}一层套一层写规则。你不用自己写,通常是「订阅链接自动生成」,但版本一升级,自动生成的格式也得跟着变。
如果你用的是 Clash / Mihomo(另一种内核),本文不适用,但思路类似——也是「版本升级→配置格式变」。
三、动手前,先备好这 3 样东西
| 你要准备 | 怎么拿到 | 用途 |
|---|---|---|
| ① 你的订阅链接 | 机场后台复制,形如 https://xxx.com/subscribe?token=... |
生成新配置用 |
| ② 一个文本编辑器 | 电脑自带「备忘录/记事本」就够,或下载 VS Code | 查看和微调配置 |
| ③ 旧的配置文件(如果有) | 客户端里「导出配置」或文件管理器找 config.json |
对照哪些地方要改 |
最重要的一步——备份! 在改任何东西之前,把现在的配置文件复制一份存好。万一改砸了,还能退回去。
四、三大变化,逐个改(看着吓人,其实就换写法)
Sing-box 升级后,旧配置主要在这 3 个地方「不认了」。我们一个一个改,每个都给你**旧写法(报错)和新写法(能用)**对照。
变化 1:规则集从「数据库」变成「.srs 文件」
大白话:以前 Sing-box 要在本地放两个超大文件(geoip.db、geosite.db)来识别「哪些是国外网站、哪些是国内的」。现在改成从网上下载一个更小更快的 .srs 二进制文件。
比喻:以前是背着一本厚字典查字,现在是手机扫码查——快多了,但写法不一样了。
❌ 旧写法(新版会报错):
{
"geosite": ["google", "youtube"],
"outbound": "proxy"
}✅ 新写法(1.12+ 推荐):先在配置里「声明规则集从哪下载」,再在路由里「引用它」:
{
"route": {
"rules": [
{
"rule_set": ["geosite-google", "geosite-youtube"],
"outbound": "proxy"
}
],
"rule_sets": [
{
"tag": "geosite-google",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/lyc8503/sing-box-rules/rule-set-geosite/google.srs",
"download_detour": "direct"
},
{
"tag": "geosite-youtube",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/lyc8503/sing-box-rules/rule-set-geosite/youtube.srs",
"download_detour": "direct"
}
]
}
}小白提示:
download_detour: direct意思是「下载这些规则文件时走直连,别走代理」,不然可能死循环卡住。这行一定要留着。
变化 2:DNS 规则被「独立」出去了
大白话:以前你可以在「DNS 设置」里直接写「这个域名用那个服务器解析」。新版本不让这么写了,要求把所有「按域名分流解析」的规则,统一搬到专门的 dns.rules 区域。
❌ 旧写法(混在 dns.servers 里,新版报错):
{
"dns": {
"servers": [
{ "tag": "google", "address": "8.8.8.8", "domains": ["geosite:google"] }
]
}
}✅ 新写法(分流规则独立成 dns.rules):
{
"dns": {
"servers": [
{ "tag": "google", "address": "8.8.8.8" },
{ "tag": "local", "address": "223.5.5.5" }
],
"rules": [
{ "rule_set": ["geosite-google"], "server": "google" },
{ "outbound": "direct", "server": "local" }
],
"final": "google"
}
}为什么这么改:相当于把「快递分拣规则」和「快递柜」分开管理,逻辑更清楚,也不容易冲突。
变化 3:连接参数被收进 dial 块
大白话:以前每个「出口」(比如你的代理节点)里,零散写着「开不开 TCP 快速握手」「走哪个网卡」这类连接设置。新版本要求把这些「拨号参数」统一塞进一个叫 dial 的小抽屉里。
❌ 旧写法(参数散落在外):
{
"type": "shadowsocks",
"server": "1.2.3.4",
"tcp_fast_open": true,
"detour": "interface-eth0"
}✅ 新写法(收进 dial 块):
{
"type": "shadowsocks",
"server": "1.2.3.4",
"dial": {
"tcp_fast_open": true,
"bind_interface": "eth0"
}
}如果你是用订阅链接自动生成的配置,这一项通常客户端已经帮你改好了。只有手动写过配置的才需要管。
五、四步无痛迁移法(实操,按顺序来)
下面假设你手里有订阅链接,要从零生成一份新版可用配置。如果你是在改旧配置,对应把上面三处改掉即可。
第 1 步:拿到订阅的「转换链接」
大多数机场后台现在都直接提供「Sing-box 格式」订阅。如果你只有通用订阅,用在线转换工具(如 sub.store 自建、或客户端自带的「订阅转换」)选 Sing-box 1.12+ 格式导出。
小白问:什么是「转换」?就是把机场给的一串通用链接,翻译成 Sing-box 认得的
.json。客户端里点一下就行,不用懂原理。
第 2 步:确认配置里用了 rule_set 而非 geosite
打开生成的 json,搜一下有没有 "geosite": 或 "geoip": 这种写法。如果有,按「变化 1」改成 rule_set + rule_sets 的写法。
第 3 步:检查 DNS 区块
搜 "dns",看里面有没有把域名分流规则直接写在 servers 里。如果有,按「变化 2」挪到 dns.rules。
第 4 步:一键验证
把配置导入客户端,点「启动」。如果:
- ✅ 能打开 Google、能看 YouTube → 迁移成功!
- ❌ 还报错 → 看下面「报错速查表」
六、完整配置模板(复制即用)
下面是一份精简但完整、新版认得的 Sing-box 1.13/1.14 配置骨架。把 你的订阅 换成你的节点信息来源即可(实际使用时通常由订阅转换工具生成,这里给你看结构):
{
"log": { "level": "info" },
"dns": {
"servers": [
{ "tag": "remote", "address": "https://1.1.1.1/dns-query" },
{ "tag": "local", "address": "223.5.5.5" }
],
"rules": [
{ "outbound": "direct", "server": "local" }
],
"final": "remote"
},
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"interface_name": "tun0",
"inet4_address": "172.19.0.1/30"
}
],
"outbounds": [
{
"type": "selector",
"tag": "proxy",
"outbounds": ["auto", "direct"]
},
{
"type": "urltest",
"tag": "auto",
"outbounds": ["subscription"],
"url": "https://www.gstatic.com/generate_204",
"interval": "300s"
},
{
"type": "direct",
"tag": "direct"
},
{
"type": "vless",
"tag": "subscription",
"server": "你的节点地址",
"server_port": 443,
"uuid": "你的UUID",
"tls": { "enabled": true, "utls": { "enabled": true, "fingerprint": "chrome" } }
}
],
"route": {
"rules": [
{ "rule_set": ["geosite-cn"], "outbound": "direct" },
{ "rule_set": ["geoip-cn"], "outbound": "direct" },
{ "match": "all", "outbound": "proxy" }
],
"rule_sets": [
{
"tag": "geosite-cn",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/lyc8503/sing-box-rules/rule-set-geosite/cn.srs",
"download_detour": "direct"
},
{
"tag": "geoip-cn",
"type": "remote",
"format": "binary",
"url": "https://raw.githubusercontent.com/lyc8503/sing-box-rules/rule-set-geoip/cn.srs",
"download_detour": "direct"
}
],
"final": "proxy",
"auto_detect_interface": true
}
}注意:上面
subscription那一项通常是订阅转换工具自动展开成一堆具体节点的,不用手填。你直接用转换工具导出的 json 即可,这里只是让你看懂「一份能用的配置长啥样」。
七、怎么确认「真的成功了」
别只看客户端显示「已连接」就以为好了。请实际验证:
- 打开 https://www.google.com —— 能开 = 代理通了
- 打开 https://ip.skk.moe —— 显示的 IP 不在国内 = 节点生效
- 打开一个国内网站(如 bilibili.com)—— 速度正常、没走代理 = 分流对了
- 看客户端日志(log 级别 info)—— 没有红色
ERROR行 = 配置文件被完整认下了
四步全过,恭喜,迁移彻底成功。
八、常见报错速查表(现象 → 原因 → 解决)
| 现象(报错关键词) | 大概率是 | 解决办法 |
|---|---|---|
unknown field "geosite" |
还在用旧的 geosite 写法 |
按「变化 1」改成 rule_set + rule_sets |
load rule-set: invalid format |
规则集没下下来 / URL 错了 | 检查 rule_sets 里的 url 是否能浏览器打开;确认有 download_detour: direct |
decode dns: unknown field "domains" |
DNS 分流规则写错位置 | 按「变化 2」把 domains 挪到 dns.rules |
unknown field "tcp_fast_open" |
连接参数没收进 dial |
按「变化 3」包进 dial 块 |
| 启动就闪退、无日志 | JSON 格式本身错了(少逗号/括号) | 用 jsonlint.com 粘贴校验,看哪行红 |
| 能连但国内网站变慢 | 国内流量没走直连 | 确认 route.rules 里有 geoip-cn / geosite-cn → direct |
万能排查法:把红色报错那句话整句复制到搜索引擎(加「sing-box」),90% 能直接找到答案。别自己瞎猜。
九、1.13 / 1.14 还有啥新花样?(可选进阶)
如果你已经顺利迁移,新版本还偷偷塞了几个「锦上添花」的功能,了解一下即可,不影响日常使用:
- 原生 Tailscale 组网:可以在配置里直接让 Sing-box 和 Tailscale 打通,不用额外装客户端就能访问家里 NAS。(适合有远程访问需求的进阶玩家)
- 官方 JSON Schema 校验:用 VS Code 装个 sing-box schema 插件,写配置时自动标红错误,比肉眼找逗号强一百倍。
- CCM 连接管理器(1.14-beta):高并发下更稳,多人共用节点时不容易卡。
十、一句话总结
Sing-box 升级后老配置报错,不是你错了,是写法规矩变了。 记住三件事:规则集改
.srs、DNS 规则挪dns.rules、连接参数收dial块。用订阅转换工具重新导一份 1.12+ 格式,基本能一键解决;手写的按上面对照表改,10 分钟搞定。
觉得有用就收藏,下次客户端更新炸了直接翻出来对照。有问题看第八节报错表,基本都能自救。
本文基于 Sing-box 1.8 / 1.12 / 1.13 / 1.14-beta(2026-07-23 发布)实测整理。配置语法以你客户端实际内核版本为准,若版本差异较大请以官方 changelog 为准。