2026-07-08 · 故障排查 · 约 12 分钟

DNS 泄漏怎么检测:V2Ray 防泄漏 DNS 配置实操步骤

先讲清 DNS 泄漏的成因与判断方法,再动手改客户端 DNS 设置:远程解析、内置 DNS 分流与 TUN 模式下的注意事项,附验证泄漏是否修复的步骤。

本文速览

适合已经能连接节点、但 DNS 检测结果仍出现本地网络解析器的人。全文会先区分正常分流与真实泄漏,再分别调整 v2rayN、v2rayNG 和 TUN 模式的解析路径,最后用一套可重复的对照测试确认修复结果。

先确认检测结果是不是 DNS 泄漏

DNS 的作用是把域名换成 IP 地址。浏览器访问一个网站时,通常先询问解析器,再向解析结果对应的服务器建立连接。代理连接正常并不代表这次询问也经过代理:网页流量可能从节点出去,DNS 请求却仍发给路由器、运营商解析器或系统里预设的服务器。

判断泄漏不能只看检测页面列出了几个 DNS 地址。公共解析服务往往使用全球调度,页面看到的出口城市可能与节点城市不同;解析器名称也可能是公共服务商或其上游网络。真正需要关注的是:连接前出现的本地运营商解析器,在连接后是否仍然出现,以及解析请求是否绕过了预期的代理或加密通道。

  1. 完全退出客户端,记录当前公网出口地区、DNS 提供方数量和解析器地区。
  2. 启动客户端,选择一个位置明确的节点,开启系统代理或 TUN,再刷新检测页面。
  3. 更换一个新域名重新测试,避免浏览器和系统 DNS 缓存直接返回旧结果。
  4. 比较两次结果,不要只比较 IP;同时看运营商名称、网络归属和地区是否仍指向本地接入网络。

结论:先比较连接前后,不要只看地图位置

节点出口与 DNS 解析器不必位于同一城市;只要本地接入网络不再收到本应远程解析的域名查询,且解析路径符合分流设计,就不应仅凭地区不同判定泄漏。

DNS 为什么会绕过 V2Ray 连接

系统代理主要接管支持 HTTP 或 SOCKS 代理的应用连接,并不天然接管操作系统发出的全部 DNS 数据包。部分应用先调用系统解析接口取得 IP,再把连接交给代理;这时域名查询已经从物理网卡发出。另一些应用支持 SOCKS 远程解析,会把域名直接交给代理端处理,两者的结果并不相同。

浏览器自带的安全 DNS、路由器下发的 DNS、企业网络策略和虚拟网卡设置,也可能各自建立解析路径。排查时必须把“谁发起查询”“查询交给谁”“数据包从哪个出站发送”分开看。只修改一个 DNS 地址,却没有改变查询经过的出站,通常不能解决路径问题。

应用请求域名系统或 TUN 接管内置 DNS 分流选择解析器指定出站发送返回解析结果

最常见的四条旁路

在 v2rayN 中设置内置 DNS 与分流

下面以 v2rayN 7.12.5、Xray-core 25.6.8 的测试界面为例。菜单名称在小版本间可能调整,但处理顺序不变:先确定解析器,再让国内与远程域名进入对应规则,最后检查生成配置和核心日志。若当前只使用系统代理,v2rayN 的本地 SOCKS 入口通常是 127.0.0.1:10808,应用必须支持代理或由系统代理接管才会走这条入口。

  1. 打开「设置」→「DNS 设置」,先备份当前内容,避免修改失败后无法恢复。
  2. 将远程解析器设置为支持加密查询的地址,例如 https://1.1.1.1/dns-query,并确保该解析器的连接按规则进入代理出站。
  3. 为国内域名保留独立解析器,例如 223.5.5.5,配合 geosite:cngeoip:cn 限定结果范围。
  4. 打开「设置」→「参数设置」,确认核心类型为 Xray,并检查路由模式没有把所有 DNS 连接强制送往直连。
  5. 保存后重启核心,在日志里观察是否出现解析超时、节点域名无法解析或 DNS 出站被拒绝。

自定义配置用户可以参考下面的结构理解内置 DNS 分流。它不是所有订阅都能直接覆盖的通用文件;图形界面可能合并用户设置与订阅生成项,因此应重点核对最终生成配置,而不是只看输入框。

DNS 分流结构示例
{
  "dns": {
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "domains": ["geosite:cn"],
        "expectIPs": ["geoip:cn"]
      },
      {
        "address": "https://1.1.1.1/dns-query",
        "domains": ["geosite:geolocation-!cn"]
      }
    ]
  }
}

queryStrategy 决定优先查询哪类地址。只需要 IPv4 时使用 UseIPv4 可以减少双栈环境中的不确定性;确认网络、节点和目标站都能稳定使用 IPv6 后,再选择包含 IPv6 的策略。它不会自动决定 DNS 连接走直连还是代理,出站仍由路由规则控制。

结论:解析器地址与出站规则必须一起改

把普通 DNS 换成加密 DNS 只改变查询协议;只有再确认该连接走向预期出站,才能避免解析请求从本地网络直接发出。

在 v2rayNG 中处理远程 DNS

Android 上的关键区别是 VPN 模式会通过虚拟网络接口接管更多流量。以下操作以 v2rayNG 1.10.31、Xray 内核为例:进入「设置」→「VPN 设置」,检查“远程 DNS”“本地 DNS”和本地 DNS 启用状态。不同界面翻译可能略有差异,应以字段用途为准。

  1. 在「设置」→「VPN 设置」→「远程 DNS」填写计划用于代理域名的解析器,例如 https://1.1.1.1/dns-query
  2. 在「本地 DNS」保留能够直接访问的解析器,例如 223.5.5.5,用于国内规则和节点连接前的必要解析。
  3. 进入「设置」→「路由设置」,确认国内域名规则位于兜底规则之前,避免先被全局代理规则命中。
  4. 断开再重新连接 VPN,不能只返回主界面;旧虚拟接口和 DNS 缓存可能继续保留。
  5. 分别用浏览器与另一个需要联网的应用测试。如果只有浏览器结果异常,再检查浏览器自己的安全 DNS 设置。

v2rayNG 使用 Xray 内核,VMess 与 VLESS 节点都可以配合内置 DNS 和路由分流。协议名称本身不会自动防止 DNS 泄漏;决定结果的是 VPN 接管范围、DNS 配置和出站规则。v2flyNG 使用 v2fly 内核时也是同一排查思路,但配置字段支持范围应以客户端实际生成结果为准,不要直接照搬只适用于 Xray 的扩展项。

TUN 模式下还要检查哪些位置

TUN 模式通过虚拟网卡接管不主动支持系统代理的应用,因此更适合统一处理 DNS,但它也不是打开开关就结束。虚拟网卡的路由优先级、DNS 劫持规则、局域网绕过范围和 IPv6 路径必须互相匹配。尤其是物理网卡仍保留可用 IPv6 DNS 时,IPv4 测试看似正常,部分查询却可能从另一条链路发出。

应用发起查询TUN 网卡捕获拦截 DNS 流量匹配域名规则直连或代理解析

TUN 检查清单

FakeDNS 会先返回一段保留地址,再由内核保存“虚拟 IP 与原域名”的映射。这有利于接管只携带目标 IP 的连接,并让域名分流继续生效,但它不等于真正完成远程解析。最终访问目标前,内核仍要根据规则取得真实地址;映射池冲突、应用缓存过久或嗅探关闭,都可能造成连接失败。

从核心日志定位 DNS 报错

检测页面只能告诉你结果,核心日志才适合定位原因。先把日志级别临时调到信息或警告,重新连接后访问一个此前没有打开过的域名。重点查看报错发生在解析节点地址、连接远程解析器,还是取得目标地址之后的出站阶段。

报错:failed to find an available destination

原因与解法:节点地址或目标域名没有得到可用结果。检查节点域名拼写,为节点保留可访问的引导 DNS,然后重启核心。

报错:lookup failed: context deadline exceeded

原因与解法:解析器连接在超时时间内没有响应。确认加密 DNS 地址可达,并检查其连接是否被错误地送入不可用出站。

报错:lookup: no such host

原因与解法:域名不存在、被输入错误,或上游返回空结果。换一个确定存在的新域名复测,再核对订阅中的服务器地址。

报错:failed to dial to DNS server

原因与解法:内核无法建立到解析器的连接。检查路由规则、网络权限和解析器端口,不要把解析器自身域名放进循环解析路径。

如果日志没有 DNS 错误,但检测仍出现本地解析器,问题多半发生在核心之外:应用走了系统解析、浏览器建立了独立连接,或者 DNS 数据包没有进入 TUN。此时应对比系统代理与 TUN 两种模式,而不是反复更换 VMess、VLESS 节点。

修复后怎样做最终验证

最终验证至少覆盖“首次查询、重复查询、断线恢复”三种状态。首次查询用于检查真实解析路径,重复查询用于观察缓存稳定性,断线恢复则能发现客户端重连后虚拟网卡或路由规则没有重新加载的问题。

  1. 退出客户端,记录基线结果,包括出口地区、DNS 网络归属和解析器数量。
  2. 清理系统与浏览器 DNS 缓存,启动客户端并访问一个从未测试过的域名。
  3. 连续执行 3 轮检测,每轮间隔至少 10 秒,记录是否重新出现本地运营商解析器。
  4. 断开连接 15 秒后重新连接,再执行 3 轮检测,确认配置在重连后仍生效。
  5. 切换一次 Wi-Fi 与移动网络,重新建立连接,检查引导 DNS 和 TUN 路由是否适应网络变化。

连接后看到多个 DNS 地址,就是泄漏吗?

不是。公共解析服务可能返回多个节点。先与直连结果比较,只要本地接入网络的解析器不再出现,并且查询按预期出站,就不能仅凭数量判断泄漏。

为什么系统代理正常,DNS 检测还是本地网络?

系统代理没有接管应用发出的系统 DNS。先在 v2rayN 的「设置」→「DNS 设置」配置内置解析,再让应用使用 SOCKS 远程解析;需要统一接管时再测试 TUN。

换成加密 DNS 后网页反而打不开?

先检查解析器连接是否被送进了尚未建立的代理,随后为节点域名保留引导解析。日志出现超时时,再核对远程 DNS 地址与路由顺序。

只有浏览器检测异常,其他应用正常怎么办?

进入浏览器网络设置,暂时关闭其独立安全 DNS,再重新检测。如果结果恢复,说明浏览器绕开了客户端的 DNS 规则,应统一两边的解析策略。

每次重连后结果都不一样正常吗?

公共解析节点变化可以接受,本地运营商解析器间歇出现则需要继续排查。重点检查 TUN 重建日志、物理网卡 DNS 优先级和 IPv6 路径。

稳定的目标不是让检测页面永远只显示一个地址,而是让解析路径可解释、可重复。国内域名按规则使用直连解析,远程域名通过预定解析器和出站处理,节点域名具备独立的引导解析能力,这三部分同时成立,DNS 分流才算完整。

下载 V2Ray 客户端 按系统选择 v2rayN 或 v2rayNG