sing-box 配置文件详解:inbounds、outbounds、route 与 dns 怎么改
sing-box JSON 配置进阶教程:逐段解释 log、dns、inbounds、outbounds、route、experimental 的作用,演示在机场订阅基础上添加自定义规则与策略组、修改 DNS、开启 Clash API 面板,以及配置校验与常见报错处理。
文章目录
sing-box 用 JSON 而不是 YAML,结构更严格也更清晰。理解五个顶层段落后,机场订阅里的配置就能看懂、改对。基础使用见 sing-box 教程。
配置的五个段落
{
"log": {},
"dns": {},
"inbounds": [],
"outbounds": [],
"route": {}
}
| 段落 | 作用 | 对应 Clash 概念 |
|---|---|---|
| inbounds | 本机如何接入(TUN、mixed 端口) | 端口与 TUN 设置 |
| outbounds | 节点与策略组 | proxies + proxy-groups |
| route | 分流规则 | rules |
| dns | DNS 服务器与分流 | dns |
| experimental | Clash API 等附加功能 | external-controller |
inbounds:流量从哪进来
"inbounds": [
{ "type": "tun", "tag": "tun-in", "address": ["172.19.0.1/30"], "auto_route": true, "strict_route": true },
{ "type": "mixed", "tag": "mixed-in", "listen": "127.0.0.1", "listen_port": 2080 }
]
tun:接管全部流量,需要管理员权限;mixed:同时提供 HTTP 与 SOCKS 代理端口,供终端、浏览器手动使用。
TUN 的原理见什么是 TUN 模式与系统代理。
outbounds:节点与策略组
"outbounds": [
{ "type": "selector", "tag": "自动选择", "outbounds": ["urltest", "香港 01", "日本 01"] },
{ "type": "urltest", "tag": "urltest", "outbounds": ["香港 01", "日本 01"], "url": "https://www.gstatic.com/generate_204" },
{ "type": "vless", "tag": "香港 01", "server": "...", "server_port": 443 },
{ "type": "direct", "tag": "direct" },
{ "type": "block", "tag": "block" }
]
selector:手动选择组;urltest:自动测速组;- 各协议类型(vless、shadowsocks、trojan、hysteria2)是具体节点;
direct与block是直连与拒绝。
策略组概念见什么是策略组与规则分流。
route:规则分流
"route": {
"rules": [
{ "domain_suffix": ["openai.com", "anthropic.com"], "outbound": "AI 专用" },
{ "rule_set": ["geosite-cn"], "outbound": "direct" },
{ "ip_is_private": true, "outbound": "direct" }
],
"rule_set": [
{ "tag": "geosite-cn", "type": "remote", "format": "binary", "url": "..." }
],
"final": "自动选择",
"auto_detect_interface": true
}
规则自上而下匹配,final 是兜底。新版 sing-box 用 rule_set 替代旧的 geosite / geoip 字段。
dns:解析分流
"dns": {
"servers": [
{ "tag": "remote", "address": "https://dns.google/dns-query", "detour": "自动选择" },
{ "tag": "local", "address": "223.5.5.5", "detour": "direct" }
],
"rules": [
{ "rule_set": ["geosite-cn"], "server": "local" }
],
"final": "remote"
}
国内域名用国内 DNS 直连解析,其他走代理用 DoH。DNS 泄露与污染见什么是 DNS 污染与 DNS 泄露。
experimental:开启面板
"experimental": {
"clash_api": { "external_controller": "127.0.0.1:9090", "external_ui": "ui" }
}
开启后可用任意 Clash 面板切换节点、查看连接,命令行环境尤其有用,见 Linux 梯子教程。
在订阅基础上自定义
订阅会被覆盖,三种保留改动的方法:
- 图形客户端的「合并 / 覆写」功能(如 Hiddify、部分 sing-box 客户端版本);
- 本地写一份配置,节点部分通过订阅转换生成后粘贴;
- 用机场的订阅转换自定义规则,见什么是订阅转换。
校验与常见报错
sing-box check -c config.json
unknown field:字段名错误或版本不支持,核对文档与客户端版本;outbound not found:规则引用了不存在的 tag;rule_set下载失败:网络未通,先用直连下载或改为本地文件;- JSON 语法错误:多了逗号或少了引号,用编辑器的 JSON 校验。
相关内容
常见问题
改了订阅下载的配置,更新后会被覆盖吗?
会。远程配置每次更新都会覆盖本地改动。要么把修改做成本地配置并引用远程节点,要么使用客户端的「合并」功能(部分图形客户端支持),要么在机场提供的订阅转换中自定义规则。