DNS 泄漏检测方法与 v2rayN、v2rayNG 防泄漏配置实操

介绍 DNS 泄漏的成因与在线检测判读方式,并分别给出桌面端与安卓端关闭系统 DNS 回退、启用 FakeDNS 与路由兜底的设置步骤。

本文速览

网页能通过代理打开,不代表域名查询也走了代理。本文先区分系统解析、内核 DNS 与浏览器安全 DNS,再用对照测试定位出口;桌面端检查系统代理与 TUN,安卓端检查 VPN 接管、分应用排除与私人 DNS,最后用 FakeDNS、上游路由和断线测试验证配置。适合已经导入订阅、想确认 DNS 实际去向的用户。

一、DNS 泄漏看的是查询路径,不只是国家标签

DNS 把域名转换成 IP。应用可能先让系统解析,再把 IP 交给代理;也可能把域名直接交给本地代理,由内核或远端处理。两条路径都能打开网页,但前者的查询可能先到本地网络提供的解析器。所谓泄漏,应当相对于你的规则判断:原本要求经过代理的域名,却经由本地出口解析,才是这里要处理的问题。

境内域名按计划使用本地 DNS,不应直接算作泄漏。VLESS、VMess 是代理协议,REALITY 是连接安全相关机制;它们不会自动决定操作系统怎样发出 DNS 请求。订阅里有节点参数,也不等于订阅同时带来了完整的 DNS 接管和路由策略。

先选目标:全代理验证,还是日常分流

全代理验证
  • 测试应用与解析请求都纳入代理范围。
  • 远程 DNS 上游的连接也应经过代理出站。
  • 适合排除本地解析干扰,建立可复现的基线。
日常分流
  • 明确允许的本地域名交给本地解析器。
  • 需要代理的域名交给远程上游。
  • 未命中域名与 DNS 连接都要有明确的兜底策略。

先用全代理建立基线,再恢复分流;否则很难区分规则允许的直连与意外绕行。

二、在线 DNS 检测:做三组对照再下结论

在线检测通常让浏览器请求一批随机子域名,再观察哪些递归解析器来查询。结果显示的是解析器的出口,不一定是你设备连接的上游地址,也不一定与代理节点在同一城市。公共 DNS 使用任播和转发集群,单靠地图或国家名称无法判定泄漏。

  1. 记录直连

    先停止代理,在浏览器访问 dnsleaktest.com,运行标准测试,再运行扩展测试。记录网络类型、时间、解析器 IP 和所属机构,作为本地网络的对照。

  2. 测试代理

    启动客户端,确认同一个浏览器已被接管,重新开启测试。保留同一节点与同一网络,不要同时更改 DNS、路由、浏览器设置三个变量。

  3. 隔离浏览器

    在浏览器设置内搜索「安全 DNS」,临时关闭该功能后再测一次。测试后是否恢复,取决于你是否打算单独管理浏览器的加密 DNS 路径。

  4. 复测断线

    在允许短时中断网络的环境中断开代理节点,再发起新测试。如果目标是失败即停止访问,断线后仍能解析并访问新域名,就要检查系统直连、VPN 旁路与应用回退。

观察结果优先核对不能直接推出的结论
代理后仍出现本地运营商解析器系统 DNS、应用排除、UDP 53 直连不能仅凭网页出口正常就忽略该结果
出现两个公共 DNS 机构浏览器安全 DNS、系统私人 DNS、上游回退不代表必然存在两条物理网络出口
解析器与节点国家不同上游机构、任播节点与实际路由不能直接认定 DNS 泄漏
全代理正常,分流后变化域名匹配、规则顺序与默认出站不能直接认定节点失效

三、v2rayN 桌面端:系统代理与 TUN 分开排查

以下以 v2rayN 7.x 的设置结构为参考。不同小版本的分组名称可能调整,先核对当前运行的内核,再查看生成配置。尤其注意:TUN 模式实际使用的组件及 DNS 配置,可能与普通系统代理模式不同,修改 Xray 的 DNS 字段不一定会作用到当前 TUN 路径。

TUN 接管后验证

推荐

需要覆盖多种应用时,先检查 TUN 是否成功创建、DNS 是否被接管,以及 IPv4、IPv6 是否都按预期处理。TUN 不是天然的断网保护,退出客户端后的行为仍要单独验证。

适合:希望统一管理应用流量与 DNS 的桌面环境。

仅用系统代理

系统代理只影响遵循该设置的应用,不是操作系统级 DNS 劫持。应用若先调用系统解析,查询仍可能直连;使用 SOCKS 的程序还要确认是否把域名交给代理解析。

适合:只管理明确支持代理、且能确认远程解析行为的应用。

  1. 确认运行模式

    打开「设置」→「参数设置」,核对核心相关选项;回到主界面检查「系统代理」与「启用 TUN」的实际状态。不要把托盘中的系统代理已开启,理解成所有程序都进入了隧道。

  2. 检查解析上游

    进入「设置」→「DNS 设置」,分别检查当前内核对应的配置。远程上游可使用 https://1.1.1.1/dns-query 作为测试对象,随后确认该地址的连接路由到代理,而非仅填写一个 DoH URL。

  3. 验证本地端口

    在「设置」→「参数设置」查看本地监听端口,再与浏览器或应用的代理地址核对。例如实际监听为 127.0.0.1:10808,应用也应使用该端口及对应代理类型;示例端口不能代替现场配置。

  4. 清理旧缓存

    Windows 打开终端执行 ipconfig /flushdns,退出并重新打开浏览器,再测试新域名。已有连接和浏览器自己的缓存不会全部随这条命令消失。

Windows 多网卡环境还要检查 Wi-Fi、有线网卡与虚拟网卡。支持组策略的系统可在「计算机配置」→「管理模板」→「网络」→「DNS 客户端」中,将「关闭智能多宿主名称解析」设为「已启用」。这是减少并行查询的辅助措施,不替代 TUN 接管,也不是所有系统 DNS 回退的总开关。修改后仍以实际测试为准。

四、v2rayNG 安卓端:先收进 VPN,再检查私人 DNS

以下以 v2rayNG 1.9.x 常见设置结构为参考。v2rayNG 使用 Xray 内核,但系统 VPN 接管、安卓私人 DNS 和浏览器安全 DNS 属于不同层。v2flyNG 使用 V2Fly 内核,不能直接照搬这里的全部选项与配置字段。

  1. 确认应用范围

    打开侧边栏「设置」→「分应用代理」,确认测试浏览器没有被排除。排查时可临时关闭分应用代理,让测试范围更清楚;如果使用允许列表,浏览器必须在列表内。

  2. 核对本地 DNS

    进入侧边栏「设置」,找到「启用本地 DNS」并开启,核对「远程 DNS」与「国内 DNS」字段。部分版本将这些选项归入 DNS 设置分组;远程上游地址和国内上游地址应分开确认,不能凭字段名称推断最终出站。

  3. 测试私人 DNS

    安卓原生设置路径通常为「设置」→「网络和互联网」→「私人 DNS」。先记录原值,再临时设为「关闭」建立内核 DNS 基线。厂商系统可能叫「私有 DNS」,可在系统设置搜索该名称。

  4. 重建 VPN

    保存设置后停止连接,再重新启动,确认系统出现 VPN 连接状态。切换 Wi-Fi 与移动网络后各测一次;若只有一种网络异常,重点检查该网络的 IPv6、DNS 可达性与 VPN 重连情况。

  5. 测试断线保护

    如需失败即停止访问,在安卓「设置」→「网络和互联网」→「VPN」→「v2rayNG」中检查「始终开启的 VPN」及「屏蔽未使用 VPN 的连接」。系统是否提供这些选项取决于设备与应用状态,启用后须验证分应用规则是否仍符合预期。

五、FakeDNS:减少提前解析,不代替远程上游

FakeDNS 返回合成地址,并在后续连接中把地址映射回域名。这样内核能保留域名信息,用于路由匹配和代理转发。它本身不是加密 DNS 服务,也不会自动让所有真实解析经过代理;需要真实 IP 的直连流量,仍要有合适的解析上游。

在 v2rayNG 的「设置」内查找「启用 Fake DNS」。启用前先确认「启用本地 DNS」已生效,保存后重启 VPN。桌面端则要依据当前 TUN 组件的 FakeIP/FakeDNS 支持方式配置,不能把 Xray 的 FakeDNS 对象直接复制到另一种配置格式里。

FakeDNS 链路

返回内容
合成地址,不是目标真实地址
IPv4 池示例
198.18.0.0/15
关键依赖
DNS 查询与后续连接由同一套映射处理
排查重点
地址还原、嗅探配置与应用兼容性

该地址池用于合成映射,不是应填写到系统 DNS 栏里的解析器。

真实 DNS 链路

返回内容
目标的真实 A 或 AAAA 记录
普通 DNS
通常使用 UDP/TCP 53
DoH
通常通过 HTTPS 443 查询
排查重点
上游连接出站、回退与引导解析

端口被加密不等于出口符合预期,仍要核对承载连接的路由。

六、关闭回退与路由兜底:分别处理两层配置

“关闭系统 DNS 回退”不是一个跨平台通用按钮。客户端内核的备用上游、Windows 的多网卡查询、安卓的网络切换,以及浏览器自己的安全 DNS,必须分别排查。Xray 的 disableFallback 只控制内置 DNS 的备用查询行为,不会替操作系统阻止直连。

下面是 Xray DNS 与路由的局部示例,不是完整配置。它只展示远程上游及其出口约束:现有配置必须已经定义标签为 proxy 的代理出站,并让应用查询进入内核 DNS。客户端自动生成的配置,应通过对应编辑入口调整并检查最终结果,不能覆盖原配置后直接运行。

{
  "dns": {
    "servers": [
      "https://1.1.1.1/dns-query"
    ],
    "queryStrategy": "UseIPv4",
    "disableFallback": true
  },
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "ip": [
          "1.1.1.1/32"
        ],
        "port": "443",
        "network": "tcp",
        "outboundTag": "proxy"
      }
    ]
  }
}

此处使用 IP 形式的 DoH 地址,是为了减少解析上游域名时的引导依赖。UseIPv4 仅限制这段内置 DNS 查询的地址族,不会关闭系统 IPv6。示例没有域名分流,也没有应用 DNS 接管规则,不能据此宣称已经完成全局防泄漏。

七、验收:同时看浏览器结果、日志和断线行为

完成修改后,不要只留一张检测页截图。应记录客户端版本、运行模式、网络类型、远程上游以及测试应用。先验证单一上游和全代理,再逐项恢复国内域名分流、浏览器安全 DNS、分应用规则;每恢复一项就复测,才能定位是哪一层改变了解析路径。

验收项目执行方式预期证据
普通 DNS 外发在物理网卡观察 udp.port == 53 || tcp.port == 53没有违背预设规则的明文查询;回环与虚拟网卡流量另行判断
远程上游出站临时提高日志级别,观察上游连接与出站标签远程 DNS 连接命中预期代理出站
浏览器独立解析分别关闭、开启安全 DNS 后测试结果变化可由所选上游与路由解释
IPv6 接管在双栈网络复测并检查物理网卡查询没有未纳入策略的 IPv6 解析旁路
代理失败中断代理后请求新域名行为符合预设的停止访问或允许直连策略

物理网卡没有 53 端口流量,只能说明没有观察到这类明文 DNS;浏览器 DoH 仍可能通过 443 直连。加密查询需要结合上游目标、连接路由和日志判断。临时调高日志级别后也应恢复日常级别,分享日志前先移除订阅地址、用户标识和访问域名。

使用 DoH 后,为什么检测页仍显示本地附近的解析器?

公共 DNS 可能使用就近任播节点,地理位置并不能说明是否直连。先确认检测页显示的机构,再查 DoH 连接是否经过代理。如果只有浏览器结果不同,优先排查浏览器自己的安全 DNS。

开启 FakeDNS 后,还需要配置远程 DNS 吗?

通常仍需要。FakeDNS 负责合成地址与域名映射,不负责所有真实解析。直连目标、特定地址查询和其他需要真实 IP 的场景,都可能用到实际 DNS 上游。

检测一直正常,能否证明所有应用都不会泄漏?

不能。检测只证明当次测试范围内的行为。后台应用、应用自带 DoH、分应用排除、网络切换和 VPN 停止后的访问,都需要独立验证。可靠的配置是路径可解释、失败行为可预期,而不是结果页只出现某一个国家。

客户端下载v2rayN / v2rayNG