本文速览

本文适合已经完成订阅导入与基础连接、但遇到域名解析错误、分流命中不稳定或首次访问延迟的用户。配置目标是把境内域名交给本地解析器,把境外域名交给加密解析器,同时让 DNS 结果继续接受路由规则约束。读完可独立区分 DNS 查询策略、路由域名策略与系统 DNS 接管范围,并按日志和命令输出验证实际解析路径。

DNS 分流解决的不是单一速度问题

客户端访问网站时,通常先把域名转换为 IP 地址,再按照路由规则选择直连、代理或阻断出站。解析结果如果错误,即使 VMess、VLESS 或底层传输参数全部正确,连接仍可能被送往错误地址。解析结果如果来自不合适的区域,网站也可能返回距离较远的服务节点,表现为握手正常但首包慢。

境内域名使用本地递归解析器,主要价值是响应距离短,并能得到适合本地网络的地址。境外域名使用经代理访问的加密 DNS,主要用于减少查询被改写或被错误缓存的概率。这里的重点不是把所有查询强制交给一个服务器,而是让域名规则、DNS 服务器和最终出站保持一致。

域名请求规则判定选择解析器返回地址出站匹配

还要区分“客户端内置 DNS”和“操作系统正在使用的 DNS”。仅开启系统代理时,浏览器的 HTTP 流量可以进入 v2rayN,但部分应用仍可能直接调用系统解析器。TUN 模式可以接管更广的流量范围,不过是否接管 53 端口查询,仍取决于客户端生成的入站、DNS 劫持和路由配置。看到代理已连接,不等于所有 DNS 查询已经进入内核。

注意:修改 DNS 前先保存当前可用配置。一次只调整服务器分组、查询策略或路由策略中的一项,重新连接后立即测试。多个变量同时改变,会让日志难以指出真正原因。

先拆开四个容易混淆的配置层

一套可维护的 DNS 配置至少包含四层:解析服务器负责回答查询;域名规则决定使用哪组服务器;查询策略决定请求 A、AAAA 或两者;路由策略决定拿到域名或 IP 后如何匹配出站。四层参数名称相近,但作用位置不同。

境内解析组

服务器
223.5.5.5
端口
53
域名范围
geosite:cn
地址约束
geoip:cn

用于本地直连域名,优先降低解析往返时间。

境外解析组

协议
DNS over HTTPS
传输端口
443
域名范围
geosite:geolocation-!cn
推荐出站
代理

加密查询还需要路由到代理出站,不能只填写服务器地址。

查询策略

UseIP
按环境查询地址
UseIPv4
只请求 A 记录
UseIPv6
只请求 AAAA 记录
影响对象
DNS 返回类型

本地 IPv6 不稳定时,先用 UseIPv4 排除地址族问题。

路由域名策略

AsIs
优先保留域名
IPIfNonMatch
域名未命中再解析
IPOnDemand
需要 IP 规则时解析
影响对象
路由规则匹配

它与 dns.queryStrategy 不是同一个参数,不应互相替代。

expectIPs 用于检查解析结果是否符合预期地址范围。例如境内域名交给本地服务器后,可要求结果落入 geoip:cn。如果结果不符合,内核可以继续尝试后续服务器。skipFallback 则用于控制当前服务器匹配的域名是否参加回退,适合规则边界已经明确的分组。

结论:先确定流量归属,再选择解析服务器

域名计划直连,就优先选择能返回本地可达地址的解析器;域名计划代理,就让查询和访问都经过代理路径。只按“哪个 DNS 延迟低”排序,容易得到与出站区域不匹配的地址。

一份可读的分组配置怎么写

下面片段展示 Xray 内核常见的 DNS 分组结构。它适合用来理解字段关系,不建议覆盖客户端自动生成的完整配置。v2rayN、v2rayNG 与 v2flyNG 搭载的内核和版本可能不同,导入前应确认当前内核是否支持对应字段。

{
  "dns": {
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ],
        "expectIPs": [
          "geoip:cn"
        ],
        "skipFallback": true
      },
      {
        "address": "https://1.1.1.1/dns-query",
        "domains": [
          "geosite:geolocation-!cn"
        ]
      },
      "localhost"
    ]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch"
  }
}

第一组服务器只处理境内域名,并用地址范围约束返回结果。第二组处理非境内域名。最后的 localhost 是兜底项,是否保留取决于实际环境;如果系统解析器经常返回异常结果,可以改成另一台明确可达的服务器,但不要在没有日志依据时叠加过多兜底项。

加密 DNS 地址本身也可能包含域名。内核在建立 HTTPS 连接前,需要先知道这个服务端域名的 IP,这一步称为引导解析。使用 IP 形式的端点可以减少循环依赖;使用域名端点时,则要确保它能由本地服务器可靠解析,并确认对应查询不会再次递归进入同一条尚未建立的加密连接。

配置提示:订阅更新通常只替换节点信息,不一定同步覆盖本地 DNS 与路由规则。更新订阅后应检查自定义规则是否仍被当前配置引用。

v2rayN 与安卓客户端的设置顺序

v2rayN 7.x 可以先进入「设置」→「参数设置」,确认当前内核、系统代理与 DNS 相关选项,再进入路由设置检查规则集。不同小版本的菜单文字可能略有变化,但操作顺序应保持一致:先确认流量入口,再确认 DNS 设置,最后确认路由出站。修改后停止当前连接并重新启动,确保新配置被重新生成。

  1. 记录入口模式:确认当前使用系统代理还是 TUN。系统代理常见本地 HTTP 端口为 10809,SOCKS 端口常见为 10808,具体值以客户端界面为准。
  2. 检查 DNS 服务器组:境内组填写本地可达服务器,境外组填写加密查询端点,并给每组绑定清晰的域名范围。
  3. 检查路由规则顺序:精确域名规则放在大范围规则之前,阻断规则、直连规则和代理规则不要交叉覆盖。
  4. 重启连接:保存设置后重新连接,再清理操作系统与浏览器已有的 DNS 缓存。
  5. 读取内核日志:查找目标域名、DNS 服务器地址、出站标签和失败原因,不只看延迟测试结果。

v2rayNG 使用 Xray 内核,通常在「设置」中的 DNS、路由与 VPN 服务相关项目完成调整。v2flyNG 使用 v2fly 内核,配置字段支持范围应以内核实际版本为准。两者都不应直接复制另一种内核的完整配置;更稳妥的方式是先在图形界面选择服务器与查询策略,再查看生成配置是否符合预期。

53
传统 DNS 常用端口
443
HTTPS 加密查询端口
853
TLS DNS 常用端口
10808
常见本地 SOCKS 端口

这些端口只用于定位流量,不代表所有客户端都采用相同默认值。例如用户改过本地监听端口后,终端环境变量仍指向 10808,就会出现浏览器正常、命令行失败的分裂现象。检查 DNS 时也要同时确认应用究竟连接了哪个本地入口。

如何验证境内外域名确实分开解析

验证不能只看网页是否打开。浏览器可能复用旧连接,也可能保留自己的 DNS 缓存。应选取一个确定走直连的境内域名和一个确定走代理的境外域名,分别检查解析结果、查询耗时、内核日志与最终出站。

检查项 预期结果 异常信号
境内域名解析 命中本地服务器,结果符合境内地址范围 查询进入境外加密组,首次访问延迟明显增加
境外域名解析 命中加密服务器,并通过代理出站建立连接 日志显示查询直接发往系统 DNS
A 与 AAAA 记录 返回类型符合 queryStrategy 仅有不可达 IPv6 地址,连接等待后才回退
路由命中 域名规则与最终 IP 规则指向一致出站 DNS 走代理,但目标连接被 IP 规则改为直连

在 Windows 终端可用 nslookup 指定服务器进行基线测试。下面第一条测试本地解析器是否可达,第二条查看系统当前解析路径。系统命令得到的结果不一定经过 V2Ray 内置 DNS,因此它更适合用于对照,而不是单独证明内核分流已经生效。

nslookup example.cn 223.5.5.5
nslookup example.com
ipconfig /flushdns

浏览器测试前应关闭并重新打开目标页面,避免复用旧连接。随后查看 v2rayN 的实时日志,确认目标域名先命中哪条 DNS 规则,再确认连接命中 direct、proxy 或 block 对应的出站标签。如果日志只有 IP,没有原始域名,应检查流量入口是否保留域名信息,以及嗅探设置是否适用于当前协议。

结论:以日志中的解析器和出站标签作为验收依据

同一个域名连续测试三次时,缓存会让第二次和第三次几乎不产生远端查询。先清理缓存,再用首次查询日志判断服务器组;随后用连接日志判断最终出站,两项都符合规则才算分流完成。

常见失败现象与对应修正

最常见的问题是加密 DNS 已填写,但它自身被路由到直连。表现为普通节点可以连接,境外域名却持续解析超时。处理时先查加密 DNS 端点的域名或 IP 命中了哪条规则,再给它建立明确的代理出站规则。不要因为超时就不断增加备用服务器,否则实际查询路径会变得不可预测。

系统代理已开启,为什么系统查询仍走本地 DNS?

系统代理主要影响遵循代理设置的应用连接,不必然接管操作系统发出的 UDP 53 查询。需要结合 TUN、DNS 劫持或应用自身的代理解析能力处理,并通过日志确认查询是否进入内核。

境内网站能打开,但图片加载很慢怎么办?

页面与图片可能来自不同域名。检查静态资源域名是否被 geosite:geolocation-!cn 规则送到境外解析组,也要检查返回地址是否被后续 IP 规则改走代理。按实际域名添加精确规则,不要把整个顶级域名直接放行。

启用 UseIPv4 后恢复正常,是否应该永久保留?

它说明异常可能来自 IPv6 地址不可达、路由缺失或网络质量不稳定。当前网络只需要 IPv4 时可以保留;如果后续需要 IPv6,应先检查本地地址、默认路由和代理节点的 IPv6 支持,再恢复 UseIP 测试。

规则集更新后解析结果突然改变是什么原因?

域名可能被移动到新的分类,或者客户端更新了 geosite 与 geoip 数据。记录更新前后的命中规则,给业务关键域名增加优先级更高的精确规则,再观察是否恢复。精确规则应少而清楚,避免形成难以维护的长名单。

另一个常见问题是浏览器启用了独立的安全 DNS,而客户端也配置了加密 DNS。此时查询可能绕过客户端分组逻辑,日志中看不到目标域名。排查阶段应统一查询入口:要么让浏览器查询进入代理并由客户端处理,要么明确记录浏览器自己的解析端点与代理路径,避免两套策略同时工作。

稳定配置的收尾原则

完成验证后,保留一组境内解析器、一组境外加密解析器和一个用途清楚的兜底项即可。服务器数量越多,不代表可靠性越高;没有域名边界和回退条件的长列表,只会增加随机命中与故障定位成本。

路由规则也应保持相同原则:先放业务需要的精确域名,再放 geosite 分类,最后处理 IP 分类与默认出站。DNS 分组与路由分组使用同一套“境内直连、境外代理”意图,才能避免解析阶段和连接阶段互相推翻结果。

  1. 保存一份已验证可用的基础配置。
  2. 记录客户端版本、内核类型、入口模式与本地监听端口。
  3. 为境内和境外各选择一个固定测试域名。
  4. 规则集或订阅更新后重新执行首次查询测试。
  5. 出现异常时按“入口、解析器、地址结果、路由出站”顺序读取日志。

最终验收标准很明确:境内域名由本地解析器快速返回合理地址,并命中直连出站;境外域名由加密解析器查询,解析请求和目标连接都命中代理出站;未分类域名有稳定兜底;IPv4 与 IPv6 返回类型符合当前网络能力。满足这四项后,再考虑缓存时间、规则细化和个别域名覆盖。