AmyTelecom - 2026顶级网络加速专线 | 极速秒开流媒体与AI的机场推荐

sing-box DNS 泄漏怎么检测?按检测站、日志与 53 端口排查

更新于 2026-11-01 · amytelecom.top

简答:先关闭 sing-box 做一次 DNS 检测并记录结果,再开启 sing-box 重复检测;如果结果出现本地运营商、路由器或物理网卡对应的 DNS,继续检查 TUN 的 dns_mode、53 端口劫持、dns.servers 的 detour、dns.rules、final、IPv6 和浏览器 DoH。最后用 sing-box check、debug 日志和 nslookup 复核,修改后必须重新测试。

定义:sing-box DNS 泄漏,是指网页流量已经经过 sing-box,但域名解析请求仍由系统、路由器、运营商或其他未纳入代理路径的 DNS 服务器处理。

先做这一步:关闭和开启 sing-box 各测一次

DNS 泄漏检测不能只看一次结果。先完全退出或暂停 sing-box,打开 DNS Leak Test 的 Extended Test,或打开 BrowserLeaks DNS Leak Test,记录检测到的 DNS 服务器数量、IP、组织名称和所在地区。DNS Leak Test 说明,Extended Test 会执行多轮查询,用于发现更多实际响应的 DNS 服务器;BrowserLeaks 则会使用随机域名检测浏览器正在使用的解析服务器。

测试状态怎么做重点记录结果用途
基线关闭 sing-box,清理浏览器缓存后运行检测DNS IP、组织、地区、数量确认本地网络原本使用哪些解析器
代理模式启动 sing-box,保持同一网络和浏览器,再运行同一检测DNS 是否变化、是否出现本地解析器判断 sing-box 是否接管解析请求
复测修改一项配置后重新运行同一测试前后结果是否一致避免把缓存或偶然结果当成修复成功

快速判定:如果开启 sing-box 后,检测结果仍只有你关闭客户端时看到的本地运营商或路由器 DNS,优先检查 TUN 是否真的接管了 DNS;如果结果变成代理路径上的公共 DNS 或远端解析器,并且重复测试稳定,说明至少从浏览器检测路径看没有明显的本地 DNS 旁路。但检测站只能说明浏览器发出的查询从哪里到达,不能单独证明所有应用、IPv6 流量和系统服务都走同一路径。

检测结果怎么看:先区分本地 DNS、远端 DNS 和缓存

检测到运营商名称并不等于每次都能直接断定发生泄漏。先把结果与关闭 sing-box 的基线比较:如果开启前后完全相同,且该服务器属于本地宽带、路由器或系统网络配置,优先按 DNS 旁路排查;如果开启后结果变为远端机房或公共 DNS,可能是 sing-box 的上游解析已经生效,但仍要结合配置和日志确认。

  • 本地运营商或家庭路由器:通常与系统默认 DNS、DHCP 下发地址、浏览器未经过 TUN 的请求有关,是需要优先检查的结果。
  • 公共 DNS:不能只凭名称判断是否泄漏。关键是确认该 DNS 请求是否经过 sing-box 的代理出站,以及它是否与基线结果不同。
  • 代理节点所在网络的 DNS:可能是远端出站实际使用的解析器,不一定代表本地泄漏,但要检查 dns.servers 是否设置了正确的 detour。
  • 多个地区或多个组织同时出现:可能是检测站使用了多轮随机查询,也可能是系统、浏览器、IPv4 和 IPv6 走了不同的解析路径,应重复测试并检查 IPv6。

如果浏览器检测结果和 sing-box 日志不一致,不要立即修改全部配置。先确认浏览器是否启用了自带的加密 DNS、系统是否存在多个网卡,以及测试页面是否仍使用旧缓存。检测站结果、配置文件和日志应作为三组证据分别记录。

检查 sing-box 配置:dns.servers、rules、final 和 detour

官方 DNS 配置参考中,servers 用于定义 DNS 服务器,rules 用于匹配解析请求,final 用于指定默认 DNS 服务器标签。DNS 规则动作中的 route 会把请求发送到指定的 DNS 服务器;DNS 服务器本身是否经代理出站,则要继续查看它的连接路径和 detour。可参考 sing-box DNS 配置文档、DNS 规则文档 和 DNS 规则动作文档。

先备份原配置,再逐项核对以下内容:

  1. 检查 dns.servers 是否存在、标签是否唯一,以及 final 是否引用了实际存在的服务器标签。
  2. 检查远程 DNS 服务器是否配置了经过代理出站的连接路径。官方支持页把“DNS 上游通过代理出站”列为 DNS 泄漏排查项,但具体字段要以当前 sing-box 版本的配置参考为准。
  3. 检查 dns.rules 的顺序。规则通常按列表顺序匹配,前面的本地、直连或特定域名规则可能让部分请求不使用你预期的远程 DNS。
  4. 检查是否混用了旧版字段。官方文档显示,DNS 规则的多个字段在 1.11.0、1.12.0、1.14.0 和 1.15.0 有迁移或新增变化;不要把旧教程中的 server、旧地址格式或旧规则写法直接复制到新配置。
  5. 检查配置中是否使用了 independent_cache。官方文档显示该字段在 sing-box 1.14.0 已废弃,并计划在 1.16.0 移除;不要为了“防泄漏”新增这个版本相关字段。

低风险原则:不要同时改 DNS 上游、TUN、路由、IPv6 和浏览器设置。一次只改一个变量,并保留修改前的配置文件,出现网页打不开、局域网失效或应用无法联网时可以立即回滚。

检查 TUN:dns_mode、hijack-dns、strict_route 和路由范围

如果你使用 TUN 模式,重点不是只看“开关是否打开”,而是确认 DNS 请求是否被送入 sing-box 的 DNS 模块。官方 TUN 文档显示,dns_mode 自 sing-box 1.14.0 起用于控制 TUN 接口上的 DNS 处理;disabled 不配置原生 DNS,也不劫持 DNS 流量;native 尽可能设置平台接口 DNS;hijack 在此基础上增加 53 端口劫持。具体行为会随平台和其他 TUN 选项变化,不能把一个平台的结论套用到所有系统。

按下面顺序检查:

  1. 确认运行模式:先明确当前是系统代理、TUN、混合入站还是仅某个应用使用代理。系统代理通常不能覆盖所有应用;而 TUN 仍可能因权限、IPv6、浏览器自带解析或多网卡产生旁路。
  2. 确认 DNS 处理模式:如果配置了 dns_mode: disabled,不要期待它自动接管系统 DNS;如果使用 hijack,要按当前版本文档核对它在对应平台上的实际行为。
  3. 检查 hijack-dns:官方路由规则动作文档说明,hijack-dns 会把 DNS 请求劫持到 sing-box DNS 模块。如果你的路由规则、TUN 配置或图形客户端没有形成这条路径,53 端口请求可能继续由系统 DNS 处理。
  4. Windows 单独检查 strict_route:官方 TUN 文档说明,Windows 启用 strict_route 时,会阻止经由非 TUN 接口的 53 端口流量,以降低普通多网卡 DNS 解析行为造成的旁路风险;它也可能影响部分依赖特殊网络接口的程序,因此修改前应备份配置并准备回滚。
  5. 检查路由回环:在 Linux、Windows 和 macOS 上,官方路由文档建议通过 auto_detect_interface、default_interface 或出站绑定接口来避免 TUN 下的路由回环。它们不是“DNS 泄漏开关”,但路由错误会让 DNS 上游无法按预期建立连接。

官方更新日志还说明,TUN 的 DNS 接管行为在 1.14.0 相关版本发生过变化,包括原生接口 DNS 和平台级 DNS 劫持。因此,遇到“旧教程配置有效、当前版本无效”的情况,应先核对当前版本文档,而不是继续叠加旧字段。

用命令和日志做第二次验证

检测站看的是外部结果,命令和日志用于确认本机是否真的产生了 DNS 请求、请求交给谁处理。修改配置前先运行配置检查:

sing-box check -c config.json

官方配置引言将 sing-box check 列为配置检查命令;不同客户端可能把核心文件、配置路径或可执行文件位置封装起来,因此命令中的路径需要按你的安装方式替换。配置检查通过只代表格式和结构满足检查条件,不代表 DNS 一定没有泄漏。

再开启临时 debug 日志。官方日志文档支持 trace、debug、info 等等级;排查完成后建议恢复到日常使用的日志级别,避免长期产生过多日志。

Windows 可以使用 Microsoft Learn 说明的 nslookup 非交互模式,对指定 DNS 服务器发起查询:

nslookup example.com 127.0.0.1

其中 127.0.0.1 只是示例,必须替换为你的 sing-box 本地 DNS 监听地址和端口;如果 sing-box 没有在该地址提供 DNS 服务,这条命令失败并不能证明发生了泄漏。Microsoft 的 nslookup 文档说明,命令可以显式指定要查询的 DNS 服务器,也可以省略服务器参数而使用系统默认 DNS,因此两种结果应分开记录。

Linux 上可以使用 dig 查询指定本地监听地址;如果需要观察 53 端口是否有请求,可在有权限且明确网卡名称的前提下使用抓包工具,例如:

sudo tcpdump -ni <interface> 'port 53'

这是可选的本地观察手段,不应把“看到 53 端口流量”直接等同于泄漏,因为被观察到的流量可能正是 sing-box 接管前的请求,也可能是本机内部转发。应结合目标地址、请求发生时间、debug 日志和检测站复测一起判断。

按现象分流:IPv6、浏览器 DoH 和多网卡

  • 检测站仍显示本地 DNS:先关闭浏览器自带的安全 DNS 或 DoH 做对照,再检查 TUN 的 dns_mode、53 端口处理和系统 DNS。浏览器 DoH 可能让浏览器绕过系统 DNS,因此“浏览器页面正常”不能证明系统所有应用都没有泄漏。
  • 只在某些网站或某些浏览器出现:用同一设备的另一浏览器、命令行查询和检测站分别测试。若只有一个浏览器不同,优先检查其独立 DNS 设置、扩展或代理设置。
  • 只出现 IPv6 相关结果:比较开启和关闭 IPv6 后的检测结果,并检查 sing-box 的 TUN 地址、路由和出站是否同时覆盖 IPv6。不要在没有确认网络需求的情况下直接删除 IPv6 配置;先做临时对照测试。
  • 连接正常但 DNS 结果不稳定:检查 Wi-Fi、以太网、虚拟网卡、容器或企业网络适配器是否同时存在。官方路由文档说明,auto_detect_interface 用于绑定默认网卡以避免 TUN 下的路由回环,但它不能替代完整的 DNS 规则检查。
  • 配置检查通过但检测仍异常:配置语法正确不代表规则顺序、上游出站和系统接管范围正确。回到“检测站结果→日志→53 端口→配置字段”的顺序,不要只重复执行 sing-box check。

修改后的复测与回滚清单

  1. 保存原始配置,并记录 sing-box 核心版本、运行平台、运行模式和当前网络类型。
  2. 关闭 sing-box,运行一次基线检测,保存 DNS 服务器列表。
  3. 只修改一个变量,例如恢复正确的 DNS 上游引用、调整 TUN DNS 处理方式,或暂时关闭浏览器 DoH。
  4. 执行 sing-box check -c <配置文件>,确认没有结构错误。
  5. 启动 sing-box,等待配置生效后访问多个此前未打开过的域名,再运行同一个 Extended Test 或 BrowserLeaks DNS Test。
  6. 对比检测站结果、debug 日志和本地命令结果。若三者不能相互解释,不要宣称“已经修复”。
  7. 如果网页、局域网或应用出现异常,立即恢复备份配置,再逐项缩小问题范围。

一次检测通过,只能说明当前设备、当前浏览器、当前网络和当前配置组合下没有观察到明显问题。切换 Wi-Fi、移动网络、浏览器、TUN 模式或 IPv6 后,应重新做一次对照测试。

常见问题

sing-box 能正常打开网页,为什么还要检测 DNS 泄漏?

网页流量和 DNS 查询可以走不同路径。系统代理、浏览器独立 DoH、IPv6、多网卡或 TUN 接管范围不完整,都可能让网页看似正常但解析请求没有经过预期路径。检测站只能作为第一步,还应结合配置、日志和本地命令复核。

DNS 泄漏检测到运营商 DNS,就一定是 sing-box 配置错误吗?

不一定。先与关闭 sing-box 时的基线结果比较,再确认检测站是否使用了缓存、浏览器是否启用了独立 DoH、IPv6 是否走了另一条路径。如果开启前后结果相同,且该 DNS 属于本地网络,才应优先按旁路问题排查。

sing-box 的 dns_mode 应该直接改成 hijack 吗?

不能脱离版本、平台和运行模式直接套用。官方文档显示,dns_mode 的行为与 TUN、auto_route、auto_redirect、strict_route 和平台有关。先确认当前版本支持的字段和默认行为,再备份配置、只修改一个变量并复测。

sing-box check 通过后,是否代表 DNS 泄漏已经修复?

不是。sing-box check 主要用于检查配置结构和语法,不能替代外部 DNS 检测。通过后仍要启动客户端、访问多个新域名、运行同一检测站,并对照 debug 日志或 nslookup 结果。

为什么同一台设备在不同浏览器里的 DNS 检测结果不同?

常见原因包括浏览器自带 DoH、安全 DNS、扩展代理设置、缓存,以及浏览器与系统使用了不同的网络路径。可以暂时关闭浏览器独立 DNS 做对照,再分别测试系统查询和 sing-box 本地 DNS 监听。

相关阅读

参考资料

  1. sing-box DNS 配置参考
  2. sing-box DNS 规则
  3. sing-box DNS 规则动作
  4. sing-box TUN 入站配置
  5. sing-box 路由配置
  6. sing-box 配置引言与检查命令
  7. sing-box 日志配置
  8. DNS Leak Test:Standard 与 Extended Test 的区别(dnsleaktest.com)
  9. BrowserLeaks DNS Leak Test(browserleaks.com)
  10. Microsoft Learn:nslookup 命令
  11. dnsleaktest.com(dnsleaktest.com)