本文速览

适合“网页已经走代理,但 DNS 检测仍出现本地运营商”的场景。先用同一检测页建立直连与代理对照,再区分浏览器安全 DNS、Windows 系统解析和内核 DNS 三条路径,最后检查 TUN 接管、远程解析出站与流量探测。判断依据是查询实际经过的链路,而不是检测页上的国家名称。

一、DNS 泄漏判断:先分清查询与连接

DNS 把域名转换为 IP 地址。网页连接走代理,并不代表前面的域名查询也经过代理。例如,应用先向路由器的 192.168.1.1:53 查询,再把得到的 IP 交给本地代理,页面能够打开,域名查询却已经交给本地网络。这才是需要排查的路径分离。

应用域名请求解析路径选择DNS 查询出站目标地址返回网页连接建立

在线 DNS 检测通常让浏览器访问一批随机子域名,再由测试方的权威 DNS 观察谁来递归查询。页面显示的多为递归解析器或它的出口,不是直接展示电脑网卡发出的每一个数据包。解析器所在国家与代理出口不同,不能单独证明泄漏。

二、在线检测:建立三组可复现对照

可在浏览器打开 dnsleaktest.com,先运行 Standard test,再用 Extended test 复查。检测页会接收测试相关的网络信息,不要在输入框中提交订阅地址、节点凭据或工作内部域名。以下是操作记录模板,不是本文实测结果。

测试条件需要记录主要用途
关闭 TUN,清除系统代理公网出口、解析器 IP、运营商名称建立当前网络的直连基线
开启系统代理,保持同一节点公网出口变化、是否仍出现基线解析器检查浏览器代理链路
开启 TUN,保持同一节点解析器集合、内核日志、浏览器 DNS 状态检查接管范围与 DNS 出站
  1. 记录基线

    在可信网络中,先关闭主窗口的「启用 TUN」,再选择「系统代理」→「清除系统代理」。记录检测结果,注意这一轮访问会直接经过当前网络。

  2. 固定变量

    固定一个可用节点与同一个浏览器配置。记录浏览器“安全 DNS”是否开启;比较阶段不要同时更换节点、解析器和路由规则。

  3. 清理缓存

    用管理员 PowerShell 执行 Clear-DnsClientCache。完全退出并重新打开浏览器,减少浏览器缓存与连接复用干扰。

  4. 分轮测试

    先测系统代理,再测 TUN。每种状态运行两轮检测,记录时间与解析器 IP;不要只截取国家标签,也不要把旧标签页结果当作新结果。

结论:先定位重复出现的本地解析器

如果代理出口已改变,而两轮检测都重复出现直连基线中的运营商解析器,优先检查本地解析路径;如果只是公共解析器地区不同,先核对服务归属,不要立即更换节点。

三、系统代理与 TUN:接管范围不同

v2rayN 的「系统代理」→「自动配置系统代理」主要影响遵循 Windows 代理设置的应用。它不是全系统 DNS 接管开关。应用可以忽略系统代理,也可以先通过 Windows 解析域名,再连接代理端口。使用 SOCKS 的应用还要检查是否选择了“通过代理解析域名”,不能只看代理地址填对了没有。

本文以 v2rayN 7.x 常见桌面界面为路径参考,后续版本可能调整标签。主窗口的「启用 TUN」负责开启虚拟网卡接管;具体 TUN 实现、DNS 劫持规则和路由行为取决于实际启动的内核。节点使用 Xray,不等于 TUN 层也由 Xray 提供,判断时应看启动日志。

四、远程 DNS:配置解析器,也配置出站

在 v2rayN 打开「设置」→「DNS 设置」,先确认正在编辑的配置属于实际使用的内核。Xray 的 DNS 配置与 sing-box 的 DNS 配置不是同一种格式,不能把一个内核的 JSON 整段粘贴到另一个页面。自定义配置节点还可能绕过部分图形界面选项,应以实际生成并加载的配置为准。

远程解析可选择服务方提供的 DoH 地址,例如 https://1.1.1.1/dns-query。DoH 加密的是客户端到解析器这一段查询内容,并不自动保证连接经过代理。若隐私目标是让解析服务看到代理出口,就必须同时确认该 HTTPS 连接的出站,而不只是确认 URL 使用了 HTTPS。

配置环节具体检查容易遗漏的情况
解析器地址核对完整 DoH 路径 /dns-query只填服务首页,返回网页而非 DNS 响应
查询出站让远程解析连接使用代理出站DoH 虽加密,但仍从本地宽带直接连接
启动解析为节点域名与解析器域名保留可用的引导路径代理依赖 DNS,DNS 又依赖尚未建立的代理
失败回退检查是否回退到系统或运营商 DNS远程解析失败后静默改用本地解析

若使用 Xray 内置 DNS 的普通 https:// 模式,应结合路由核对解析连接的出口;https+local:// 属于本地模式,不能当作“强制走代理”的替代写法。若使用 IP 地址形式的 DoH 端点,要确保服务证书确实覆盖该地址,不要通过关闭证书验证解决连接错误。

五、流量探测:恢复域名,不替代 DNS 接管

在「设置」→「参数设置」中查找“流量探测”相关选项。不同版本可能使用“开启流量探测”或“启用流量探测”标签。它可从 HTTP Host、TLS 握手等可见信息恢复目标域名,辅助路由匹配;它无法撤回应用已经向本地解析器发送的查询。

以下仅展示 Xray 入站中的探测字段,用于理解配置含义,不是完整配置文件,也不是可以直接粘贴到 sing-box DNS 设置中的内容。

{
  "sniffing": {
    "enabled": true,
    "destOverride": ["http", "tls"],
    "routeOnly": true
  }
}

浏览器安全 DNS 同样要单独核对。Chrome 可从「设置」→「隐私和安全」→「安全」查看“使用安全 DNS”;Edge 可在设置中搜索“安全 DNS”。排查时先关闭它做一轮对照,再按最终策略决定是否启用。最终验收必须使用准备长期保留的状态,不能测试时关闭、测试后开启却不复测。

六、日志报错与命令行定位

内核日志中的错误只说明某一步失败,不等于已经发生泄漏。应结合目标地址、时间与出站标签定位。下面列出常见错误片段;前后缀可能随内核版本变化,不要要求整行日志与示例完全一致。

报错:lookup example.com: no such host

原因与解法:解析返回不存在或当前解析路径无法得到该域名——先核对域名拼写,用已知可用域名对照,再检查 DNS 规则是否把查询送到了错误解析器。

报错:context deadline exceeded

原因与解法:操作超过等待时间,DNS 请求和代理连接都可能触发——查看同一条日志的目标;若是 DoH 端点,检查它的路由、代理连通性与启动解析依赖。

报错:x509: certificate has expired or is not yet valid

原因与解法:系统时间或服务证书有效期异常——先同步 Windows 日期与时间,再确认端点证书状态,不要关闭 TLS 证书验证。

需要判断 Windows 当前采用的 DNS 地址时,可在 PowerShell 执行以下命令。它们用于查看网卡配置和验证系统解析,不是代理浏览器的等价测试。尤其是手动指定解析器的查询,在未被 TUN 接管时可能直接发往该地址。

Get-DnsClientServerAddress -AddressFamily IPv4
Get-DnsClientServerAddress -AddressFamily IPv6
Clear-DnsClientCache
Resolve-DnsName example.com -Type A
Resolve-DnsName example.com -Type AAAA

网卡列表里保留路由器 DNS,并不单独证明泄漏,因为 TUN 可能拦截发往它的请求。反过来,列表显示公共 DNS 也不能证明查询经过代理。需要进一步抓包时,在物理网卡检查 UDP/TCP 53 与 TCP 853 的直连流量;HTTPS 上的 DoH 无法仅凭端口 443 与普通网页区分,还要结合目的地址和内核日志。

结论:先修复失败链路,再讨论泄漏

如果远程 DNS 超时,先让它通过指定出站稳定工作,再关闭不符合策略的本地回退。否则只删除回退可能把“偶尔泄漏”变成“所有域名无法解析”,却没有解决真正的路由问题。

七、验收清单:把日常状态一起测完

完成修改后保存设置,按客户端提示重启内核;涉及 TUN 路由或虚拟网卡时,重新开关 TUN。最终验收不只检查一个网页,还应覆盖重新启动、网络切换与 IPv6。一个检测页只能说明该次浏览器请求的表现,不能替所有后台程序作保证。

稳定方案由三部分组成:应用流量进入预期入口,域名查询使用预期解析器,解析连接经过预期出站。TUN、DoH 与流量探测分别处理不同环节。把三者逐项验证,比反复更换公共 DNS 地址更容易定位问题,也更便于以后升级客户端时回归检查。