v2ray节点购买

代理 DNS 泄漏怎么检查?出口 IP、解析器与 IPv6 排查表

更新于 2026-10-27 · v2ray.tattoo

简答:代理 DNS 泄漏检查不能只看 DNS 所在国家。最快方法是先记录代理关闭和开启时的出口 IP,再运行标准与扩展 DNS 测试,核对解析器归属、代理协议、浏览器 DoH、IPv6 和 TUN/分流设置;只有检测结果与配置意图不符,并且多轮复测仍出现本地或运营商解析器时,才能判断为疑似泄漏。

定义:DNS 泄漏是指域名查询没有按照预期经过代理或指定的远程解析路径,而是由本地网络、运营商、浏览器或其他旁路解析器处理。

先做 30 秒速查:四个结果不要混在一起看

如果你只想快速判断,先保持同一网络、同一客户端、同一节点和同一浏览器,只切换代理开关。代理关闭时记录一次基线,代理开启后再复测。不要在两次测试之间同时改变 DNS、IPv6、浏览器安全 DNS 或路由模式,否则无法确认变化来自哪个设置。

检查对象具体操作它能证明什么它不能单独证明什么
出口 IP代理关闭和开启时分别查看公网出口地址当前网页请求看到的出口是否发生变化不能证明 DNS 查询也经过同一条路径
DNS 测试打开 DNSLeakTest,先选 Standard Test,再按需选择 Extended Test测试域名由哪些解析器实际发起查询不能覆盖所有应用、所有时间段和所有自带解析器
系统命令Windows 使用 ipconfig /all、nslookup;命令行代理使用 curl 复核本机配置的 DNS、查询结果和代理连接阶段不能代表浏览器 DoH、移动端应用或 TUN 的全部行为
旁路设置检查 IPv6、浏览器 DoH、Android 私人 DNS、TUN 和分流规则是否存在可能绕过客户端的其他解析路径不能仅凭开关状态推断实际请求一定走哪条路径

关键结论:检测页面、nslookup 和客户端日志观察的是不同层面。三者结果一致时证据更强;任何一个结果都不能单独证明所有 DNS 查询均经过代理。DNS 所在国家与代理出口国家不同,也不必然代表泄漏,因为公共解析服务可能使用任播、多地节点或不同注册信息。

具体怎么做 DNS 测试:标准、扩展与复测分支

  1. 关闭代理,打开 DNSLeakTest,记录页面显示的出口 IP 和解析器名称、组织及地区。
  2. 开启代理,保持同一浏览器窗口和网络环境,先运行 Standard Test。该站说明标准测试会进行 1 轮、6 次查询,适合快速检查。
  3. 如果结果不稳定、只出现一个解析器,或你怀疑存在间歇性旁路,再运行 Extended Test。该站说明扩展测试会进行 6 轮、共 36 次查询,用于发现负载均衡或偶发出现的其他解析器。
  4. 把结果与配置意图比较:如果你预期由客户端或远程网络解析,却持续看到本地路由器、运营商或不应出现的解析器,记录为“疑似泄漏”,不要仅凭国家或城市字段下最终结论。
  5. 关闭浏览器缓存影响后再复测。可以新建隐私窗口、重启客户端,或在 Windows 执行 ipconfig /flushdns。连续测试至少两轮,并记录时间、代理模式和 IPv4/IPv6 状态。

DNSLeakTest 的测试原理是让客户端解析测试域名,再观察哪些 DNS 服务器发起了查询;它的标准与扩展测试说明见 Standard vs Extended test。检测站结果是旁证,不等同于代理匿名性、WebRTC 或请求头检查。

三种结果分别怎么处理

  • 检测页面无法加载:先确认代理本身能打开普通 HTTPS 页面,再检查浏览器扩展、证书拦截、网络防火墙和客户端日志。此时不能把“页面打不开”判定为 DNS 泄漏。
  • 页面能打开但没有发现解析器:可能是测试脚本、浏览器 DoH、拦截扩展或 DNS 请求被阻断。换隐私窗口、暂时停用相关扩展,并用命令行和客户端日志交叉确认。
  • 发现解析器结果异常:先核对组织归属和配置意图,再重复测试。若本地运营商解析器与预期远程解析器同时出现,或只在 IPv6、规则模式下出现,应优先检查分流和 IPv6。

先确认代理协议:HTTP、HTTPS 和 SOCKS5 不是同一种 DNS 路径

代理协议名称描述的是客户端如何连接代理,不等于所有 DNS 查询都会自动远程解析。尤其要区分“代理连接是否加密”“HTTPS 目标是否通过 CONNECT 隧道传输”和“目标主机名由本地还是代理解析”这三个问题。

代理写法含义DNS 排查重点
http://curl 将其作为 HTTP 代理处理确认客户端是在本地先解析目标主机名,还是把主机名交给代理;不同客户端实现可能不同
https://表示 curl 与代理建立 HTTPS 形式的代理连接它不天然等于“目标域名由远程解析”;仍需查看客户端实现和日志
HTTPS 目标通过 HTTP 代理通常由客户端使用 CONNECT 建立到目标的隧道隧道的建立方式与 DNS 解析位置是两个问题,不能把 HTTPS 目标直接当成远程 DNS
socks5://curl 使用 SOCKS5 代理方式按 curl 文档与 socks5h://分别复测,不要把所有 SOCKS5 客户端都视为同一行为
socks5h://curl 明确表示由 SOCKS 代理解析主机名适合验证“主机名交给代理解析”的路径

curl 官方文档把 socks5://、socks5h://和 https://代理前缀分开定义,其中 socks5h://对应“由代理解析主机名”。可参考 curl How To Use 和 CURLOPT_PROXY。因此,不能因为浏览器使用 HTTPS,也不能因为客户端显示 SOCKS5,就直接认定 DNS 已经远程解析。

Windows、macOS、Android 与浏览器的检查清单

Windows:查看系统 DNS,再确认缓存和解析结果

  1. 打开命令提示符,执行 ipconfig /all,记录当前网卡的 DNS 服务器、IPv4、IPv6、默认网关。
  2. 执行 nslookup example.com,记录输出中的 Server 和 Address。Microsoft 说明,nslookup不会使用客户端 DNS 缓存,而是使用当前配置的 DNS 服务器进行查询。
  3. 分别执行 nslookup -type=A example.com 和 nslookup -type=AAAA example.com,观察 IPv4 与 IPv6 记录是否都能解析。
  4. 如果要排除旧缓存影响,执行 ipconfig /flushdns,再重新运行测试。
  5. 如使用 WinHTTP 应用,再执行 netsh winhttp show proxy;但不要据此推断所有浏览器和应用都使用同一个代理配置。

Microsoft 的 DNS 客户端排查文档提供了 ipconfig /all、nslookup、缓存查看和清理方法,详见 Microsoft DNS 客户端排查 与 nslookup 命令文档。

macOS:检查网络服务 DNS 和客户端接管

  1. 打开“系统设置→网络”,选择当前 Wi-Fi 或有线网络,进入“详细信息→DNS”,记录 DNS 服务器列表。
  2. 在代理关闭和开启状态下分别运行测试,保持网络服务和浏览器不变。
  3. 如果客户端启用了 TUN、系统扩展或 DNS 代理,继续查看客户端日志与规则命中,因为网络服务页面显示的是系统配置,不一定代表应用实际使用的最终解析路径。

Apple 的入口是“系统设置→网络→网络服务→详细信息→DNS”,可参考 Apple Mac DNS 设置说明。

Android:排除私人 DNS 和应用级解析

  1. 在系统设置搜索“私人 DNS”,确认当前是关闭、自动还是指定提供商主机名。
  2. 记录浏览器是否启用了安全 DNS;测试期间不要同时切换私人 DNS、浏览器安全 DNS 和客户端模式。
  3. 分别测试规则模式、全局模式和 TUN 模式。如果只有某个模式出现本地解析器,优先检查 DNS 接管、分流规则和 IPv6。

Google 说明,Android 私人 DNS只保护 DNS 查询和响应,不能代替完整网络代理;具体入口可能因设备和系统版本不同而变化,参考 Android 私人 DNS 设置说明。

浏览器:检查 DoH 是否绕过客户端

Firefox 的 DNS over HTTPS 可以在“设置→隐私与安全→DNS over HTTPS”中查看保护级别。Mozilla 说明,默认保护可能在特定网络条件下回退到默认解析器,关闭后则使用默认 DNS 解析器。因此,测试客户端是否接管 DNS 时,应先记录 DoH 状态,必要时固定为一种状态后再复测,完成后恢复原设置。参考 Firefox DoH 设置说明。

用 curl 做可复现复核:区分本地解析与代理解析

以下命令在 Windows PowerShell、macOS 终端或 Linux Shell 中执行。把 127.0.0.1:PORT替换成客户端实际监听的代理地址和端口,不要把账号、密码、Cookie 或订阅信息写进命令。

HTTP 代理测试:

curl -v -x http://127.0.0.1:PORT https://example.com/

SOCKS5 测试:

curl -v --proxy socks5://127.0.0.1:PORT https://example.com/

让 SOCKS 代理解析主机名:

curl -v --proxy socks5h://127.0.0.1:PORT https://example.com/

  1. 代理关闭时运行一次,记录是否能解析、连接到哪里,以及失败发生在解析、连接还是 TLS 阶段。
  2. 开启代理后,用相同域名和相同客户端分别运行 HTTP、socks5://和 socks5h://命令。
  3. 重点看 -v输出中的连接目标、代理握手和错误位置,不要只看最终网页是否打开。
  4. 如果 socks5h://能连接而 socks5://失败,只能说明“解析位置可能是关键变量”,仍需结合 DNS 测试和客户端日志确认。

example.com适合做连通性和协议对比,不适合单独证明随机域名没有缓存影响。需要复核缓存时,可使用一个此前未访问过、由你控制或可信测试服务生成的唯一域名;不要为了测试随意查询陌生或敏感域名。curl 的代理参数定义见 官方命令行手册。

发现疑似泄漏后的修复顺序:先确定谁负责解析

  1. 备份配置。导出客户端配置,或记录 DNS、路由、TUN、IPv6 和代理组设置,确保修改后可以恢复。
  2. 找出解析责任。在客户端设置中搜索可能出现的字段:DNS 模式、远程解析、直连解析、Fake-IP、Redir-Host、DNS 劫持、TUN DNS、分流 DNS。不同客户端命名不同,不能把某个客户端的字段直接套用到另一个客户端。
  3. 只保留一个清晰的解析方案。避免客户端远程解析、浏览器 DoH、Android 私人 DNS 和系统自定义 DNS 同时承担不同任务却没有明确分流规则。
  4. 检查规则模式。规则模式可能让部分域名按设计直连;如果希望更广泛地由客户端接管,需要确认客户端是否支持对应的 DNS 路由和规则。
  5. 检查 IPv6。如果客户端只接管 IPv4,而 IPv6仍可直连,可能出现两条不同路径。可临时关闭 IPv6做对照,确认问题后再决定是否恢复。
  6. 检查 TUN 和系统代理边界。TUN通常覆盖更多应用,但实际行为取决于客户端、系统权限、路由表和 DNS 设置。查看日志中的 DNS 请求、规则命中、Fake-IP/真实地址和连接失败原因。
  7. 清理缓存并复测。Windows 使用 ipconfig /flushdns,浏览器使用隐私窗口或重启后再测试,至少进行两轮并记录结果。

修复后应完成闭环:保存配置、校验配置、重新载入客户端、查看日志、运行 DNS 测试、检查规则命中,最后验证实际业务。若 DNS 结果正常但 WebRTC、应用自带解析或其他请求仍绕过代理,这不属于 DNS 检测通过可以覆盖的问题。

常见问题

DNS 显示的国家和代理出口国家不同,就是泄漏吗?

不一定。解析服务可能使用任播、多地节点或独立注册信息。应结合解析器名称、网络组织、当前配置意图和多轮结果判断;如果本地或运营商解析器持续出现,且与预期解析路径不符,才更像疑似泄漏。

标准测试和扩展测试应该选哪个?

先选 Standard Test 做快速检查;如果结果不稳定、只显示少量解析器,或你需要发现间歇性旁路,再选 Extended Test。DNSLeakTest 页面说明标准测试为 1 轮 6 次查询,扩展测试为 6 轮共 36 次查询。

代理已经连接,为什么 DNS 还可能走本地网络?

系统代理不一定覆盖所有应用;浏览器可能使用独立 DoH,Android 可能启用私人 DNS,规则模式和 IPv6也可能形成旁路。应分别检查应用代理、浏览器 DNS、系统 DNS、TUN、分流和 IPv6。

HTTP 代理和 HTTPS 代理会自动防止 DNS 泄漏吗?

不会。HTTPS 代理通常描述的是客户端到代理的连接方式,HTTPS 目标通过 CONNECT 建立隧道也不等于目标主机名一定由代理解析。实际解析位置取决于客户端实现和配置,需要用日志、DNS 测试及 curl 对比复核。

SOCKS5 一定会远程解析 DNS 吗?

不一定。以 curl 为例,socks5h://明确表示由代理解析主机名,而 socks5://是另一种行为。其他客户端可能有自己的选项,不能只看“SOCKS5”这个名称下结论。

DNS 检测通过,是否代表代理完全没有泄漏?

不是。DNS 检测主要回答域名查询路径问题,不能覆盖 WebRTC、IPv6、应用自带网络栈、请求头或分流规则造成的其他暴露。需要根据实际浏览器和应用逐项验证。

DNS 测试页面没有结果怎么办?

先区分三种情况:页面无法加载时检查代理连接、扩展和防火墙;页面能加载但没有解析器时检查浏览器 DoH、脚本拦截和 DNS 请求是否被阻断;出现异常解析器时核对组织归属、IPv4/IPv6和分流。随后用 nslookup、curl 日志和客户端日志交叉确认。

常见问题

代理 DNS 泄漏怎么检查最快?

先记录代理关闭和开启时的出口 IP,再打开 DNSLeakTest 运行 Standard Test;如果结果不稳定,再运行 Extended Test,并核对解析器组织、IPv6、浏览器 DoH、TUN 和分流设置。

DNS 检测显示本地运营商解析器,应该怎么处理?

先确认它是否符合当前配置意图。如果不符合,检查客户端的 DNS 模式、远程解析、直连解析、Fake-IP/Redir-Host、浏览器 DoH、Android 私人 DNS 和 IPv6,然后清理缓存并复测。

Windows 如何查看当前使用的 DNS?

在命令提示符执行 <code>ipconfig /all</code> 查看网卡 DNS,再执行 <code>nslookup example.com</code>测试当前配置的解析器;必要时使用 <code>ipconfig /flushdns</code>清理缓存。

SOCKS5 和 socks5h 有什么区别?

在 curl 中,<code>socks5h://</code>明确表示由 SOCKS 代理解析主机名,而 <code>socks5://</code>是不同的代理写法。其他客户端需结合自身设置和日志确认。

DNS 泄漏和 WebRTC 泄漏是一回事吗?

不是。DNS 泄漏关注域名查询由谁处理,WebRTC等问题关注浏览器或应用是否暴露网络地址。DNS检测通过不能替代其他网络路径检查。

相关阅读

参考资料

  1. DNSLeakTest:Standard 与 Extended 测试区别(dnsleaktest.com)
  2. DNSLeakTest:DNS 泄漏检测入口(dnsleaktest.com)
  3. curl 官方命令行手册:HTTP、HTTPS、SOCKS5 与 socks5h 代理(curl.se)
  4. curl 官方 libcurl 文档:代理类型与主机名解析(curl.se)
  5. Microsoft Learn:DNS 客户端排查
  6. Microsoft Learn:nslookup 命令
  7. Apple Support:在 Mac 上更改 DNS 设置
  8. Google Android Help:私人 DNS 设置
  9. Mozilla Support:Firefox DNS over HTTPS 保护级别