← 返回 梯子Z 来自巴黎的稳定快速安全ShadowsocksR梯子 首页

sing-box DNS怎么设置?从基础解析到TUN接管与故障排查

更新于 2026-11-03 · zionladderp.shop

简答:sing-box DNS设置的核心是先定义 servers,再用 rules 决定不同查询走哪个服务器,最后用 final 指定默认服务器。普通场景先用 local 或一种可访问的 UDP、DoT、DoH 服务器;TUN 场景再通过 route.rules 的 hijack-dns 接管系统 DNS。配置后要启动检查日志,并用 nslookup 或 dig 对照解析结果。

定义:sing-box DNS配置就是在 dns 对象中声明 DNS 服务器、匹配规则、默认服务器和可选的 FakeIP 行为,再由 route 或 TUN 规则决定 DNS 请求是否被接管。

先试这一步:按场景选择 DNS 结构

本文是面向 sing-box 配置文件和图形客户端用户的使用指南,站点本身不是 sing-box 或任何订阅服务的官方网站。本文依据官方文档截至 2026-11-03 可核对的配置结构整理;不同客户端可能只开放部分字段,菜单名称和可用选项应以当前客户端显示为准。

sing-box DNS常见场景速查
场景建议起点先检查什么
只想正常解析一个 type 为 local 或 udp 的服务器,设置 final服务器标签是否与 final 完全一致
需要加密查询使用 tls、https、quic 或 h3 类型的 DNS server服务器地址、证书域名和连接路径是否可达
需要按域名分流在 dns.rules 中用 action 和 server 指定规则规则顺序、匹配条件和默认规则
使用 TUN配置 route 规则的 action 为 hijack-dnsTUN 权限、路由接管和日志中是否出现 DNS 请求
需要 FakeIP只在客户端和局域网场景确认兼容后启用 fakeip局域网地址、应用兼容性和回滚方式

官方 DNS 结构包含 servers、rules、final、strategy、缓存选项、timeout、reverse_mapping、client_subnet 和 fakeip 等字段。官方 DNS 配置文档对这些字段的当前用途和版本变化有完整说明。

基础配置:先让 DNS 能稳定解析

  1. 备份原文件。复制当前配置文件,保留一份可回滚版本,不要直接覆盖唯一配置。
  2. 确认服务器标签。在 dns.servers 中为每个 DNS 服务器设置唯一 tag;rules 中引用的是 tag,不是显示名称。
  3. 设置 final。final 是默认 DNS 服务器标签。如果 final 留空,官方文档说明会使用列表中的第一个服务器。
  4. 先减少变量。初次排查时只保留一个 DNS server、一个 final 和必要的 route 配置,确认能启动后再加入分流或 FakeIP。

基础结构可以按下面的“示意模板”理解,模板中的服务器地址只是字段示例,不代表推荐某个公共 DNS,也不能直接替代你现有配置:

{"dns":{"servers":[{"type":"local","tag":"local-dns"}],"final":"local-dns","strategy":"prefer_ipv4"}}

预期结果:配置能被当前客户端接受,启动日志没有 JSON、字段类型或未知字段错误;执行系统 DNS 查询时,能够得到正常响应。若客户端没有提供配置校验按钮,应通过重启后查看日志确认,而不是只看网页是否能打开。

回滚:出现启动失败时,先恢复备份,再一次只改一个字段。不要同时更换 DNS 类型、规则、TUN 和 FakeIP,否则很难判断是哪一项导致问题。

servers、rules、final、detour分别做什么

关键字段对照
字段作用常见误区
servers定义可用 DNS 服务器列表,每个对象通常有 type 和 tag,具体类型还可能需要 server、path 或其他字段。把旧版 address 写法直接复制到新配置。
rules按域名、规则集、查询类型或其他条件匹配 DNS 请求,并通过规则动作决定处理方式。只写匹配条件,却没有有效 action。
final指定没有被前面规则处理时使用的默认服务器。把服务器地址写进 final,而不是写服务器 tag。
strategy设置默认域名解析策略,例如 prefer_ipv4、prefer_ipv6、ipv4_only 或 ipv6_only。把 strategy 当成 DNS 服务器类型。
detour决定 DNS 服务器连接使用哪条出站路径,具体支持方式取决于服务器类型和当前配置。让 DNS 的 detour 又依赖必须先解析的域名,造成循环。
address_resolver用于解析 DNS 服务器自身的域名地址,适合服务器地址是域名、且需要明确指定解析器的场景。让 address_resolver 指向一个同样依赖该服务器的解析链。

DNS server 类型已经在较新的配置格式中重构,local、udp、tcp、tls、https、quic、h3、dhcp 和 fakeip 等类型应按当前官方字段写法配置。旧版 DNS server 格式在 sing-box 1.14.0 已移除,不能只把旧配置中的 address 字段原样搬到新文件。官方迁移指南列出了旧格式到新格式的对照。

DNS分流怎么设置:先做简单规则,再处理复杂匹配

分流的基本思路是:先定义两个或多个 DNS server,再在 dns.rules 中按域名或规则集匹配,使用当前版本支持的 DNS 规则动作指定目标服务器,最后保留一个兜底规则或 final。示意结构如下:

{"dns":{"servers":[{"type":"local","tag":"direct-dns"},{"type":"https","tag":"secure-dns","server":"example.invalid","path":"/dns-query"}],"rules":[{"domain_suffix":["example.com"],"action":"route","server":"secure-dns"}],"final":"direct-dns"}}

上例中的 example.invalid 是占位域名,不能直接使用;实际填写前应查阅当前版本的 DNS server 类型文档,确认该类型需要哪些字段。官方 DNS server 类型文档列出了 local、UDP、TCP、TLS、HTTPS、QUIC、HTTP3、DHCP 和 FakeIP 等服务器结构。

规则应从最具体的条件开始,再设置较宽的兜底范围。每增加一条规则,都要复测三个结果:目标域名是否命中预期服务器、未命中的域名是否走 final、节点或出站自身的域名是否仍能解析。不要把“能打开网页”当成规则一定生效,最好结合客户端日志或 DNS 查询工具观察。

如果配置来自 1.13 或更早版本,尤其要留意 1.14.0 的 DNS 规则迁移。官方迁移说明指出,部分旧的地址筛选字段已废弃;使用新的 ip_version、query_type 或响应匹配能力时,可能需要通过 evaluate 和 match_response 重新组织规则。

TUN模式:用hijack-dns接管系统DNS

  1. 先确认 TUN 已获得系统权限。Windows、macOS、Linux、Android 和 iOS 的授权方式不同,图形客户端也可能只支持部分 TUN 选项。
  2. 确认 dns 模块本身可用。先用基础 DNS 配置启动成功,再开启 TUN,避免同时排查两个问题。
  3. 加入 DNS 接管规则。route.rules 中使用 {"action":"hijack-dns"},该动作会把 DNS 请求交给 sing-box DNS 模块处理。
  4. 观察日志。启动 TUN 后,检查是否出现 DNS 请求、路由接管或权限错误;若系统仍使用原 DNS,优先检查 TUN 的 dns_mode、dns_address、auto_route 和平台权限。
  5. 复测并回滚。先查询普通域名,再查询需要分流的域名;若局域网设备或内网域名异常,暂时关闭 TUN 或移除新增规则,确认问题是否消失。

官方规则动作文档明确说明,hijack-dns 用于将 DNS 请求交给 sing-box DNS 模块。TUN 文档还说明,dns_mode、dns_address 和系统平台行为会影响 DNS 接管方式,因此不能把同一套菜单路径当成所有系统完全一致。hijack-dns 官方说明和TUN 官方说明应作为当前版本核对依据。

FakeIP要不要开:先看应用和局域网兼容性

FakeIP 是 DNS 模块的可选能力,不是普通 DNS 设置的必选项。它适合需要让域名先映射到虚拟地址、再由 sing-box 根据映射还原域名的场景;但局域网访问、内网域名、部分应用的地址判断和排障方式可能因此变化。

如果你的目标只是解决解析失败、DNS 请求超时或规则不命中,建议先不开 FakeIP,先把普通 DNS、分流和 TUN 接管验证清楚。启用时要同时记录 fakeip 的地址范围、是否有局域网例外,以及关闭后的回滚方法。官方 DNS 文档将 fakeip 作为 DNS 配置中的独立入口,具体字段和范围应按当前版本填写,不要沿用旧教程中的字段名。

常见故障排查:按现象分流

DNS问题排查表
现象优先检查处理顺序
配置启动报未知字段是否使用旧版 address、server 或旧规则字段对照迁移指南删除或改写废弃字段,再逐项启动。
所有域名都超时DNS server 地址、type、detour 和网络可达性暂时只留一个最简单的服务器,确认基础解析后再恢复分流。
规则不生效规则顺序、tag 拼写、action 和 final用一个明确域名做测试,查看日志,再扩大匹配范围。
节点域名无法解析出站自身的域名解析链是否循环为该域名解析选择不依赖自身的 resolver 或直连路径。
TUN开启后断网系统权限、route、hijack-dns、dns_address 和防火墙先关闭 TUN恢复基础连接,再只加入 hijack-dns并复测。
局域网设备异常FakeIP、内网域名、私有地址和路由例外关闭 FakeIP 做对照,再根据实际局域网需求补规则。

复测建议使用系统自带的 nslookup 或 dig 查询同一个域名,并记录查询时间、返回地址和失败类型。命令本身只负责观察系统解析结果,不能单独证明某条 sing-box 规则命中;规则是否命中仍需结合 sing-box 日志或客户端状态查看。

版本迁移与配置检查清单

如果官方文档与客户端界面显示不一致,以当前客户端对应版本的配置校验结果和官方文档为准;本文不把未核实的版本号、客户端菜单或下载入口写成通用结论。

常见问题

sing-box DNS最简单应该怎么设置?

先只定义一个可用的 DNS server,并设置唯一 tag,再把 final 写成这个 tag。确认配置能启动、普通域名能解析后,再加入第二个服务器、分流规则或 TUN 接管。

sing-box的final应该填写DNS地址吗?

通常不应直接填写 IP 或 URL。final 用于指定默认 DNS 服务器,应该引用 servers 中已经定义的服务器 tag;如果留空,官方文档说明会使用列表中的第一个服务器。

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

优先检查规则顺序、匹配条件、action、server tag 和 final。若配置来自旧版本,还要检查旧的 server、outbound 或地址筛选字段是否已废弃;逐条增加规则并查看日志,比一次替换整份配置更容易定位。

TUN模式一定要配置hijack-dns吗?

不一定,具体取决于当前 sing-box 版本、TUN的 dns_mode、dns_address、auto_route以及客户端实现。需要把系统 DNS请求明确交给 sing-box DNS模块时,才按官方规则动作配置 hijack-dns,并通过日志验证是否真的被接管。

FakeIP能解决所有DNS问题吗?

不能。FakeIP是可选机制,主要改变域名与地址的处理方式;它可能影响局域网访问、内网域名和部分应用兼容性。排查普通解析失败时,建议先关闭 FakeIP完成基础验证。

升级到sing-box 1.14.0后配置报错怎么办?

先备份并对照官方迁移指南。重点检查旧版 DNS server 格式、independent_cache、旧 DNS 规则字段,以及与 ip_version、query_type、match_response 或 evaluate 相关的规则写法。无法确认的字段不要凭旧教程补回。

相关阅读

参考资料

  1. sing-box 官方中文文档:DNS配置
  2. sing-box 官方中文文档:DNS服务器类型
  3. sing-box 官方中文文档:DNS规则
  4. sing-box 官方中文文档:规则动作与hijack-dns
  5. sing-box 官方中文文档:迁移指南
  6. sing-box.sagernet.org
  7. sing-box.sagernet.org
  8. sing-box.sagernet.org