本文速览

适合已经能在 v2rayN 中连接节点、但遇到域名解析异常或分流结果不符合预期的读者。先确认请求是否进入内核,再区分 DNS 服务器选择与流量路由;最后用浏览器、终端和核心日志分别验证,不把一次网页打不开直接归因于 DNS。

先划清边界:DNS 分流不等于流量分流

访问一个域名时,解析负责取得地址,路由负责决定连接从哪个出站发送。这是两个不同的判断。境内域名交给本地 DNS、其他域名交给远端 DNS,只规定了查询交给谁;如果路由规则仍把某个连接送到直连出站,它不会因为使用了远端 DNS 就自动改走代理。

还要先确认查询是否到达内核。仅开启系统代理时,浏览器可能通过操作系统解析域名,也可能自行发起加密 DNS 请求;终端程序的行为又取决于各自的代理设置。V2Ray 或 Xray 的内置 DNS 配置,只能直接控制交由内核处理的解析请求。若应用已经在本机解析成 IP,再把 IP 交给代理,内核可能看不到原始域名。

应用发起请求确认域名可见匹配 DNS 规则选择解析器路由连接

排查时按这条顺序走:先看应用提交的是域名还是 IP,再看 DNS 选了哪台服务器,最后看连接匹配了哪条路由规则。不要用“节点已连接”推断 DNS 已按预期分流;节点状态只能说明连接建立,并不能说明浏览器的解析路径。

给境内域名与其他域名安排解析器

内置 DNS 的常见安排是:匹配境内域名规则的查询使用本地解析,其余查询使用远端解析。域名规则来自内核可用的规则数据;在不同内核和规则数据版本下,覆盖范围可能不同。没有命中的域名会走默认解析器,因此“默认交给谁”比额外堆叠许多细碎规则更值得先确认。

境内域名

匹配依据
geosite:cn 等域名规则
解析器
系统本地 DNS
示例地址
192.0.2.53

192.0.2.53 是文档示例地址,不是可直接使用的 DNS 服务器;实际配置应填写当前网络可用的解析器。

其余域名

匹配依据
未命中前述规则
解析器
远端 DoH
示例端点
dns.example.net/dns-query

示例域名仅展示 URL 形态;测试前须换成自己可访问、支持 DoH 的实际服务。

“境内外”在这里是域名规则的分类,不是逐次检测服务器所在位置。一个域名可能使用跨地区的服务设施,分类也可能随规则数据更新而变化。对工作网站或内部域名,优先添加明确规则;不要只凭域名后缀判断它应使用哪条网络路径。

在 v2rayN 中核对设置与配置格式

先在 v2rayN 的「设置」→「参数设置」确认当前使用的内核与代理模式,再打开客户端提供的 DNS 设置入口。不同版本的设置页布局可能调整,以当前界面显示的选项为准。修改前保留原配置;如果订阅、预设配置或自定义模板会重新生成核心配置,重启后还要核对修改是否仍在生效。

以下是供阅读字段关系的 Xray DNS 片段,不是可直接运行的完整配置。它把命中 geosite:cn 的域名交给 localhost 所代表的系统本地解析,其余查询落到后面的 DoH 项。实际使用前,需确认内核支持所用字段、规则数据可用,并把示例 DoH 地址换成有效端点。

{
  "dns": {
    "servers": [
      {
        "address": "localhost",
        "domains": ["geosite:cn"]
      },
      "https://dns.example.net/dns-query"
    ],
    "queryStrategy": "UseIP"
  }
}

queryStrategy 指定查询地址族的策略,不负责选择直连或代理。若某个站点只有 IPv6 记录,而当前网络没有可用 IPv6,排查时可先确认地址族选择,避免把地址族问题误判为远端 DNS 故障。上面的 dns.example.net 是示例域名,对应端点不承担实际解析服务。

配置后的第一项检查:看生成结果

保存并重启核心后,检查客户端实际生成的核心配置和日志;若生成结果里没有刚设置的 DNS 服务器,先处理配置覆盖问题,再测试网页访问。

DoH 与 fakedns:各自解决什么问题

DoH 使用 HTTPS 传送 DNS 查询。它可以减少查询在应用与指定解析器之间被普通明文 DNS 路径改写的机会,但并不替代路由规则,也不能保证解析器返回的每个地址都适合当前出站。远端 DoH 的请求本身还需要建立连接:若端点使用域名,首次连接时可能涉及端点域名的解析,应在日志中检查它实际经过的出站路径。

fakedns 则是另一种机制:内核先向应用返回一个用于映射的虚拟地址,等应用连接该地址时,再找回原始域名用于处理。它适用于需要保留域名信息的特定透明代理场景;它不是公共 DNS 服务器,也不是把所有真实查询“加密一次”的开关。是否启用,要结合 TUN、入站接管和嗅探配置判断。

53
传统 DNS 常用端口
443
DoH 常用 HTTPS 端口
2 层
分别核对 DNS 与路由

这两个端口号只是识别请求类型的线索,不能据此推断所有查询都经过内核。例如,浏览器若启用了自己的 DoH,其请求可能表现为普通 HTTPS 连接;只看是否存在 53 端口流量,无法判断浏览器最终采用了哪台解析器。

结论:先选接管方式,再考虑 fakedns

只使用普通系统代理且域名已能交给核心处理时,先验证 DNS 服务器选择和路由规则;只有确认透明代理场景丢失原始域名,才进一步评估 fakedns。

让解析结果与路由规则相互配合

路由中的域名规则与 IP 规则承担不同任务:前者可以直接依据域名决定出站,后者需要有可用的目标 IP。以 Xray 的 domainStrategy 为例,IPIfNonMatch 会在域名规则未匹配时尝试解析,以便继续匹配 IP 规则;IPOnDemand 则会在路由判断需要 IP 时进行解析。不要把路由的 domainStrategy 与 DNS 的 queryStrategy 混成同一个设置。

一个实用的验证样例是先选择两个自己能控制访问结果的域名:一个明确写入本地解析规则,一个留给默认远端解析器。分别记录 DNS 查询、路由命中和最终出站,而不是只比较网页加载速度。若 DNS 已选对、连接仍走错路径,调整的是路由规则;反过来,若路由正确但解析地址异常,就先检查 DNS 命中与上游解析器。

按现象排查:从客户端到核心日志

测试前先记录 v2rayN 当前的本地代理端口,并确认系统代理指向同一个端口。不同设备和配置的端口值可能不同;不要把示例端口写入长期配置。使用浏览器测试时,暂时核对其独立 DNS 设置与扩展行为;使用终端测试时,检查命令是否明确使用了代理,避免拿直连结果验证内核 DNS。

  1. 先确认请求入口。分别测试浏览器与终端,并在 v2rayN 日志中找对应时间的连接记录。若没有记录,先检查系统代理、应用代理设置或 TUN 接管状态。
  2. 再确认域名是否保留。日志若只显示目标 IP,检查应用是否提前解析;若显示域名,再检查 DNS 与路由规则是否分别命中。
  3. 最后比较结果。同一域名多次测试时记录时间、所用解析器、返回的地址族和出站。更换网络后重新测试,避免沿用上一次网络的缓存结论。

出现“浏览器能打开,终端打不开”时,不要立即切换 DoH。终端程序可能没有读取系统代理,也可能只读取了自己的代理环境变量。出现“境内网站绕到远端”时,先看域名分类和路由命中;出现“只有某些域名失败”时,再检查 DNS 返回值、IPv4/IPv6 可用性和该域名是否需要特殊规则。

改了 DNS,日志里却没有查询记录?

先确认应用请求是否进入核心。核对 v2rayN 的系统代理或 TUN 状态,再检查浏览器是否启用了独立的加密 DNS;仅修改核心配置不会接管所有应用的解析。

本地解析规则命中了,连接还是走代理?

分别查看 DNS 命中和路由命中。解析器选择不决定连接出站;需要直连时,在路由设置中为该域名添加或核对对应规则。

DoH 端点换上后,所有域名都解析失败?

先确认端点 URL 是实际可用的 DoH 服务,再查看核心日志中该端点的连接错误。若使用域名形式的端点,还要检查其首次解析与出站路径。

开启 fakedns 后看到虚拟 IP,算解析出错吗?

虚拟地址可能正是 fakedns 的预期返回值。重点检查后续连接能否映射回原域名,以及当前入站与路由是否按该模式配置;不要把虚拟地址当作网站的真实服务器地址。