sing-box 配置怎么写?从配置文件结构到 DNS、TUN 与分流规则

Sophia
Sophia
IP网络与数据研究员

sing-box 配置文件看起来复杂,真正需要先搞清的其实只有几块:DNS 怎么解析、TUN 怎么接管流量、Outbound 怎么定义出口、Route 怎么分流、Rule Set 怎么维护规则。截至 2026 年 9 月,sing-box 当前稳定版已经进入 1.14 系列,旧教程里常见的 FakeIP、旧式 DNS Server、inbound 中的 sniff 字段等写法已经发生明显变化。

这版内容按 sing-box 1.14.1 稳定版重新核对,重点解决“配置文件现在应该怎么读、旧配置为什么报错、DNS/TUN/分流规则应该放在哪里”这几个问题。示例用于理解结构和字段关系,实际节点参数、证书、域名和规则集地址仍应按你的环境填写。

版本提醒:本文按 sing-box 1.14.1 稳定版整理。旧教程中的 FakeIP、legacy DNS Server、inbound sniff 和 download_detour 等写法已经发生变化,旧配置请参考文末“1.14 迁移”章节。

30 秒先看懂:sing-box 配置文件骨架

sing-box 使用 JSON 作为配置格式。当前官方配置结构可以先简化理解为下面几部分:

{
  "$schema": "https://sing-box.sagernet.org/schema.json",
  "log": {},
  "dns": {},
  "http_clients": [],
  "inbounds": [],
  "outbounds": [],
  "route": {},
  "experimental": {}
}

完整配置可以先按这些模块理解;实际修改后,建议再用 sing-box check 检查配置是否合法。

一、sing-box LOG 日志配置:日志级别与排错

日志模块负责记录 sing-box 的运行状态。日常使用可以先从 info 级别开始,遇到连接、DNS 或规则匹配问题时,再临时提高日志详细度,而不是长期把调试日志全部打开。

"log": {
  "level": "info",
  "timestamp": true
}

排错时重点看三类信息:节点是否成功建立连接、DNS 请求走到了哪个服务器、Route 规则最终把连接送到了哪个 Outbound。日志越详细并不等于配置越好,定位完问题后可以恢复到正常级别。

二、sing-box DNS 配置:新版解析与分流怎么写

1.14 最重要的变化之一就是 DNS。旧教程常见的 "address": "https://..."、FakeIP Server 等写法已经不适合作为当前模板。新版 DNS Server 需要明确类型,例如 local、https、tls。

"dns": {
  "servers": [
    {
      "type": "local",
      "tag": "local"
    },
    {
      "type": "https",
      "tag": "remote",
      "server": "1.1.1.1",
      "path": "/dns-query",
      "detour": "proxy"
    }
  ],
  "rules": [
    {
      "rule_set": "geosite-cn",
      "action": "route",
      "server": "local"
    }
  ],
  "final": "remote"
}

注意:这是 DNS 模块示例,不是完整可运行配置;其中 proxy 和 geosite-cn 等 tag 需要在 Outbound / Rule Set 中预先定义。

sing-box 1.14 DNS 新版配置示例,展示 local 与 HTTPS DNS Server
新版 DNS Server 需要显式声明 type

Local DNS:处理本地或指定规则集

type: "local" 使用当前系统或平台提供的本地解析能力。你可以通过 DNS rules 把指定域名或规则集交给 local,而不是把所有请求都固定走同一套 DNS。

Remote DNS:用 HTTPS / TLS 明确上游

如果使用 DoH,可以设置 type: "https"。当 DNS 请求需要经过指定代理出口时,可以使用 Dial Fields 中的 detour。如果 server 使用域名,还需要同时考虑 domain_resolver。

FakeIP 为什么删掉?

FakeIP 旧配置从 1.12 开始废弃,并在 1.14 正式移除。因此这篇不再把 FakeIP 当成当前分流核心,也不再使用 198.18.0.0/15 作为新版 Route 示例。当前配置重点放在 DNS rules、Route rules、Rule Set 和 TUN 自身的 DNS 处理能力上。

三、sing-box TUN 配置:入站、自动路由与权限

TUN 可以理解为系统级虚拟网络接口。开启后,系统流量进入 TUN,再由 sing-box 按 Route 规则决定直连、代理或拒绝。1.14 的 TUN 还增加了 dns_mode 等 DNS 处理能力。

"inbounds": [
  {
    "type": "tun",
    "tag": "tun-in",
    "address": [
      "172.19.0.1/30"
    ],
    "auto_route": true,
    "strict_route": true,
    "dns_mode": "hijack"
  }
]

注意:这是 TUN 模块示例,需要和 Route、DNS、Outbound 一起组成完整配置;不同系统的权限、接口和路由环境也会影响最终行为。

sing-box 1.14 TUN 入站配置示例,展示 address、auto_route、strict_route 和 dns_mode
TUN 1.14 可通过 dns_mode 控制接口 DNS 处理方式

auto_route 会设置到 TUN 的默认路由;strict_route 会进一步强制严格路由。在 Windows 上,它还会影响多宿主 DNS 行为;在 Linux 等平台上则需要结合当前路由、接口和权限环境判断。

还要注意一个实际配置问题:开启 auto_route 后,应根据运行环境设置 route.auto_detect_interface、route.default_interface 或 outbound.bind_interface 之一,避免代理出站再次被 TUN 捕获形成流量环回。

不要再把旧配置中的 sniff、sniff_override_destination 塞进入站。嗅探现在应该放到 Route Rule,通过 action: "sniff" 执行。

四、sing-box Outbound 配置:节点与 urltest 自动切换

Outbound 定义真正的出口。可以是 direct、VLESS、Shadowsocks、Hysteria2 等,也可以用 urltest 把多个节点放进自动测速组。

{
  "type": "urltest",
  "tag": "proxy",
  "outbounds": [
    "node-a",
    "node-b"
  ],
  "url": "https://www.gstatic.com/generate_204",
  "interval": "3m",
  "tolerance": 50,
  "idle_timeout": "30m",
  "interrupt_exist_connections": false
}

注意:这是 urltest 模块示例;node-a、node-b 必须先在 outbounds 中定义,测试地址和间隔也应按实际网络调整。

sing-box urltest 出站配置示例,展示多节点测速与自动选择参数
urltest 仍是当前有效的自动测试出站

tolerance 用来避免延迟差很小时频繁切换;idle_timeout 控制空闲多久后暂停周期测试;interrupt_exist_connections 决定切换选中出站时是否中断已有入站连接。这里不再写成“切换一定无感”——实际体验还会受到协议、已有连接和应用行为影响。

VLESS / Reality 节点怎么放?

具体节点仍放在 outbounds 里,再让 urltest 引用这些 tag。Reality 的 server name、公钥、short ID、UUID 等必须和服务端一致。文章不再提供固定“伪装域名”模板,避免用户直接复制与自己服务端不匹配的参数。

HTTP / SOCKS5 代理怎么作为 Outbound?

如果上游提供的是普通 HTTP 或 SOCKS5 代理,也可以直接作为 sing-box Outbound。官方当前同时支持 HTTP Outbound 和 SOCKS Outbound。如果供应商给的是服务器地址、端口、用户名和密码,可以映射到对应字段。

"outbounds": [
  {
    "type": "http",
    "tag": "http-proxy",
    "server": "proxy.example.com",
    "server_port": 8080,
    "username": "your-username",
    "password": "your-password"
  },
  {
    "type": "socks",
    "tag": "socks5-proxy",
    "server": "proxy.example.com",
    "server_port": 1080,
    "version": "5",
    "username": "your-username",
    "password": "your-password"
  }
]

注意:这是 Outbound 结构示例,proxy.example.com、端口和认证信息都要替换成实际代理参数;SOCKS 的 network、UDP 等能力还要按供应商和使用场景确认。

这样后面的 Route 就可以直接把特定流量送到 http-proxy 或 socks5-proxy。如果你接入的是住宅代理,最终是否能用 HTTP / SOCKS5、认证方式和可用端口,应以代理服务商实际提供的参数为准。

五、sing-box 分流规则:Route、DNS 劫持与流量匹配

Route 决定流量最终走向。当前配置的重点不是旧版 sniff_override_destination,而是把“嗅探、DNS 劫持、路由、拒绝”都明确写成规则动作。

"route": {
  "rules": [
    {
      "action": "sniff"
    },
    {
      "rule_set": "geosite-cn",
      "action": "route",
      "outbound": "direct"
    },
    {
      "rule_set": "geosite-global",
      "action": "route",
      "outbound": "proxy"
    }
  ],
  "final": "proxy"
}

注意:这是 Route 模块示例,不是完整可运行配置;其中 geosite-cn、geosite-global、direct、proxy 等 tag 需要在对应 Rule Set / Outbound 中定义。

sing-box Route Rule 设置示例,展示 sniff、规则集匹配与流量去向配置
Route Rule 示例;显式 hijack-dns 是否需要取决于 TUN DNS 配置

流量嗅探:action: sniff

action: "sniff" 是非最终动作,用于识别 DNS、TLS、HTTP、QUIC 等协议相关信息,再交给后续规则继续判断。它替代的是旧 inbound 里的 sniff 字段,不要把两种写法混在同一份新版配置里。

什么时候需要显式 action: hijack-dns?

如果 TUN 已使用 dns_mode: "hijack",且没有显式设置 dns_address,sing-box 会自动把派生出的 DNS 地址流量交给 DNS 模块,效果等价于 action: "hijack-dns"。因此基础 TUN 配置里不需要再机械重复一条 hijack-dns。只有在显式设置 dns_address 后仍需要相同劫持行为,或你的接入方式没有依赖这套 TUN 自动劫持时,再单独写显式 Route Action。

分流:Rule Set + route

规则集命中后,用 action: "route" 和目标 outbound 指定直连或代理。相比在正文里维护一长串站点名称,这种方式更容易长期维护。

QUIC 要不要屏蔽?

不建议把“拒绝 UDP 443”写成所有用户都应该照搬的固定规则。它确实可以让部分 HTTP/3 流量回退到 TCP,但是否需要取决于代理协议、UDP 支持和实际网络。只有已经确认 QUIC 导致特定兼容问题时,再针对性增加 reject 规则。

六、sing-box Rule Set:远程规则集怎么配置

官方名称是 Rule Set,不是 RAWSET。远程规则集可以使用 source 或 binary 格式;如果使用 .srs,通常对应 binary 规则集。开启 cache_file 后,远程 Rule Set 也可以被缓存。

1.14 需要特别注意:旧的 download_detour 已废弃,官方 Rule Set 文档推荐改用 http_client。同时,官方也开始要求更明确地定义用于下载远程资源的 HTTP Client,避免继续依赖旧的隐式默认行为。

"route": {
  "rule_set": [
    {
      "type": "remote",
      "tag": "geosite-cn",
      "format": "binary",
      "url": "https://example.com/geosite-cn.srs",
      "http_client": {
        "detour": "proxy"
      },
      "update_interval": "1d"
    }
  ]
}

注意:这是 Rule Set 下载结构示例;proxy 必须是已定义的 Outbound,example.com 需要替换成真实可信的规则集地址。

示例 URL 使用 example.com 只是为了展示结构。这里使用 inline http_client 指定下载走 proxy;规则集较多时,也可以在顶层集中定义 http_clients,再通过 route.default_http_client 复用。真正上线时应替换成你实际维护或确认可信的 Rule Set 来源。

七、cache_file 与实验性功能怎么配置

experimental.cache_file 仍然是当前可用功能。它可以保存部分运行数据和远程规则集缓存;从 1.14 起还增加了 store_dns,用于把 DNS 缓存持久化到缓存文件。

"experimental": {
  "cache_file": {
    "enabled": true,
    "path": "cache.db",
    "store_dns": true
  }
}

注意:这是 cache_file 模块示例;缓存路径和是否持久化 DNS 应按运行环境设置。

旧配置中的 store_rdrc 已在 1.14 废弃,官方迁移方向是使用 store_dns。缓存可以减少重复下载和部分重复解析,但不能把它理解成“开启后一定更稳定”;缓存内容是否有效仍取决于当前配置、规则集和网络状态。

八、旧版 sing-box 配置迁移到 1.14 要改什么

如果你手里还是 1.11、1.12 或更早教程里的配置,不建议直接复制到 1.14 后逐个修报错。更快的顺序是先检查下面几项:

  1. 删 FakeIP:1.14 已移除。
  2. 重写 DNS Server:旧的 address 形式迁移到 type: local / https / tls 等新版结构。
  3. 迁移 sniff:从 inbound 字段迁移到 Route Rule 的 action: sniff。
  4. 迁移 DNS 劫持:按当前 TUN dns_mode 或 action: hijack-dns 处理。
  5. 改 Rule Set 下载方式:download_detour 改成 http_client。
  6. 更新缓存字段:需要持久化 DNS 时使用 store_dns,不再继续依赖 store_rdrc。

改完以后先运行 sing-box check。如果仍然报错,再根据错误路径回到对应模块排查,不要一开始就把 DNS、Route、TUN 和 Outbound 同时全部改动。

先运行 sing-box check 检查配置合法性;如果报错,再根据错误路径定位到 DNS、Inbound、Outbound、Route 或 Rule Set 对应模块。格式混乱时可以先用 sing-box format 整理配置。

九、sing-box 1.14 配置常见问题

sing-box 1.14 为什么旧配置会报错?

因为 1.14 已移除或调整了一批旧字段和机制,例如 FakeIP、legacy DNS Server,以及旧 inbound sniff 写法。升级时应先按模块迁移,而不是直接把旧 JSON 原样复制到新核心。

sing-box 1.14 还能使用 FakeIP 吗?

不能继续按旧教程使用。FakeIP 从 1.12 开始废弃,并在 1.14 正式移除。当前配置应改用新版 DNS、Route Rule、Rule Set 和 TUN 的 DNS 处理能力。

dns_mode: hijack 和 hijack-dns 要同时配置吗?

通常不需要。TUN 使用 dns_mode: hijack 且未显式设置 dns_address 时,会自动完成对应 DNS 劫持;如果显式设置 dns_address 后仍需要相同行为,再增加 hijack-dns Route Action。

sing-box 配置修改后怎么检查是否正确?

先运行 sing-box check 检查配置合法性;如果报错,再根据错误路径定位到 DNS、Inbound、Outbound、Route 或 Rule Set 对应模块。格式混乱时可以先用 sing-box format 整理配置。

结语:先确认版本,再谈“配置能不能直接用”

sing-box 配置真正容易出问题的地方,往往不是 JSON 本身,而是拿旧版本字段套到当前核心。1.14 已经把 FakeIP、旧 DNS Server 和部分旧入站字段清理掉,同时把 DNS、Route Action、Rule Set 和 TUN 的职责划得更清楚。

如果只是想在 Android 上选择 sing-box 客户端,可以继续看 安卓与 iPhone 手机代理软件对比;如果已经进入配置阶段,这篇可以作为 1.14 的结构参考,再结合官方文档和自己的节点参数完成最终配置。

sing-box 只负责客户端侧的接入、解析和路由,最终出口质量仍取决于实际代理资源。如果你的配置需要接入住宅代理,可根据场景查看 IPWeb 的 动态住宅代理 或 静态住宅代理,再按客户端支持的协议完成接入。

Sophia
Sophia
IP网络与数据研究员

Sophia 拥有 8+ 年 IP 代理与数据采集相关经验,长期关注 IP 信誉数据、网络连通性与异常流量判定,并将检测流程做成可批量、可记录、可复盘的工程化方案。

服务领域
全球 IP 资源与配置 数据采集与自动化工程 网络隐私与风控研究

你可能感兴趣

团队使用代理IP怎么分账号?项目分账、流量限额与凭证交接指南

团队使用代理IP怎么分账号?项目分账、流量限额与凭证交接指南

团队使用代理 IP 时,不要让所有员工、项目和自动化任务长期共用一套主凭证。更容易管理的做法是按照项目和运行环境分配代理子账号,记录每个账号的负责人、使用位置和流量上限;项目结束或人员变动时,只停用对...

Nate

Nate

IPWeb 技术研究员

代理成功率怎么测?为什么 HTTP 200 不等于有效数据

代理成功率怎么测?为什么 HTTP 200 不等于有效数据

爬虫日志全部显示 HTTP 200,代理控制台里的请求成功率也很漂亮,交付数据时却发现:商品价格为空、搜索结果属于错误国家、详情页被替换成登录页,或者几十万个响应里混入了大量重复记录。 这不是少见的边...

Nate

Nate

IPWeb 技术研究员

GPT号池搭建封面图,展示多个OpenAI API Key通过网关进行智能路由、负载均衡和日志监控。

GPT号池搭建指南:从OpenAI Key池到One API、New API部署

单 Key 最常见的翻车不是「模型不够聪明」,而是限额与故障域绑在一把钥匙上:一挂全站无响应。GPT 号池(也常叫 OpenAI 号池、API 号池)把上游凭证变成可调度渠道。下面只谈怎么搭、怎么验、...

Winston

Winston

IP 代理技术总监

准备好开始使用了吗?

严格反滥用

禁止欺诈、自动化操作及违规用途

企业级服务

仅面向合法商业与技术使用场景

风控与限制

异常行为可触发限制或终止服务

合规数据使用

数据获取与使用需符合相关法规

隐私保护优先

严禁采集或滥用个人敏感信息

所有服务均需遵守《使用政策》