2026-07-19 · 故障排查 · 约 9 分钟

V2Ray DNS 泄漏检测与防泄漏设置:现象、检测入口与配置项

解析请求走不走代理,不看界面开关,看日志里这条查询被哪个出站处理。下面先给判定标准,再给可复现的检测入口,最后落到 v2rayN 与 v2rayNG 的 DNS 与路由设置项。

本文速览

适合已经能连上节点、但不确定域名解析发生在哪一侧的用户。读完能分清设计内的直连解析与意外泄漏,会用访问日志和 53 端口过滤定位查询去向,并按 dns 出站标签、路由规则、域名嗅探、分应用代理逐项收紧配置。

判定标准:解析请求去了哪里

DNS 泄漏的准确定义不是「解析没走代理」,而是「解析交给了你不打算使用的解析器,而且发生在代理隧道之外」。在 V2Ray 的工作方式里,域名可以原样发给远端节点,由节点侧完成查询;也可以由客户端先解析成 IP,再按 IP 建立连接。两种都正常,区别是前者不暴露查询对象,后者会把查询内容和查询来源留在本地网络。

判定只看一件事:这条 53 端口的查询,最终由哪个出站处理。访问日志里出站标签是代理,解析就发生在节点侧;标签是 direct,解析就发生在本地。第二种不等于故障——「绕过大陆」模式下国内域名用本地 DNS 解析,响应快、结果也准。

真正要处理的是第三类情况:域名本应交给远端解析,却因为嗅探关闭、分应用代理漏配、应用自带加密 DNS 等原因,把查询送进了本地解析器。这类泄漏不会报错,只会安静发生,所以要用日志和抓包把它找出来。

应用发起解析入站捕获查询路由规则匹配DNS 出站解析结果回写连接

上面是正常路径。任何一环被绕过——应用不进内核、规则把查询判给直连、内核不做嗅探——查询就会提前落到本地解析器上,后续连接再走代理也补不回来。

四类典型场景与日志原文

下面四条是排错时最常看到的日志与报错,基本覆盖「查询走错方向」的常见情况。对照自己的日志看,能直接定位到是哪一层出的问题。

日志:accepted udp:223.5.5.5:53 [socks-in -> direct]

原因与解法:223.5.5.5 属于国内 IP,在「绕过大陆」类规则里会命中直连,查询因此留在本地。国内域名走这条路是正常设计;若希望所有查询都从节点侧发出,给 dns 段加独立标签,再用路由规则把它指向代理出站。

现象:日志里搜不到任何 :53 记录

原因与解法:查询根本没进内核——分应用代理把该应用排除了,或浏览器自带安全 DNS 走了 HTTPS 地址。先核对代理名单,再关掉浏览器的安全 DNS,复现一次看日志有没有记录。

报错:failed to find an available destination

原因与解法:出站地址解析不到可用结果,常见于把 DNS 查询本身送进了一个不可用的出站。先临时切回本地解析确认节点可用,再检查路由规则里 dns_inbound 标签的指向与节点地址拼写。

报错:context deadline exceeded

原因与解法:查询在超时时间内没有返回,通常是 UDP 53 被上游丢弃,或查询被送进了不通的出站。把解析地址换成 https 开头的加密 DNS 再复现一次,能区分是链路问题还是规则问题。

这四条里,涉及直连出站的那条要先确认是不是有意为之;涉及报错的两条则要检查规则与解析地址是否可用。把「设计内直连解析」和「意外泄漏」分开看,才不会被日志里的 direct 标签带偏。

检测入口:三个可复现的步骤

检测不依赖任何在线工具,客户端自己的日志加上一次 53 端口过滤,就能把解析走向看清楚。步骤在 v2rayN 与 v2rayNG 上都适用,桌面端多做一步抓包对照。

  1. 打开访问日志

    v2rayN 进「设置」→「参数设置」→「基础设置」,把「日志等级」调到 info 后重启内核;v2rayNG 在主界面右上角菜单里打开「日志」页面。

  2. 复现一次解析

    用系统自带浏览器打开一个普通站点,不要用开了安全 DNS 的浏览器,否则查询目标会变成 HTTPS 地址,按 53 端口过滤看不到。

  3. 过滤 53 端口

    在日志里搜「:53」,逐条看出站标签;桌面端同时用 Wireshark 过滤 udp.port == 53,对照物理网卡上还有没有明文查询。

  4. 核对代理名单

    打开「分应用代理」确认发起解析的应用在名单里;安卓端再检查系统「私人 DNS」的设置值,以及浏览器安全 DNS 是否开启。

几条证据要能互相印证:日志里查询走代理出站、物理网卡上抓不到明文 53 查询、应用名单没有漏配。只满足其中一条时,先解决不满足的那条再复测。把解析地址换成加密 DNS 后重跑一遍,如果日志里的出站标签和抓包结果同时变化,说明改动确实生效了。

v2rayN 侧:DNS 出站与路由规则

v2rayN 的图形选项能覆盖大部分场景,但要把 DNS 查询精确钉在代理出站上,得在配置里给 dns 段加标签。较新的 Xray 内核(1.8 起)支持在 dns 段写 tag,这个标签会作为入站标签参与路由匹配;同时把加密解析地址放在 servers 前面,需要本地解析时也会以加密形式发出。

{
  "dns": {
    "tag": "dns_inbound",
    "queryStrategy": "UseIPv4",
    "servers": [
      { "address": "https://1.1.1.1/dns-query", "domains": ["geosite:geolocation-!cn"] },
      { "address": "223.5.5.5", "domains": ["geosite:cn"] }
    ]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      { "type": "field", "inboundTag": ["dns_inbound"], "outboundTag": "proxy" },
      { "type": "field", "domain": ["geosite:cn"], "outboundTag": "direct" }
    ]
  }
}

这段配置做两件事:海外域名走加密 DNS 解析,国内域名走本地解析;DNS 查询本身带 dns_inbound 标签,被第一条规则送进代理出站。顺序不能反——dns_inbound 规则要排在域名规则前面,否则查询会先被 geosite:cn 之类的规则截走,标签就白加了。

设置项位置建议值作用
路由模式「设置」→「参数设置」→「路由设置」绕过大陆国内域名直连,其余走代理
域名解析策略「设置」→「参数设置」→「路由设置」IPIfNonMatch域名优先交给远端,匹配不到再按 IP 判断
域名嗅探「设置」→「参数设置」→「路由设置」开启,类型选 HTTP 与 TLS从握手里还原域名,避免按 IP 误判
DNS 服务器「设置」→「参数设置」→「DNS 设置」加密解析地址优先需要本地解析时,查询以加密形式发出
出站域名策略配置里 outbound 的 sockopt.domainStrategyAsIs域名原样发给节点,解析在节点侧完成

结论:先给 DNS 一条独立的路由

加密 DNS 只解决查询内容被看到的问题,不解决查询走哪个出站。正确顺序是先加 dns 标签、用路由规则把 dns_inbound 指到代理出站,再把解析地址换成加密形式;反过来做,加密查询照样可能从直连出站发出去。

v2rayNG 安卓端:路由模式、嗅探与分应用代理

v2rayNG 用 Xray 内核,连接后由系统 VpnService 接管流量,应用连接先进入内核再分流。安卓端的泄漏点集中在三处:分应用代理名单、域名嗅探开关、系统私人 DNS。下面以 v2rayNG 为准,v2flyNG 的设置项命名相近,可以对照查找。

还有一个容易漏的点:部分浏览器和 App 自带安全 DNS,查询目标是解析商的 HTTPS 地址而不是 53 端口,日志里搜「:53」根本搜不到。处理办法是把解析商域名写进代理规则,或者在浏览器设置里关掉安全 DNS,让解析回到内核的 dns 段。

结论:安卓端先查名单,再查嗅探

分应用代理漏配会让整个应用连同它的 DNS 一起绕开内核,影响面比嗅探开关大得多;排查顺序建议是名单、嗅探、私人 DNS,最后才是配置里的 dns 段。

常见追问

关闭嗅探后路由还是按 IP 走,有什么实际影响?

域名先在本地解析成 IP,连接按 IP 建立,直连与代理规则只能按 IP 判断;国内 CDN 域名容易被误送进代理,解析请求也留在了本地网络。打开嗅探能同时解决这两个问题。

「绕过大陆」模式下国内域名用本地 DNS,算泄漏吗?

不算。这是设计内的直连解析,查询对象是你自己选的本地解析器。要让国内域名也走节点侧解析,把路由模式切到「全局」,并接受由此带来的解析延迟变化。

检测结果里显示的解析器不是我填的 DNS,怎么回事?

先看浏览器是否开了安全 DNS,再看系统是否设了私人 DNS;这两处都会在应用层把解析交给别的解析器,客户端配置管不到。逐个关掉再复测。

订阅更新一直超时,和 DNS 有关吗?

有关。订阅域名的解析默认可能走直连,直连解析被污染或超时时更新就会失败。在订阅设置里勾选「通过代理更新订阅」,让请求和解析都从节点侧走。

填了加密 DNS 地址却没生效?

先确认内核版本支持该写法,再检查 dns 段的 tag 是否被路由规则引用,改完配置要重启内核。日志里 DNS 查询的出站标签变了,才算生效。

把 DNS 当成一条普通流量来管,思路就清楚了:看它在哪个出站被处理,给它独立的标签和规则,再决定哪些域名保留本地解析。v2rayNG 与 v2rayN 的图形选项覆盖了绝大多数场景,剩下的精度交给配置里的 dns 与 routing 两段。

下载 v2rayNG 安卓版与 v2rayN 桌面端 Xray 内核,支持 VMess / VLESS / Trojan / SS 订阅导入;下载页按平台列出对应版本与安装方式。
去下载页 看教程
下载 v2rayNG