sing-box 配置文件入门:JSON 结构与最小可用配置

先说结论

sing-box 的配置是一份 JSON,顶层按职责分成日志、DNS、入站、出站、路由等块。读懂各块的分工,再对照官方文档逐字段核对,比照抄网上的整份配置可靠,因为字段会随版本变动。

sing-boxv1.14.3

类型
代理内核
内核
sing-box
支持系统
Windows、macOS、Linux、安卓、iPhone / iPad、路由器
最新版本发布于
2026-10-09(核验时已发布 1 天)
版本核验时间
2026-10-10 12:27 UTC(来源:GitHub 官方接口)
官方地址
github.com/SagerNet/sing-box/releases

sing-box 的配置是一份 JSON 文件,顶层按职责分成几大块:谁来记日志、怎么解析域名、流量从哪里进来、从哪里出去、中间按什么规矩分派。把这五件事分清,sing-box 配置就从“一堵字墙”变成了五个可以单独检查的小房间。下面按这个顺序带你读一遍,最后再讲怎么改、怎么验。

先搞清楚:这份 JSON 到底在回答什么问题

一份能跑起来的配置,本质上是在回答五个问题:

顶层块 它回答的问题 新手最常犯的错
log 要不要记日志、记到什么详细程度 排障时忘了调高详细程度,看不到有用信息
dns 域名交给谁去解析 解析服务器写了,却没有在路由里被用到
inbounds 本机的哪个端口或虚拟网卡接收流量 监听地址写成对外开放,把代理端口暴露给了局域网
outbounds 流量最终从哪个节点或方式出去 节点信息抄漏一项,或把标签名写重复
route 什么流量走哪个出站 最后兜底的去向没想清楚,漏网流量走了意料之外的路

这张表也是排错顺序:一条连接失败,先问“进来了吗”(入站),再问“被分派到哪了”(路由),最后问“出去的路通不通”(出站)。DNS 和日志则是贯穿全程的两个帮手。

具体字段名与取值,梯子岛一律以官方文档为准。内核的更新节奏很快,页面上出现的写法可能比你手里的版本新,也可能比它旧。

sing-box 配置文件的骨架长什么样

下面是一份结构示意,只展示各块的位置和嵌套关系,里面的内容是占位,不能直接运行:

{
  "log": { },
  "dns": { },
  "inbounds": [ ],
  "outbounds": [ ],
  "route": { }
}

注意三个形状上的细节:

  • log、dns、route 是对象,用花括号;
  • inbounds、outbounds 是数组,里面可以放多个条目,用方括号;
  • 数组里的每个条目靠 type 说明它是什么类型,靠 tag 给它起个名字,别的地方就是通过这个名字引用它的。

这个 tag 是整份配置里的“连线”。路由说“把这类流量交给某某出站”,写的就是那个出站的 tag;拼错一个字母,这条连线就断了。

动手写一份最小的配置:先让流量进得来、出得去

最小可用的思路是:开一个本机入站接收流量,准备一个出站,再让路由把流量交给它。为了不依赖任何真实节点,我们先用“直连”做出站,验证内核本身能起来:

{
  "log": { "level": "info" },
  "inbounds": [
    {
      "type": "mixed",
      "tag": "in-local",
      "listen": "127.0.0.1",
      "listen_port": 2080
    }
  ],
  "outbounds": [
    { "type": "direct", "tag": "out-direct" }
  ],
  "route": { "final": "out-direct" }
}

这只是示意,用来体会五块之间怎么连。读它的方式是:

  1. 入站监听本机回环地址,意思是只接受本机程序的连接,局域网里的其他设备连不进来;
  2. 出站的类型是直连,不经过任何代理;
  3. 路由的兜底去向指向那个出站的 tag。

字段是否这样拼写、哪些取值可用,请对照你所用版本的文档。示意里的端口号是随手写的,换成你机器上没被占用的即可。

确认这份最小配置能启动之后,再把 out-direct 之外的真实节点一项项加进出站,这样出错时你知道问题出在新加的那一项。

把真实节点加进来:出站里要补哪些信息

节点信息通常来自你的服务提供方,格式可能是分享链接,也可能是现成的 JSON 片段。要把它放进配置,需要弄清三件事:

  • 协议类型:决定出站的 type。你的客户端内核是否支持该协议,可以去梯子岛的协议 × 客户端支持矩阵核对;
  • 服务器与端口:节点的基本寻址信息;
  • 协议专属项:例如认证信息、传输方式、TLS 相关设置,各协议要求不同。

如果手里只有分享链接,不要靠肉眼拆字段。用梯子岛的节点链接解析工具可以先在浏览器本地看清每一段是什么,再对着官方文档填进去。需要把别的格式转过来时,可以试试节点转换工具,但转换结果要当作草稿,逐项复核。

还有一条要记住:已被官方弃用的写法,不要再抄。比如 WireGuard 在较新版本里改用 endpoint 的写法,旧的出站写法已进入弃用;ShadowsocksR 早已从内核里移除。看到老教程用到它们,说明那篇文章可能已经过时。

路由与 DNS:为什么这两块最容易写错

路由块决定“什么流量走哪条路”,通常由若干条规则加一个兜底组成。思考顺序可以这样走:

  1. 先定兜底:没被任何规则命中的流量,默认直连还是默认走代理;
  2. 再加例外:哪些域名、哪些地址段要反着来;
  3. 最后才考虑进阶条件,例如按进程区分。

DNS 块则和路由相互牵连:域名先被解析成什么,往往决定了它会命中哪条规则。所以改了 DNS 之后,要回头把路由复查一遍,反之亦然。两者的细节可以对照梯子岛已有的 Clash DNS 设置一文理解思路,但两边的字段不通用,不要把 YAML 里的写法搬过来。

sing-box 配置在不同端上不完全通用

同一份配置放到不同平台,能用的选项并不一样。官方文档里有一条值得提前知道:苹果设备上的虚拟网卡由系统的网络扩展提供,auto_route、stack 这类桌面端常见的 tun 选项在那里没有实现;按进程名分流也只在 macOS 独立版和越狱的 iOS 版上可用。

所以你在电脑上调好的配置,原封不动导进手机,可能出现“某项设置被忽略”的情况。原则是:用哪个平台,就以那个平台的官方客户端文档为准。各端官方客户端的入口见 sing-box 客户端档案,导入与使用的步骤见 sing-box 客户端使用教程。

改完以后怎么确认没写错

别等到“连不上”才发现问题,按这个顺序检查:

  1. 先查语法:用能做 JSON 校验的编辑器,或者内核自带的配置检查功能,把括号、逗号、引号的错误先清掉;
  2. 再查引用:每个被路由、DNS 引用的 tag,在出站里都要真的存在;
  3. 再看启动日志:把日志详细程度临时调高,看内核是否报字段不认识或被弃用;
  4. 最后验证出口:连上之后,用IP 与 DNS 检测导航里的站点看出口地址是否按预期变化。

改动时养成两个习惯:一次只动一块;动手前先备份一份能用的旧文件。排错的时候,二分法比通读更有效。

手写配置之外,还有哪些省力的路

不是每个人都需要手写 JSON。如果你的目标只是“把订阅导进去用起来”,图形客户端更省心:官方提供了安卓、苹果设备和桌面系统的图形界面,社区里也有把 sing-box 内核封装起来的客户端。选 singbox gui 类工具时,看三件事:它是否仍在维护、你的平台是否有对应版本、它读取的是配置文件还是订阅链接。

想弄清 sing-box 与 Clash 系内核在配置思路上的差别,可以读 sing-box 与 Mihomo 对比。官方文档汇总在官方文档导航,需要下载内核或客户端时,请只走官方渠道,入口集中在 GitHub 项目导航。

下一步怎么走

  • 想先把东西跑起来:读 sing-box 客户端使用教程,用图形客户端导入配置;
  • 想系统学字段:打开官方文档,从你正在用的那个块读起,不必一次读完;
  • 手里是别的格式的节点:先用节点转换工具出草稿,再回到本文的“改完以后怎么确认没写错”逐项复核;
  • 想对比内核取舍:看 sing-box 与 Mihomo 对比。

这篇没有覆盖的

  • 本文讲结构与读法,不提供可直接套用的完整配置,具体字段名与取值以你所用版本的官方文档为准。
  • 梯子岛没有任何节点或线路的测速数据,配置写得对不等于连得快。
  • 只涉及客户端侧的配置,不教服务端搭建。

本文引用的官方来源

  1. sing-box 官方文档(sing-box.sagernet.org)
  2. sing-box 文档(sing-box.sagernet.org)
  3. sing-box 官方仓库(github.com)

以上链接均为官方页面,梯子岛在 2026-10-09 核对过;个别网站会拦截自动化访问,用浏览器直接打开即可。平台规则可能随时调整,以官方页面当前内容为准。

sing-box 配置常见问题

sing-box 配置文件放在哪里,用什么编辑器改?

内核本身只认你指给它的那个 JSON 文件,位置由你启动时指定,所以没有固定路径。编辑器用能做 JSON 语法检查的就行,括号和逗号是新手最常出错的地方。图形客户端则通常把配置存在自己的应用目录里,具体位置看对应客户端的文档。

网上找来的整份配置,直接复制能用吗?

不建议。配置里的字段会随内核版本新增、改名或弃用,别人为旧版本写的整份文件,放到新版本上可能直接报错,也可能悄悄失效。更稳妥的做法是只借鉴思路,字段一项项对照官方文档确认。

我手里是 Clash 的 YAML,能直接给 sing-box 用吗?

不能直接用,两者的格式和字段设计不同。可以借助梯子岛的节点转换工具先看看转出来的结构,再逐项检查。转换结果只是起点,分流规则、策略组这类内容往往要自己对照文档重写。

配置改坏了,怎么知道错在哪一行?

先用内核自带的配置检查功能跑一遍,它会指出语法或字段层面的问题,具体命令以官方文档为准。其次是把改动拆小,每次只动一块,出错时就知道是哪一块惹的祸。保留一份能用的旧配置做备份。

不想手写 JSON,有图形界面可以用吗?

有。官方为安卓、苹果设备和桌面系统都提供了图形客户端,导入配置后可以直接使用,细节见梯子岛的 sing-box 客户端使用教程。也有第三方客户端把内核包装起来,选之前先看它的维护状态。

接着读

文中出现的术语

相关专题

接下来去哪儿?

找官方入口去网址导航,想核对仓库和版本看GitHub 项目导航;需要现成的机场,机场目录收了 28 家的价格与线路资料,性价比机场、便宜机场、VPN 机场分别有专项页。