V2Ray DNS 泄漏怎么查:检测步骤与 dns 模块防泄漏写法

讲解 DNS 泄漏的成因与检测方法,给出 dns servers、domainStrategy 与 FakeDNS 的防泄漏配置示例,并说明 v2rayN 中对应的设置位置。

本文速览

适用于网页已经通过代理访问,但 DNS 检测仍出现本地运营商解析器,或修改 DNS 后部分域名无法打开的情况。先区分浏览器、系统与内核三条解析路径,再用对照测试定位请求来源,最后按当前内核合并 DNS 与路由片段。文中配置不是完整节点文件,不能覆盖现有代理出站。

DNS 泄漏的判断:看解析路径,不只看地区

DNS 泄漏指本应沿预期代理路径处理的域名查询,实际交给了非预期的解析器。例如网页连接已经走代理,但应用先向路由器查询域名,路由器再转交本地运营商。网页出口地址改变,并不代表解析路径也随之改变。

应用提交域名选择解析路径查询解析器路由选择出站建立目标连接

浏览器的安全 DNS、操作系统的 DNS、V2Ray 内置 dns 可以同时存在。只有请求进入相应处理链,相关设置才会生效。系统代理通常只接管遵循代理设置的应用连接,不等于捕获所有 UDP 查询;在 JSON 中添加 dns.servers,也不会自动接管网卡的 DNS。

判断:先确认解析器归属

检测页出现与节点不同的国家,不足以认定泄漏。先记录解析器地址和运营方,再核对它是否属于预期 DNS 服务;公共解析器的任播部署和检测数据库都可能影响地区显示。

检测步骤:建立直连与代理两组对照

测试时固定浏览器、网络和检测服务。每轮记录网页出口 IP、解析器 IP、浏览器安全 DNS 状态、客户端路由模式。以下是操作方法,不是本站实测结果;不要把某一轮解析器数量当作通用合格线。

  1. 记录基线

    暂时退出代理连接,运行一次浏览器 DNS 泄漏检测,记下解析器地址及运营方。共享办公网络或单位设备先确认是否允许修改网络设置。

  2. 固定浏览器

    在浏览器「设置」内搜索「安全 DNS」,记录当前状态。排查时可临时关闭以隔离浏览器自带解析,完成后恢复原设置;不要同时修改系统 DNS。

  3. 启用代理

    启动 v2rayN,在托盘菜单「系统代理」中选择「自动配置系统代理」,确认活动服务器及路由模式。重新打开检测页,发起新一轮测试。

  4. 清理缓存

    Windows 终端运行 ipconfig /flushdns,随后完全退出并重开浏览器。此命令只清理系统缓存,不能代替清理浏览器自身缓存。

  5. 逐项复测

    每轮只改一个变量:先浏览器解析,再内核 DNS,最后接管方式。至少重复两轮;若结果不稳定,保留时间和日志,避免把旧缓存误判为新配置生效。

命令行可以辅助判断请求入口。下面使用示例 SOCKS 端口 10808,实际端口以客户端为准。--socks5-hostname 把目标域名交给 SOCKS 代理;它能验证这条应用连接的域名交接方式,但不能证明全系统没有旁路 DNS。

curl.exe --proxy socks5h://127.0.0.1:10808 https://example.com/ --head
ipconfig /flushdns
Resolve-DnsName example.com -Type A

最后一条命令在 PowerShell 中运行,通常走系统 DNS 路径,不会因为设置了 HTTP 系统代理就自动交给 V2Ray。它与浏览器结果不同,恰好说明两者入口不同;不能直接据此判定内核配置失效。

端口与协议:区分本地代理、DNS 和 DoH

53
传统 DNS 常用 UDP/TCP 端口
443
DoH 常用 HTTPS 端口
10808
本文示例本地 SOCKS 端口

不要把网卡 DNS 直接改成 127.0.0.1,除非确实已有本地 DNS 服务监听对应端口。SOCKS 监听与 DNS 监听不是同一种协议:把查询发送到 10808 不会自动获得 DNS 应答。客户端也可能使用混合监听,仍需按当前生成配置判断。

设置位置主要作用不能据此推断
系统网卡 DNS供遵循系统解析设置的程序使用不能保证浏览器自带 DoH 采用同一服务
内核 dns.servers指定内置 DNS 查询的上游不能自动接管其他程序发出的查询
routing.rules决定进入内核的连接选择哪个出站不能改写已在内核外完成的解析
TUN DNS 接管按实现捕获或重定向 DNS 流量不能保证所有加密 DNS 都被识别并改写

dns.servers 写法:给解析流量明确的代理路由

下面是 V2Ray/Xray 风格的合并片段,用于演示远程 DoH 与 DNS 流量标签。前提是当前内核支持这些字段,且现有 outbounds 中已有名为 proxy 的可用代理出站。若实际标签不同,必须改成实际值。不要将该片段作为完整配置启动。

{
  "dns": {
    "tag": "dns-query",
    "servers": [
      "https://1.1.1.1/dns-query"
    ],
    "queryStrategy": "UseIPv4"
  },
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "inboundTag": ["dns-query"],
        "outboundTag": "proxy"
      }
    ]
  }
}

DoH 加密的是客户端到解析服务的查询连接;它是否经代理,还取决于路由。部分内核支持名称带 +local 的本地处理模式,其路由行为与普通远程模式不同,不能为了“更快”直接替换本例。需要分流解析时,再增加域名限定的上游规则,并检查回退解析是否会使用非预期服务。

domainStrategy:路由解析与出站解析分别检查

domainStrategy 不是一个全局防泄漏开关。相同键名位于不同对象时,控制的是不同阶段。排错时必须连同 JSON 层级一起看,不能只搜索键名并批量替换。

字段位置或取值行为排查重点
routing.domainStrategy: AsIs路由阶段不为 IP 规则主动解析域名域名规则与默认出站是否完整
routing.domainStrategy: IPIfNonMatch域名未匹配规则时,尝试解析后进行 IP 匹配解析请求使用哪个 DNS 上游
routing.domainStrategy: IPOnDemand遇到需要 IP 判断的规则时触发解析IP 规则位置及额外解析量
freedom.settings.domainStrategy控制直连出站如何处理目标域名实际采用系统解析还是内置 DNS,取决于取值及内核

AsIs 只约束路由阶段,不代表目标连接永远不解析。请求若最终进入直连出站,仍需获得目标地址;请求若以域名形式交给代理端,通常由远端继续处理。保留国内站点直连时,也应先定义这些站点的解析策略,而不是把所有本地 DNS 请求一律当成故障。

操作:先固定 DNS 出站,再调整匹配策略

先验证带 dns-query 标签的流量确实命中代理出站,再按分流需求选择 AsIs 或其他策略。只把 IPIfNonMatch 改成 AsIs,不能修复应用在进入内核前已经完成的本地解析。

FakeDNS:地址映射不能代替流量接管

FakeDNS 返回的是保留地址池中的映射地址,而不是真实目标地址。内核保存域名与映射地址的关系;后续连接必须回到同一个处理链,再通过映射恢复域名。它适合具备 DNS 接管和连接回收能力的环境,不适合只复制一个字段就启用。

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ],
  "dns": {
    "servers": ["fakedns"]
  }
}

这是支持 FakeDNS 的 V2Ray/Xray 内核的概念片段,不包括 DNS 入站、转发和系统路由。需要恢复映射的既有入站,还应按内核能力合并以下嗅探设置;不要为此创建一个无法被实际流量命中的空入站。

{
  "sniffing": {
    "enabled": true,
    "destOverride": ["fakedns"]
  }
}

v2rayN 可管理不同内核;TUN 模式的 DNS 接管也可能由另一套配置结构实现。先确认实际运行内核,再决定是否使用上述 V2Ray/Xray 写法。其他内核的 TUN DNS 页面不能直接粘贴这段 JSON。

v2rayN 设置位置与常见报错

桌面端先检查「设置」→「参数设置」中的本地监听端口,再打开「设置」→「DNS 设置」检查当前内核对应的 DNS 项;部分版本将 DNS 入口收在参数设置内,字段也会随内核变化。保存后重新启动服务,并在运行日志中确认实际内核和配置加载结果。客户端更新、订阅更新或切换配置后,都应再核对生成配置是否仍保留修改。

排查系统代理时使用托盘菜单「系统代理」;排查 DNS 接管时检查主界面的「TUN 模式」及其设置,两者不是同一个开关。TUN 可能需要提升权限,也可能与现有虚拟网卡冲突,修改前记录原状态。不要同时开启多套接管程序来比较结果。

报错:failed to find an available destination

原因:可能是节点域名解析失败,也可能是连接候选地址均不可用,不能仅凭这一行认定 DNS 泄漏。解法:查看前后日志,先验证节点地址的解析,再检查 DNS 出站依赖和节点连通性。

报错:lookup example.com: no such host

原因:当前解析路径没有取得该域名的有效记录,日志中的实际域名可能不同。解法:检查域名拼写、上游返回及分流限制,用另一个已知可解析域名做对照,不要先改监听端口。

报错:context deadline exceeded

原因:操作超过等待时限,可能发生在 DNS 查询,也可能发生在后续连接。解法:依据日志中的目标地址区分超时阶段;若目标是 DoH 服务,检查它是否命中预期出站以及代理是否可用。

安卓端也要区分内核:v2rayNG 使用 Xray,v2flyNG 使用 V2Fly。系统 VPN 接管、应用绕过列表与安卓「私人 DNS」都可能改变解析路径,桌面系统代理的结论不能直接套用。相同节点在两端结果不同,先比较入口与解析器,而不是直接判断节点有问题。

v2rayN下载