sing-box WIKI · 知识

sing-box 配置文件结构入门:入站、出站、路由与 DNS 详解

sing-box 配置文件入门:用表格和示例说明 JSON 配置中 log、dns、inbounds、outbounds、route 各部分分别负责什么,入站和出站如何配合,路由规则如何决定流量走向,并给出一份只演示结构的简短示例,帮助你读懂机场下发的 sing-box 配置、定位报错字段。

发布于 最后更新 3 分钟阅读

简要回答 sing-box 配置是一个 JSON 对象,核心由四部分组成:inbounds 决定流量从哪里进来,outbounds 决定流量从哪里出去,route 按规则把入站流量分配给出站,dns 负责域名解析。读懂这四块,就能看懂大多数机场下发的配置,具体字段以官方文档为准。

sing-box 配置文件中入站、路由、出站与 DNS 四个模块关系的结构示意图
文章目录 8 节
  1. 顶层结构一览
  2. inbounds:流量从哪里进来
  3. outbounds:流量从哪里出去
  4. route:规则决定走向
  5. dns:解析也要分流
  6. 结构示例
  7. 报错时怎么对照结构定位
  8. 常见问题

sing-box 的配置文件是一个 JSON 对象,最核心的是四个部分:**inbounds(入站)**负责接收流量,**outbounds(出站)**负责把流量发出去,**route(路由)**决定每条连接交给哪个出站,dns 负责域名解析。理解“入站 → 路由 → 出站”这条主线,再加上 DNS,就能读懂绝大多数配置。以下内容只讲结构和概念,具体字段请以 sing-box 官方文档为准。

顶层结构一览

字段 作用 新手是否需要关注
log 日志级别与输出方式 排错时调高级别即可
dns DNS 服务器与解析规则 需要,影响分流和泄漏
inbounds 本地监听方式,如 TUN、mixed 端口 需要了解
outbounds 节点、直连、选择器等出口 需要了解
route 分流规则与默认出口 需要了解
experimental 缓存、外部面板等实验性功能 一般不用改

inbounds:流量从哪里进来

入站定义 sing-box 以什么方式接收流量,常见类型有:

  • tun:创建虚拟网卡,接管设备上几乎所有流量,手机客户端和电脑 TUN 模式都依赖它。
  • mixed:在本地开一个同时支持 HTTP 与 SOCKS 的端口,浏览器或终端可以手动指向它。

在手机图形客户端里,TUN 入站通常由应用配合系统 VPN 接口完成,TUN 的原理可以参考 Clash Verge TUN 模式说明,概念是相通的。

outbounds:流量从哪里出去

出站就是“出口”。机场节点本身就是出站,此外还有几类特殊出站:

  • direct:直连,不经过代理。
  • selector:手动选择器,把多个节点组合在一起,由你在界面上切换。
  • urltest:自动测速选择,按延迟挑选节点。
  • 各协议节点:如 vless、trojan、hysteria2、shadowsocks 等,协议差异见 Hysteria2、VLESS 与 Trojan 对比。

每个出站都有唯一的 tag,其他部分通过 tag 引用它。

route:规则决定走向

路由由一组 rules 和一个 final 组成。连接进来后,sing-box 自上而下匹配规则,命中就交给规则指定的出站;都没命中则交给 final。规则可以按域名、IP、进程、规则集等条件匹配。

dns:解析也要分流

DNS 部分定义可用的 DNS 服务器以及“哪些域名用哪个服务器解析”。配置不当会出现国内网站变慢、DNS 泄漏或分流失效。常见思路是国内域名用国内 DNS,其他域名通过代理解析,部分配置还会启用 Fake-IP。原理和排查见 DNS 问题解决指南 与 Fake-IP 和 Redir-Host 的区别。

结构示例

下面是一份只用于演示层级关系的精简示例,节点信息为占位内容,不能直接使用。不同版本的字段写法可能有调整,请以官方文档为准。

{
  "log": { "level": "info" },
  "dns": { "servers": [], "rules": [] },
  "inbounds": [
    { "type": "tun", "tag": "tun-in", "address": ["172.19.0.1/30"], "auto_route": true }
  ],
  "outbounds": [
    { "type": "selector", "tag": "proxy", "outbounds": ["node-a", "direct"] },
    { "type": "vless", "tag": "node-a", "server": "example.com", "server_port": 443, "uuid": "your-uuid" },
    { "type": "direct", "tag": "direct" }
  ],
  "route": {
    "rules": [{ "ip_is_private": true, "outbound": "direct" }],
    "final": "proxy",
    "auto_detect_interface": true
  }
}

读这份示例时可以沿着一条连接走一遍:流量经 tun-in 进入,route 检查是否为局域网地址,是则走 direct,否则交给 final 指定的 proxy 选择器,最终由你选中的 node-a 发出。

报错时怎么对照结构定位

sing-box 启动失败时,日志通常会指出出错的位置,可以按下面的思路对照:

  1. 提示某个字段未知或已弃用:多半是配置写法与当前内核版本不匹配,先更新订阅,再对照官方文档的迁移说明。
  2. 提示找不到某个 tag:路由规则、选择器或 DNS 引用了不存在的出站名称,检查拼写是否一致。
  3. 提示端口被占用:mixed 等入站监听的端口被其他程序占用,换一个端口或关闭冲突程序。
  4. 能启动但部分网站打不开:问题更可能在 route 或 dns,先检查规则顺序和 DNS 服务器是否可达。

想直接上手客户端,可以看 sing-box Android 教程 或 sing-box 专题。

编辑推荐 · 综合第 1

二猫云
  • 三网优化 IEPL专线+中转+直连
  • ¥20/月起 · 130GB/月
  • 设备不限 · 运营2年+(2024年4月成立)
  • AI:ChatGPT、Claude、Claude Code、Codex、Gemini

常见问题

sing-box 配置文件必须自己写吗?

不需要。大多数用户直接导入机场提供的 sing-box 订阅即可,了解结构主要是为了看懂报错、做少量自定义,比如增加直连规则。

为什么同一份配置换了版本就报错?

sing-box 更新较快,部分字段会被调整或弃用。遇到启动失败时先看日志中提示的字段名,再对照官方文档的迁移说明修改,或者让机场更新订阅。

tag 有什么用?

tag 是每个入站、出站的名字。路由规则、选择器和 DNS 设置都通过 tag 引用对应的对象,名字写错就会找不到目标。