本文适合已经完成订阅导入与基础连接、但遇到域名解析错误、分流命中不稳定或首次访问延迟的用户。配置目标是把境内域名交给本地解析器,把境外域名交给加密解析器,同时让 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 形式的端点可以减少循环依赖;使用域名端点时,则要确保它能由本地服务器可靠解析,并确认对应查询不会再次递归进入同一条尚未建立的加密连接。
- 域名集合要有边界:
geosite:cn与geosite:geolocation-!cn分工明确,避免同一域名同时命中多个服务器组。 - DNS 出站要单独检查:加密查询监听远端 443 端口,但路由规则仍可能把它误送到直连出站。
- 保留最终兜底:没有命中任何域名列表时,需要一台可用服务器回答查询,否则新域名会直接失败。
- 先限制为 IPv4 测试:如果网络没有稳定 IPv6,AAAA 结果可能造成连接等待,再回退到 A 记录。
配置提示:订阅更新通常只替换节点信息,不一定同步覆盖本地 DNS 与路由规则。更新订阅后应检查自定义规则是否仍被当前配置引用。
v2rayN 与安卓客户端的设置顺序
v2rayN 7.x 可以先进入「设置」→「参数设置」,确认当前内核、系统代理与 DNS 相关选项,再进入路由设置检查规则集。不同小版本的菜单文字可能略有变化,但操作顺序应保持一致:先确认流量入口,再确认 DNS 设置,最后确认路由出站。修改后停止当前连接并重新启动,确保新配置被重新生成。
- 记录入口模式:确认当前使用系统代理还是 TUN。系统代理常见本地 HTTP 端口为 10809,SOCKS 端口常见为 10808,具体值以客户端界面为准。
- 检查 DNS 服务器组:境内组填写本地可达服务器,境外组填写加密查询端点,并给每组绑定清晰的域名范围。
- 检查路由规则顺序:精确域名规则放在大范围规则之前,阻断规则、直连规则和代理规则不要交叉覆盖。
- 重启连接:保存设置后重新连接,再清理操作系统与浏览器已有的 DNS 缓存。
- 读取内核日志:查找目标域名、DNS 服务器地址、出站标签和失败原因,不只看延迟测试结果。
v2rayNG 使用 Xray 内核,通常在「设置」中的 DNS、路由与 VPN 服务相关项目完成调整。v2flyNG 使用 v2fly 内核,配置字段支持范围应以内核实际版本为准。两者都不应直接复制另一种内核的完整配置;更稳妥的方式是先在图形界面选择服务器与查询策略,再查看生成配置是否符合预期。
这些端口只用于定位流量,不代表所有客户端都采用相同默认值。例如用户改过本地监听端口后,终端环境变量仍指向 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。此时查询可能绕过客户端分组逻辑,日志中看不到目标域名。排查阶段应统一查询入口:要么让浏览器查询进入代理并由客户端处理,要么明确记录浏览器自己的解析端点与代理路径,避免两套策略同时工作。
- 查询超时:检查解析服务器可达性、443 或 853 端口路径,以及对应出站标签。
- 返回地址异常:检查域名分组、
expectIPs范围和本地缓存。 - 网页间歇失败:检查 A 与 AAAA 记录、IPv6 可达性和 Happy Eyeballs 回退等待。
- 规则不命中:检查域名规则优先级、路由
domainStrategy与规则集版本。 - 订阅更新后失效:检查客户端是否切换了配置组,以及自定义 DNS 是否仍绑定当前配置。
稳定配置的收尾原则
完成验证后,保留一组境内解析器、一组境外加密解析器和一个用途清楚的兜底项即可。服务器数量越多,不代表可靠性越高;没有域名边界和回退条件的长列表,只会增加随机命中与故障定位成本。
路由规则也应保持相同原则:先放业务需要的精确域名,再放 geosite 分类,最后处理 IP 分类与默认出站。DNS 分组与路由分组使用同一套“境内直连、境外代理”意图,才能避免解析阶段和连接阶段互相推翻结果。
- 保存一份已验证可用的基础配置。
- 记录客户端版本、内核类型、入口模式与本地监听端口。
- 为境内和境外各选择一个固定测试域名。
- 规则集或订阅更新后重新执行首次查询测试。
- 出现异常时按“入口、解析器、地址结果、路由出站”顺序读取日志。
最终验收标准很明确:境内域名由本地解析器快速返回合理地址,并命中直连出站;境外域名由加密解析器查询,解析请求和目标连接都命中代理出站;未分类域名有稳定兜底;IPv4 与 IPv6 返回类型符合当前网络能力。满足这四项后,再考虑缓存时间、规则细化和个别域名覆盖。