Sing-box 使用指南

7.1k 词

摘要:sing-box 是由 SagerNet 开发者从零构建的新一代代理平台,采用 JSON 配置格式,支持几乎所有主流代理协议。它既是一个内核,也在逐步发展自己的客户端生态。本文介绍 sing-box 的核心概念、配置结构、使用方法,以及它与 Clash 生态的对比。


sing-box 是什么

sing-box 是一个通用的代理平台。注意这个用词——它不叫”代理工具”或”代理内核”,而是平台。这反映了它的设计野心:做一个统一的、可以支撑各种使用场景的代理基础设施。

sing-box 的核心特点:

  • 从零开发:不是任何现有项目的分叉,完全从头用 Go 语言编写
  • 协议全面:支持 Shadowsocks、VMess、VLESS、Trojan、Hysteria、Hysteria 2、TUIC、WireGuard、Tor 等几乎所有主流协议
  • JSON 配置:使用 JSON 格式编写配置文件(而非 Clash 生态的 YAML)
  • 跨平台:覆盖 Windows、macOS、Linux、iOS(SFI)、Android(SFA)
  • 模块化架构:入站(inbound)、出站(outbound)、路由(route)三层结构清晰分离

项目地址:https://github.com/SagerNet/sing-box
官方文档:https://sing-box.sagernet.org/


配置格式:JSON vs YAML

sing-box 和 Clash 生态最直观的区别就是配置格式。Clash 系使用 YAML,sing-box 使用 JSON。

格式差异示例

Clash(YAML)的写法:

1
2
3
4
5
6
proxies:
- name: "我的节点"
type: vless
server: example.com
port: 443
uuid: xxx-xxx

sing-box(JSON)的写法:

1
2
3
4
5
6
7
8
9
10
11
{
"outbounds": [
{
"tag": "我的节点",
"type": "vless",
"server": "example.com",
"server_port": 443,
"uuid": "xxx-xxx"
}
]
}

JSON 格式的优势是结构严谨、解析无歧义,适合程序生成和处理。缺点是对人类来说可读性不如 YAML,而且不支持注释(虽然 sing-box 的解析器实际上允许注释,但这不是 JSON 标准的一部分)。


配置结构详解

一个完整的 sing-box 配置文件由几个核心模块组成。理解这个结构是使用 sing-box 的基础。

Inbound(入站)

入站定义了 sing-box 如何接收需要代理的流量。常见的入站类型包括:

  • tun:创建虚拟网卡,接管系统所有流量(等同于 Clash 的 TUN 模式)
  • mixed:同时监听 HTTP 和 SOCKS5 代理(等同于 Clash 的混合端口)
  • http:纯 HTTP 代理入站
  • socks:纯 SOCKS5 代理入站
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"inbounds": [
{
"type": "mixed",
"tag": "mixed-in",
"listen": "127.0.0.1",
"listen_port": 7890
},
{
"type": "tun",
"tag": "tun-in",
"auto_route": true,
"strict_route": true,
"stack": "mixed"
}
]
}

Outbound(出站)

出站定义了流量要往哪里发。每个出站对应一个代理节点或特殊处理方式:

  • direct:直连,不走代理
  • block:丢弃流量
  • dns:DNS 查询专用
  • 各种代理协议(vless、vmess、trojan、shadowsocks、hysteria2 等)
  • selector:手动选择组(类似 Clash 的 select 策略组)
  • urltest:自动选择延迟最低的节点(类似 Clash 的 url-test)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
{
"outbounds": [
{
"type": "selector",
"tag": "proxy",
"outbounds": ["auto", "node-hk", "node-jp"],
"default": "auto"
},
{
"type": "urltest",
"tag": "auto",
"outbounds": ["node-hk", "node-jp"],
"interval": "5m"
},
{
"type": "vless",
"tag": "node-hk",
"server": "hk.example.com",
"server_port": 443,
"uuid": "xxx"
},
{
"type": "direct",
"tag": "direct"
},
{
"type": "block",
"tag": "block"
}
]
}

Route(路由)

路由模块决定了哪些流量走哪个出站——这就是分流规则。sing-box 的路由规则采用”从上到下匹配,命中即停止”的逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"route": {
"rules": [
{
"geosite": ["cn"],
"outbound": "direct"
},
{
"geoip": ["cn", "private"],
"outbound": "direct"
},
{
"geosite": ["category-ads-all"],
"outbound": "block"
}
],
"final": "proxy"
}
}

final 字段指定了没有匹配到任何规则时的默认出站——通常设为你的代理策略组。

Rule Set(规则集)

sing-box 1.8 版本引入了 rule set 来替代传统的 GeoIP/GeoSite 数据库。rule set 可以从远程 URL 加载,支持更灵活的规则管理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"route": {
"rule_set": [
{
"type": "remote",
"tag": "geosite-cn",
"format": "binary",
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-cn.srs"
}
],
"rules": [
{
"rule_set": ["geosite-cn"],
"outbound": "direct"
}
]
}
}

DNS 配置

sing-box 的 DNS 配置是一个独立的模块,功能很强大。它支持多种 DNS 协议和分流策略:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"dns": {
"servers": [
{
"tag": "remote-dns",
"address": "https://dns.google/dns-query",
"detour": "proxy"
},
{
"tag": "local-dns",
"address": "https://dns.alidns.com/dns-query",
"detour": "direct"
}
],
"rules": [
{
"geosite": ["cn"],
"server": "local-dns"
}
],
"final": "remote-dns"
}
}

这个配置实现了一个常见的 DNS 分流策略:国内域名用阿里 DNS 解析(走直连),其他域名用 Google DNS 解析(走代理)。这样既保证了国内网站的解析速度,又避免了海外域名被 DNS 污染。


如何配合订阅使用

sing-box 的配置是纯 JSON,不像 Clash 那样有统一的订阅格式标准。实际使用中有几种方式:

方式一:sing-box 格式订阅

部分机场已经开始提供 sing-box 原生格式的订阅链接。这种订阅下载下来就是一个完整的 sing-box JSON 配置文件,直接使用即可。这是最省事的方式。

方式二:通过订阅转换

如果你的机场只提供 Clash 格式订阅,可以使用订阅转换工具(如 subconverter)将 Clash 格式转换为 sing-box 格式。不过转换可能不够完美,复杂的规则可能需要手动调整。

方式三:手动编写配置

对于有技术能力的用户,可以手动编写 sing-box 配置文件。这种方式灵活性最高,但门槛也最高。适合自建节点的用户或需要高度自定义的场景。


使用 sing-box 的 GUI 客户端

对于普通用户,直接使用命令行版本的 sing-box 门槛较高。幸运的是,有多个图形化客户端基于 sing-box 内核开发,大幅降低了使用难度。

桌面端

  • sing-box 官方客户端:sing-box 自身也在开发桌面版的图形界面,支持 macOS 和 Windows,可以直接从 GitHub Releases 下载
  • Clash Nyanpasu:支持切换 mihomo 和 sing-box 内核,提供 Clash 风格的界面

Android

  • SFA(sing-box for Android):sing-box 的官方 Android 客户端,可以从 Google Play 或 GitHub 下载
  • NekoBox for Android:由 MatsuriDayo 开发,支持 sing-box 内核,界面友好

iOS

  • SFI(sing-box for iOS):sing-box 的官方 iOS 客户端,在 App Store 上架(需要非中国区 Apple ID)

命令行使用

对于服务器部署或高级用户,sing-box 的命令行使用很直接:

1
2
3
4
5
6
7
8
9
10
11
# 运行
sing-box run -c config.json

# 检查配置文件是否合法
sing-box check -c config.json

# 格式化配置文件
sing-box format -c config.json

# 查看版本
sing-box version

配置文件默认位置因平台而异:

  • Linux:/etc/sing-box/config.json
  • macOS:~/Library/Application Support/sing-box/config.json
  • Windows:程序所在目录下的 config.json

sing-box 与 mihomo 的比较

这是很多用户关心的问题。两者都是优秀的代理内核,但设计哲学不同。

对比维度 sing-box mihomo(Clash Meta)
配置格式 JSON YAML
设计思路 从零开发,不依赖任何现有项目 Clash 生态的延续和增强
协议支持 基本相同,都覆盖了主流协议 基本相同
规则系统 基于 rule set 的模块化设计 兼容 Clash 规则格式,支持 rule-provider
客户端生态 自有客户端(SFA/SFI)+ 少量第三方 大量 Clash 生态客户端(Verge Rev、Nyanpasu 等)
订阅兼容 自有格式,Clash 格式需要转换 完全兼容 Clash 订阅格式
社区规模 增长中,但相对较小 成熟且庞大的 Clash 社区
学习曲线 较陡——JSON 配置需要理解完整结构 较缓——大量教程和现成配置可参考

该选哪个?

  • 如果你是新手,先用 mihomo(通过 Clash Verge Rev 等客户端),因为生态成熟、教程多、机场支持好。
  • 如果你是高级用户,sing-box 的架构更现代,配置结构更清晰,适合需要深度自定义的场景。
  • 如果你用 iOS,sing-box 的官方客户端 SFI 是一个值得关注的选择。
  • 如果你自建节点,两者都可以作为服务端使用,sing-box 在这方面的文档更完善。

实际上,两个项目的开发者之间也有交流和相互借鉴。它们更像是同一领域的不同设计方案,而非对立的竞争关系。


从 Clash 迁移到 sing-box

如果你现在使用 Clash 生态并考虑尝试 sing-box,需要注意以下变化:

配置概念映射

Clash 概念 sing-box 对应
proxies outbounds
proxy-groups outbounds(selector / urltest 类型)
rules route.rules
rule-providers route.rule_set
dns.nameserver dns.servers
tun.enable inbounds 中添加 tun 类型
mixed-port inbounds 中添加 mixed 类型

主要差异

  1. 没有 proxy-providers 的概念:sing-box 的订阅管理由客户端(如 SFA/SFI)处理,内核本身不负责订阅更新
  2. 规则匹配逻辑略有不同:sing-box 的路由规则在单条 rule 中支持多个条件,这些条件之间是 AND 关系(Clash 中每条规则只有一个条件)
  3. DNS 配置更灵活:sing-box 的 DNS 分流可以基于更多维度,包括出站标签

常见问题

Q: sing-box 适合新手吗?

取决于使用方式。如果通过 SFA / SFI 等图形化客户端配合机场提供的 sing-box 格式订阅使用,上手难度和 Clash 客户端差不多。但如果需要手动编写 JSON 配置,门槛会高不少。

Q: 我的机场不提供 sing-box 格式订阅怎么办?

几个选择:(1)使用订阅转换服务将 Clash 格式转为 sing-box 格式;(2)使用同时支持 Clash 和 sing-box 的客户端(如 Clash Nyanpasu);(3)继续使用 Clash 生态的客户端——没必要强行迁移。

Q: sing-box 比 mihomo 快吗?

在绝大多数使用场景下,两者的性能差异可以忽略不计。代理速度的瓶颈几乎总是在节点本身(服务器带宽、线路质量、延迟),而不是在内核的处理速度上。不要因为”性能更好”这样的说法就盲目切换。

Q: sing-box 是免费的吗?

sing-box 内核完全免费且开源。官方客户端 SFA 和 SFI 也是免费的(SFI 在 App Store 免费下载)。

Q: 配置文件有语法错误怎么排查?

运行 sing-box check -c config.json,它会指出配置文件中的语法错误和位置。JSON 格式最常见的错误是多余的逗号(JSON 不允许末尾逗号)和引号遗漏。


相关资源