V2Ray DNS 配置详解:境内外分流解析与防污染实践

从域名查询、上游选择到路由出站,拆清 V2Ray DNS 分流的完整链路,并给出可直接检查的 DoH 配置与污染排查方法。
本文速览
本文适合已经能导入订阅、但遇到部分网站解析异常、首次连接慢或境内站点绕路的用户。重点是区分 DNS 解析线路与代理流量线路,建立境内域名走本地上游、境外域名走 DoH 的配置,再通过日志、解析结果和路由规则定位问题。

DNS 分流配置与验证要点

本节要点

先看懂 DNS 与路由的两次选择

访问一个域名时,客户端通常先要得到 IP 地址,随后才向该 IP 建立 TCP 或 UDP 连接。DNS 决定“域名解析成什么地址”,路由规则决定“连接从哪个出站发送”。这两次选择互相关联,却不是同一件事。只配置了域名分流规则,并不表示 DNS 查询一定按相同线路发送。
V2Ray 或 Xray 配置中的 dns 对象负责选择上游解析器、缓存结果和限制查询策略;routing 对象负责匹配域名、IP、端口、协议与入站标签。若应用已经在本机完成解析,核心接收到的可能只是目标 IP,此时仅包含域名的规则未必能命中。
应用请求域名选择 DNS 上游返回目标 IP匹配路由规则选择出站连接
系统代理与 TUN 模式也会影响链路。浏览器经 SOCKS 或 HTTP 代理提交域名时,核心通常还能看到原始域名;TUN 模式则需要客户端接管系统流量与 DNS 请求。v2rayN、v2rayNG 和 v2flyNG 的界面选项不同,但判断原则相同:先确认查询由谁发起,再确认查询经过哪条线路。
53
传统 DNS 常用端口
443
DoH 常用端口
A / AAAA
主要地址记录类型
2 次
解析与出站分别决策

分流解析收益

本节要点

境内外分流解析为什么有用

境内服务常使用按地区调度的 CDN。同一个域名交给不同地区的解析器,可能返回不同机房地址。境内域名使用距离较近的本地上游,通常更容易获得合适的边缘节点;境外域名交给可稳定访问的 DoH 上游,则能减少错误应答、查询超时和结果被改写带来的连接问题。
合理的目标不是把所有查询都塞进同一个公共解析器,而是让查询线路与访问意图一致。典型做法是用 geosite:cn 匹配境内域名,并用 geoip:cn 校验返回地址;其余域名交给指定的 DoH 上游。规则库需要随客户端或核心更新,否则新域名可能落入兜底规则。

境内域名解析

域名集合
geosite:cn
上游地址
223.5.5.5
端口
53
结果范围
geoip:cn
优先获得适合境内网络访问的 CDN 地址。

境外域名解析

域名集合
geolocation-!cn
上游协议
DoH
服务地址
1.1.1.1
连接端口
443
通过 HTTPS 承载查询,并按现有路由决定连接出站。
expectIPs 是结果过滤条件,不是强制把域名映射到某个地区。境内上游返回不符合 geoip:cn 的地址时,核心可以尝试后续解析器。若某个境内站点本来就使用境外地址,过严的条件反而会造成重复查询,此时应为该域名增加更精确的例外,而不是直接删除全部校验。
  • 经常访问的局域网名称可写入 hosts,例如把路由器管理域名固定到 192.168.1.1
  • 只有 IPv4 网络时可优先使用 UseIPv4,避免拿到 AAAA 记录后等待不可达的 IPv6 连接超时。
  • 具备稳定 IPv6 出口时再启用双栈查询,并分别验证直连与代理出站是否都能访问 IPv6。

配置示例

本节要点

一份可读的分流 DNS 配置

下面示例采用 Xray 常见的 DNS 字段写法,适合用于理解结构。不同 V2Ray 或 Xray 内核版本支持的字段可能略有差异,导入前应以当前客户端生成的配置格式为准。v2rayN 可先进入「设置」→「参数设置」确认当前核心类型,再从「服务器」→「添加自定义配置服务器」载入完整 JSON。
{
  "dns": {
    "hosts": {
      "domain:router.local": "192.168.1.1"
    },
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "port": 53,
        "domains": [
          "geosite:cn"
        ],
        "expectIPs": [
          "geoip:cn"
        ]
      },
      {
        "address": "https://1.1.1.1/dns-query",
        "domains": [
          "geosite:geolocation-!cn"
        ]
      },
      "localhost"
    ]
  }
}
列表顺序与域名条件共同决定解析器选择。第一项服务境内域名,第二项服务明确归类的境外域名,localhost 作为未命中分类时的兜底。若希望所有未知域名也使用 DoH,应先确认当前核心对 fallback 与域名匹配的处理方式,再调整兜底顺序,避免凭感觉交换数组位置。
  1. 先备份当前可连接的配置,不要直接在唯一配置上反复覆盖。
  2. 只加入一个境内 DNS 上游,测试常用境内网站是否能正常解析和打开。
  3. 再加入 DoH 上游,测试此前异常的境外域名,并观察核心日志中的查询错误。
  4. 最后加入 expectIPs、IPv4 策略与 hosts 规则,每次只改一项。
  5. 完成后重启核心或重新载入配置,避免旧连接与 DNS 缓存干扰结果。

路由协同

本节要点

DNS 分流还要配合路由规则

DNS 返回正确地址,只解决了“连到哪里”。要让境内连接直连、其余连接走代理,还需要匹配顺序清晰的路由规则。常见结构是先处理局域网和保留地址,再处理境内域名与境内 IP,最后把未命中的流量交给代理出站。
{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:cn"
        ],
        "outboundTag": "direct"
      }
    ]
  }
}
IPIfNonMatch 表示域名规则没有命中时,核心可以解析目标域名,再尝试 IP 规则。它不是“所有域名都提前解析”的开关,也不会自动建立境内外 DNS 上游。若配置使用 AsIs,核心倾向于保留域名匹配流程,只有 IP 目标才能直接命中 IP 规则。

结论:DNS 规则与流量规则必须成对检查

境内域名交给本地上游后,还应确认 geosite:cngeoip:cn 最终指向直连出站;境外域名使用 DoH 时,则要确认 DoH 的 HTTPS 连接和目标网站连接都能从预期出站建立。
现象 优先检查 判断依据
域名规则偶尔不命中 应用是否提前解析 日志目标只显示 IP,不显示域名
境内网站加载变慢 DNS 返回的 CDN 地址 地址地区与当前网络相距较远
DoH 查询持续超时 443 端口与出站路由 日志出现连接超时或握手失败
连接先卡数秒再成功 AAAA 记录与 IPv6 可达性 IPv6 尝试失败后回落 IPv4

DoH 配置要点

本节要点

DoH 配置的重点不是只换一个地址

DoH 把 DNS 消息放进 HTTPS 请求,常用端口是 443。它能降低传统明文 UDP 查询在传输途中被观察或改写的概率,但不能替代路由配置,也不能修复上游自身返回的错误结果。上游可访问性、出口路径和缓存策略仍然决定实际表现。
在 v2rayN 中调整自定义配置后,可通过「设置」→「参数设置」检查日志级别,并在主窗口打开日志区域观察核心启动信息。安卓端使用 v2rayNG 或 v2flyNG 时,应先在当前配置的路由与 DNS 页面核对设置,再重新连接,使 VpnService 会话载入新配置。
  • 查询超时:先验证 DoH 地址的 443 端口是否能通过预期出站建立连接,再看是否存在域名引导解析问题。
  • 循环依赖:不要让解析 DoH 服务域名所需的 DNS 查询再次依赖同一个尚未建立的 DoH 连接。
  • 缓存未更新:修改上游后重启核心,并重新打开测试应用;浏览器和系统可能保留各自的 DNS 缓存。
  • IPv6 假可用:系统拿到 IPv6 地址不代表出口可达,可临时使用 UseIPv4 对照测试。
  • 规则库过旧:更新客户端附带的 geosite 与 geoip 数据后重载核心,再判断域名分类是否错误。

结论:先保证单一 DoH 上游可用,再增加备用项

同时填入多个未知状态的解析器,会让超时、回退与缓存结果交织。先用一个明确可达的 443 上游完成测试,再增加备用解析器,日志会更容易读懂。
测试时应选择三类目标:一个稳定的境内 CDN 域名、一个需要代理访问的境外域名,以及一个局域网名称。连续测试首次访问和第二次访问,可以区分首次解析耗时与缓存后的连接耗时。若首次慢、后续快,重点看 DNS 与握手;若每次都慢,则继续检查路由、节点延迟和丢包。

故障排查顺序

本节要点

解析污染与连接异常的排查顺序

所谓解析污染,常见表现包括返回与目标服务无关的地址、同一域名在不同解析路径得到明显冲突的结果,或解析成功但连接立即被重置。不能仅凭“网页打不开”就断定是 DNS 问题,因为节点失效、系统代理未启用、路由误分流和 IPv6 不可达都会产生相似现象。
排查应从最短链路开始。先确认核心启动成功,再确认域名是否解析,随后确认结果是否合理,最后检查目标连接使用了哪个出站。v2rayN 日志若显示配置字段错误,应先修复 JSON;若显示 DNS timeout,再检查上游;若已经得到 IP 但连接失败,则转向路由与节点。

连接成功,但只有部分域名打不开怎么办?

把异常域名与正常域名分别记录下来,在日志中确认目标是域名还是 IP。若只有 IP,检查应用是否在代理外提前解析;若有域名但命中直连,检查 geosite 分类和规则顺序。

换成 DoH 后所有查询都超时怎么办?

先恢复一个可用的传统 DNS 兜底,再确认 DoH 地址的 443 端口能否通过当前出站连接。使用域名形式的 DoH 地址时,还要保留可完成引导解析的上游。

为什么境内网站被分到代理线路?

检查路由规则是否从上到下先命中了更宽泛的代理规则。把局域网、geosite:cngeoip:cn 规则放在兜底代理规则之前,并重新载入配置。

开启 IPv6 后首次打开网站很慢?

临时将 queryStrategy 改为 UseIPv4 做对照。如果等待时间消失,继续检查本地网络、直连出站和代理节点是否都有可用 IPv6 路径。

订阅更新后自定义 DNS 消失了?

订阅服务器配置与客户端全局 DNS 设置可能由不同位置管理。更新前记录「设置」→「参数设置」中的核心选项,并确认自定义配置是否被订阅生成的配置覆盖。
还可以做一次最小化对照:暂时只保留一个确认可用的节点、一个 DNS 上游和最基本的直连规则。若最小配置正常,再逐项恢复广告过滤、复杂域名集合、多个上游与自定义 hosts。一次加入一项,比反复清空全部配置更容易找到冲突来源。

收尾检查

本节要点

一套稳定配置的收尾检查

完成 DNS 分流后,不应只看某个网站能否打开。还要检查境内 CDN 是否直连、境外域名是否使用预期解析器、DoH 连接是否发生循环依赖,以及核心重启后配置能否正常加载。订阅更新、客户端升级或规则库更新后,也应重复一次关键域名测试。

桌面端检查

客户端
v2rayN
菜单入口
设置 → 参数设置
系统代理
确认已启用
日志目标
DNS 与 routing
修改自定义 JSON 后重新载入核心,再进行首次访问测试。

安卓端检查

客户端
v2rayNG / v2flyNG
连接方式
VpnService
省电策略
允许后台运行
重载方式
断开后重新连接
确认系统没有中止后台连接,再判断 DNS 是否持续超时。
  • 核心启动日志没有未知字段、格式错误或端口占用提示。
  • 境内域名由指定本地上游解析,返回地址符合预期地区。
  • 境外域名的 DoH 查询可通过预期出站访问 443 端口。
  • 局域网与保留地址优先直连,不落入代理兜底规则。
  • 当前网络没有 IPv6 时,不让 AAAA 连接反复等待超时。
  • 订阅更新和规则库更新后,自定义 DNS 与路由设置仍然存在。
最终可用的方案通常并不复杂:境内域名交给低延迟本地解析器,境外域名交给稳定 DoH,上游选择与路由出站保持一致,再用日志验证每一步。遇到异常时按照“核心启动、DNS 查询、返回地址、规则命中、出站连接”的顺序检查,能比连续更换节点或解析器更快定位原因。
客户端下载 查看 Windows、macOS、Android、Linux 版本