← 返回 acaisbest.shop 本地视觉备份 首页

sing-box DNS 配置教程:可复制 JSON、分流规则与 TUN 排查

更新于 2026-10-27 · acaisbest.shop

简答:先用一个 DNS Server 加 final 验证基础解析,再按场景加入 DoH、域名规则和 TUN。配置失败时依次检查 server tag、规则顺序、DNS 出口、route.auto_detect_interface,以及 TUN 是否重复劫持 53 端口。

定义:sing-box DNS 是由 DNS Server、DNS Rule、final、strategy 和路由出口共同组成的解析模块,用来决定查询匹配什么规则、交给哪个 DNS 服务器以及通过哪条连接路径发出。

三步速查:先复制最小配置,再逐层启用功能

本文是 acaisbest.shop 的第三方使用指南,不代表 sing-box 官方。配置字段以当前核心版本和客户端封装为准;截至 2026-10-27,官方文档将新式 DNS Server 结构定义为带有 type 与 tag 的服务器对象。

sing-box DNS 三步决策卡
步骤先做什么通过标准
1. 基础解析只保留一个 local 或 HTTPS DNS Server,并让 final 指向它配置能载入,普通域名可以解析
2. 加入分流每次只加入一条 domain_suffix 规则,检查 action 与 server tag目标域名命中预期 DNS Server
3. 开启 TUN再检查 dns_mode、auto_route 和默认网卡绑定TUN 开关前后均能解析,日志没有 timeout 或 loop

最小可验证配置如下。它包含日志、DNS 和 direct 出口,适合先验证 JSON 结构与本地解析;它不是带 TUN、订阅或代理节点的完整上网配置。

{"log":{"level":"info"},"dns":{"servers":[{"type":"local","tag":"local"}],"final":"local","strategy":"prefer_ipv4"},"inbounds":[],"outbounds":[{"type":"direct","tag":"direct"}]}

官方 DNS 配置说明中,final 是默认 DNS Server tag;如果为空,官方文档说明会使用 servers 中的第一个服务器。基础结构可核对sing-box DNS 官方文档。

配置链路:DNS Server、Rule、route、detour 和 outbound 如何串起来

可以把一次查询拆成五个环节:应用发起域名查询 → sing-box 的 DNS Rule 检查条件 → DNS Rule Action 决定使用哪个 server → DNS Server 选择 UDP、TLS、HTTPS 或 local 等解析方式 → Dial Fields、detour 或默认出口建立连接。解析结果返回后,route 再决定应用的实际流量交给哪个 outbound。

字段与请求路径对照
对象作用常见误区
dns.servers定义可用 DNS 服务器及 tag把服务器地址写成旧版 Legacy 格式,或引用不存在的 tag
dns.rules按域名、网络、查询类型等条件匹配请求规则顺序过宽,前一条规则先结束匹配
action: route将命中的查询交给指定 server只写匹配条件,不写 action
detour 或 Dial Fields决定 DNS Server 连接如何拨出误以为 DNS server tag 就等于代理 outbound
route决定普通流量、DNS 劫持和默认网卡路径只改 DNS,不处理 TUN 下的路由回环
outbound实际承载 direct、代理或 block 等连接把已废弃的 DNS outbound 当成新配置的必需项

DNS Rule Action 官方页面把 route、server、timeout、缓存和客户端子网等处理字段单独列出;应优先按DNS Rule Action 官方文档核对,而不是沿用旧教程中的字段位置。

需要区分两条路径:DNS 查询路径决定“域名如何解析”,普通流量路径决定“应用连接解析出的 IP 时走哪个 outbound”。DNS Server 的连接可以使用独立的 Dial Fields;它不代表普通应用流量自动改走同一个 outbound。

三份可复制配置:本地解析、DoH 与域名分流

场景一:本地系统或局域网解析

适合先验证系统 DNS、局域网域名或公司内网解析。新式 local Server 使用 type 和 tag;官方说明当前新式 local 能处理所有查询类型,但 Android 图形客户端仍会通过平台接口获取上游 DNS,macOS 也存在平台网络扩展相关行为,因此跨平台结果要以客户端实际核心为准。可核对Local DNS Server 官方文档。

{"log":{"level":"info"},"dns":{"servers":[{"type":"local","tag":"local","prefer_go":false}],"final":"local","strategy":"prefer_ipv4"},"inbounds":[],"outbounds":[{"type":"direct","tag":"direct"}]}

prefer_go 不要默认打开。官方说明它会改变 local DNS 尽可能自行拨号解析的行为;Android 图形客户端和 macOS 网络扩展存在例外或平台限制。只有在确认当前平台需要该行为时再改动。

场景二:使用 HTTPS DNS

下面示例使用 Cloudflare 官方公开的 DoH 地址,仅用于演示新式 HTTPS Server 结构。Cloudflare 官方资料给出的 DoH 端点为 https://cloudflare-dns.com/dns-query;sing-box 的 HTTPS Server 结构要求填写 server,路径默认为 /dns-query,使用域名时还要解决 DNS Server 自身的域名解析问题。相关字段见sing-box HTTPS DNS Server 文档,端点见Cloudflare DoH 官方说明。

{"log":{"level":"info"},"dns":{"servers":[{"type":"https","tag":"cloudflare","server":"cloudflare-dns.com","server_port":443,"path":"/dns-query"}],"final":"cloudflare","strategy":"prefer_ipv4"},"inbounds":[],"outbounds":[{"type":"direct","tag":"direct"}]}

这是结构完整的 DNS 测试配置,但是否能直接启动还取决于当前核心对 HTTPS Server 域名解析的默认处理和客户端封装。若日志提示无法解析 cloudflare-dns.com,先改用 local 作为引导解析,或按当前版本的 Dial Fields 配置 domain_resolver,不要把错误归因于 DoH 本身。

场景三:局域网后缀走 local,其余查询走 HTTPS

下面配置用于演示域名后缀分流。lan 只是局域网后缀示例;如果你的网络使用 home.arpa、公司内部后缀或其他实际域名,应替换为真实后缀。Cloudflare DoH 端点由上面的官方资料支持。

{"log":{"level":"info"},"dns":{"servers":[{"type":"local","tag":"local"},{"type":"https","tag":"cloudflare","server":"cloudflare-dns.com","server_port":443,"path":"/dns-query"}],"rules":[{"domain_suffix":["lan"],"action":"route","server":"local"}],"final":"cloudflare","strategy":"prefer_ipv4"},"inbounds":[],"outbounds":[{"type":"direct","tag":"direct"}]}

  1. 先把 lan 替换成你实际使用的内网后缀。
  2. 确认 local 和 cloudflare 两个 tag 都存在。
  3. 确认 action 为 route,且 server 指向正确 tag。
  4. 先测试一个局域网域名,再测试一个普通公网域名。
  5. 如果公网域名超时,临时把 final 改为 local,判断问题来自 DoH 连接还是规则。

UDP、TCP、TLS、HTTPS、QUIC、HTTP/3 怎么选

DNS 传输方式选择表
类型优先考虑的场景隐私与兼容性判断配置重点
udp局域网或基础连通性测试传统明文 DNS,部署简单,但查询内容未加密服务器地址、端口和出口路径
tcpUDP 不稳定或需要 TCP DNS仍不是加密传输,兼容性通常较好服务器地址、端口和连接超时
tls需要加密 DNS 且服务支持 DoTTLS 加密,通常使用 853 端口;要核对证书与服务器名称服务器、端口、TLS 配置和域名校验
https需要将 DNS 放入 HTTPS 请求通过 HTTPS 加密,通常走 443;还要处理 HTTPS Server 自身的域名解析server、path、TLS 与 domain resolver
quic服务端明确提供 QUIC DNS加密并基于 QUIC,但中间网络和客户端支持需单独确认服务端地址、端口、TLS 和出口
h3服务端明确提供 HTTP/3 DoH使用 HTTP/3;不要因为 HTTPS 可用就推断 H3 一定可用HTTP/3 服务端、TLS、端口和域名解析

不要把“加密”直接等同于“更快”。UDP、TCP、TLS、HTTPS、QUIC 和 HTTP/3 的实际延迟取决于本地网络、解析器位置、连接复用、路由和客户端实现。选择顺序建议是:先选当前网络能稳定连通的类型,再确认是否需要加密,最后才比较 HTTPS、QUIC 或 HTTP/3 的链路表现。

Cloudflare 官方说明 DoH 使用 HTTPS 请求加密 DNS,DoT 使用 TLS 加密 DNS;Google 官方资料也将传统 UDP/TCP 与 DoH、DoT 分开说明。协议定义和服务端支持不能仅凭客户端字段名称推断,应以对应服务的官方参数为准:Cloudflare DoH 说明、Cloudflare DoT 说明、Google Secure Transports 说明。

TUN 下 DNS loop 与泄漏排查:先分清 DNS 劫持和普通路由

TUN 下不能只看 DNS Server。官方 TUN 文档将 dns_mode 分为 disabled、native 和 hijack:disabled 不配置原生 DNS,也不劫持 DNS;native 尽可能设置平台原生 DNS;hijack 在此基础上增加 53 端口劫持。dns_address 则指定 DNS 流量被处理的地址。字段和版本变化见sing-box TUN 官方文档。

  1. 备份配置。复制当前 JSON,保留一份可以正常启动的版本。
  2. 缩小 DNS。暂时只保留一个 DNS Server、一个 final,删除复杂 rules、FakeIP 和自定义缓存。
  3. 确认劫持层。检查系统 DNS、客户端 DNS、TUN dns_mode 是否同时接管 53 端口。
  4. 检查路由回环。启用 auto_route 时,官方建议配置 route.auto_detect_interface、route.default_interface 或 outbound 的 bind_interface,避免连接再次进入 TUN。
  5. Linux 单独检查。auto_redirect 仅支持 Linux 且要求启用 auto_route;官方说明它通过 nftables 改善 TUN 路由,并建议 Linux 场景优先考虑。
  6. 逐项恢复。先恢复 rules,再恢复 TUN 劫持,最后恢复 FakeIP 或复杂路由,每次只加一项。
按现象定位 TUN DNS 问题
现象日志或配置重点回退动作
所有域名 timeoutDNS Server 连接、final、HTTPS Server 域名解析改回 local,暂时关闭 TUN
开启 TUN 后循环auto_route、默认网卡、outbound 绑定关闭 auto_route 或加入接口检测后单独测试
部分域名解析异常rules 顺序、domain_suffix、server tag只保留一条明确规则
关闭 TUN 正常、开启后失败dns_mode、dns_address、53 端口劫持先用 native 或关闭 hijack 对比

自查 DNS 泄漏时,不要只根据网页显示一个解析器名称下结论。分别记录 TUN 关闭和开启时的 DNS 日志、系统 DNS 设置、实际命中的 server tag,再使用站内的DNS 泄漏检查做对比;若结果不同,先判断是系统解析器、客户端劫持还是规则分流造成。

Windows、macOS、Linux、Android 的差异与操作顺序

平台排查对照
平台先检查特别注意
WindowsTUN 权限、系统代理、dns_mode、默认接口官方 TUN 文档提到 strict_route 可影响 Windows 的多网卡 DNS 行为;修改后要测试虚拟网卡和本地应用。
macOSNetwork Extension 权限、local、TUN 与系统 DNS官方 local 文档说明 macOS 可能优先尝试 DHCP;reverse_mapping 也可能受系统代理和缓存影响。
Linuxsystemd-resolved、nftables、auto_route、auto_redirectauto_redirect 需要 Linux、auto_route 和相应 nftables 能力;权限不足时会导致配置无法按预期生效。
AndroidVPN 权限、TUN 是否真正启用、平台 DNS官方说明 Android VPN 默认可能优先于 TUN;route.override_android_vpn 会影响是否把 VPN 作为上游网卡。
  1. 先在客户端界面确认实际使用的核心版本和当前配置文件。
  2. 备份配置后关闭 TUN,仅测试 DNS Server 和 final。
  3. 确认普通域名、局域网域名、IPv4 和 IPv6 的结果。
  4. 开启 TUN,记录 dns_mode、auto_route 和默认接口相关日志。
  5. Linux 再检查 nftables;Android 再检查 VPN 权限和是否存在其他 VPN;macOS 再检查 Network Extension 权限。

平台差异不能通过一份桌面配置完全覆盖。尤其是 local、系统解析器和 TUN 的行为,取决于系统接口以及客户端是否使用图形客户端封装;遇到差异时应以当前客户端日志和对应平台官方说明为准。

版本迁移与撤销:1.12.0、1.14.0、1.15.0 重点检查什么

版本迁移前先备份旧配置,并确认客户端内置核心版本。官方 Migration 页面列出:1.12.0 引入新式 DNS Server 格式;旧 DNS Server 格式在 1.14.0 被移除;1.14.0 废弃 independent_cache,并新增 optimistic 与 DNS 查询超时;1.15.0 起 TUN 使用自有 TCP/IP 栈,旧的 stack 选项进入废弃流程。详情见sing-box Migration 官方文档和sing-box Deprecated 官方文档。

迁移字段处理
旧写法或字段处理方式验证方法
DNS Server 使用 address Legacy 结构改为带 type、tag 的新式 Server逐个核对 Local、UDP、TLS、HTTPS 等对应页面
independent_cache删除,不要在新配置中继续依赖启动日志不再出现废弃字段提示
store_rdrc按需求改为 store_dns,或先关闭缓存文件重启后测试普通 DNS 与缓存行为
TUN stack1.15.0 起优先删除,使用新栈重新测试路由、DNS 和本地应用

回滚方法是恢复备份文件,而不是把新旧字段混写。若升级后启动失败,先删除最近新增的 DNS Rule、缓存和 TUN 字段,回到“一台 server + 一个 final + direct outbound”,确认核心能启动后再逐项恢复。

完成标准:配置成功、规则命中、DNS 路径可解释

如果仍然失败,按“配置语法 → DNS Server → final → rules → TUN 劫持 → route 接口 → outbound”顺序回退。每次只恢复一层,才能确定问题究竟来自解析器、规则、路由还是平台封装。

常见问题

sing-box DNS 配置里的 final 是什么?

final 是默认 DNS Server tag。没有规则处理查询时使用它;官方文档说明留空时使用 servers 中的第一个服务器,仍应优先显式填写。可参考<a href="https://sing-box.sagernet.org/configuration/dns/">DNS 官方配置页</a>。

sing-box DNS 规则为什么不生效?

先检查规则顺序、domain_suffix 是否匹配真实域名、action 是否为 route,以及 server tag 是否与 servers 中的 tag 完全一致。

sing-box TUN 开启后 DNS 一直超时怎么办?

先保留一个 DNS Server 和 final,关闭复杂 rules,再检查 dns_mode、dns_address、auto_route 与默认接口,避免 DNS 请求被再次送回 TUN。

local 和旧版 Legacy DNS Server 有什么区别?

新式 local 使用 type 为 local 的服务器对象。官方说明新式 local 可处理所有查询类型,但 Android 和 macOS 存在平台行为差异,不要直接混用旧字段。

DoH、DoT 和 UDP 应该怎么选?

先选当前网络能稳定连接的类型;需要加密时再考虑 TLS 或 HTTPS。DoH 通常走 HTTPS,DoT 使用 TLS,具体服务器字段和证书要求要按对应官方文档填写。

independent_cache 还能继续使用吗?

官方已将 independent_cache 标记为 sing-box 1.14.0 废弃,并说明将在 1.16.0 移除。新配置建议删除该字段,缓存需求按当前 DNS 和 cache file 文档迁移。

怎样判断 sing-box DNS 是否泄漏?

分别记录 TUN 关闭与开启时的系统 DNS、sing-box 日志和命中的 server tag,再使用<a href="/guides/dns-leak-check/">DNS 泄漏检查</a>做对比;不要只根据单次网页结果判断。

相关阅读

参考资料

  1. sing-box DNS 配置官方文档
  2. sing-box DNS Server 官方文档
  3. sing-box Local DNS Server 官方文档
  4. sing-box HTTPS DNS Server 官方文档
  5. sing-box DNS Rule 官方文档
  6. sing-box DNS Rule Action 官方文档
  7. sing-box Route 官方文档
  8. sing-box Migration 官方文档
  9. sing-box Deprecated 官方文档
  10. Cloudflare DoH 官方端点说明
  11. Cloudflare DNS over HTTPS 官方说明
  12. Cloudflare DNS over TLS 官方说明