先区分内核和图形客户端的导入能力
sing-box 内核使用 JSON 配置;不同图形客户端可能在外面增加订阅转换、节点列表或一键导入功能。某个客户端能接受 Clash 链接,不代表原生 sing-box 能直接读取任意 YAML。排障时记录客户端名称、应用版本、内核版本、配置来源和错误发生阶段。
| 阶段 | 典型现象 | 先做什么 |
|---|---|---|
| 下载 | 超时、401、403、返回登录页 | 核对来源与下载路径 |
| 解析 | JSON 格式错误、无法识别字段 | 查看错误位置与实际格式 |
| 启动 | 端口占用、权限不足、规则集缺失 | 核对运行环境与依赖 |
| 运行 | 能打开但走错出口 | 查看生效配置与连接路由 |
第一步:在本地确认拿到的是配置
保存原可用配置,下载新内容到自己控制的本地位置;文件可能包含节点密码,别上传公共 JSON 校验网站。若内容开头是 HTML 或人机验证页,先修复下载入口。单个节点对象、完整配置和远程规则集也不是同一种文件,不能根据 .json 后缀猜用途。
第二步:以实际运行的内核为准检查
sing-box version
sing-box check -c ./config-review.jsonconfig-review.json 是你复制出的配置,不是工具自动提供的文件。命令行内核版本应与图形客户端内核匹配,否则“终端通过、App 报错”仍可能发生。图形客户端没有独立 CLI 时,使用它的检查、导入错误和日志功能。检查可能需要访问规则集等外部资源,并非绝对离线。
check 成功不代表节点在线或规则符合预期。失败时从第一条有意义的错误开始:确认字段路径、引用的出站 tag、规则集位置和所需文件。不要因为 unknown field 就逐行删除,尤其不能去掉认证、TLS 或 DNS 字段来换取启动成功。
第三步:跨版本迁移要处理整条依赖链
- 对照官方迁移页列出的版本区间,确认旧版到目标版之间是否发生 DNS、规则动作、TUN 或其他字段变化。
- 复制配置后逐项修改,每次只处理一组明确不兼容的字段,并保留修改记录。不要把网上不同版本的片段拼成一份。
- 重新检查,再导入成新配置试运行。保留旧程序可读取的旧配置,避免新版本写回后失去回退材料。
相同的 outbounds 名称可能被 DNS、路由和策略组同时引用。删除某个对象之后只修复一处引用,可能还会在其他地方报错。来源方持续更新订阅时,还要确认下次下载不会覆盖你本地完成的迁移。
最后验证分流,而不只验证启动
- 固定一个出口访问实际目标,在日志或仪表盘查看命中的规则、出站和 DNS 行为。不同配置不一定包含相同模式按钮。
- 测试应直连的国内目标、局域网资源和所需 UDP 应用,确认没有因兜底规则或 TUN 排除项发生绕行。
- 重新加载客户端并刷新一次配置,确认修复能持续生效。分享错误时脱敏订阅 URL、token、密码及私有地址。
失败时正常停止新配置,恢复此前可用配置和对应版本。不要用重置全部网络、关闭证书验证或清空所有用户配置作为第一步。若配置由来源方维护,把准确版本与错误字段交给对方,通常比自行删改完整模板更容易得到可持续修复。