· 网络接管 · 约 10 分钟

V2Ray DNS 分流解析设置:国内外域名分开解析与防污染配置

逐项解释 dns 段的 servers、domains 与 expectIPs 字段,示范国内域名走本地解析、海外域名走远端解析的写法,并介绍防污染要点。

本文速览

本文面向已经能连接节点、需要调整 DNS 分流的用户。先确认域名由应用、系统还是内核解析,再用国内域名优选规则与远端 DoH 配置分配查询,最后通过日志验证解析路径。示例是配置片段,需要合并到现有配置;它不会自动接管系统 DNS,也不能代替可用的代理出站。

一、DNS 分流与连接分流的区别

DNS 分流决定“向哪个解析器查询域名”,连接分流决定“网站连接走哪个出站”。两者相关,但不是同一条规则。把国内网站设为直连,不代表该网站一定使用国内 DNS;把某个 DNS 地址设为代理,也不代表网站连接自动经过代理。

域名进入内核 解析规则匹配 解析器查询 地址结果筛选 连接出站选择

这条链描述需要内核解析时的典型过程,不代表每个请求都经过全部环节。浏览器若先通过自己的安全 DNS 得到 IP,再把 IP 交给代理,内核可能根本收不到原始 DNS 查询。反过来,应用把域名交给 SOCKS 代理后,域名也可能继续传给代理服务端,由服务端完成解析。

二、servers、domains 与 expectIPs 的作用

dns.servers 是解析服务器列表。列表项既可以是简单地址,也可以是带域名匹配条件的对象。对象中的 domains 用于优选匹配服务器;expectIPs 用于检查返回地址是否符合预期。后者不是连接路由规则,也不是对解析结果真实性的证明。

字段本文取值实际含义
servers国内 UDP DNS 与远端 DoH定义内核可使用的解析器。
address223.5.5.5普通 IP 地址在此示例中用于 UDP DNS 查询。
domainsgeosite:cn命中域名集合时优先选择该服务器,需有对应域名数据文件。
expectIPsgeoip:cn按地址集合筛选结果;不匹配可能导致本次结果被拒绝并触发后续尝试。
skipFallbacktrue该服务器不参与普通回退查询,仍可被自身域名规则选中。
queryStrategyUseIPv4本文只请求 IPv4 地址,便于先排除 IPv6 路径变量。

geosite:cn 是数据集中的域名分类,不等同于所有以 .cn 结尾的域名;geoip:cn 也依赖所用地址库。跨地区 CDN、企业专线与地址库更新都可能影响判断。因此,不能把“国内域名返回境外 IP”直接判为污染。

结论:先验证分类,再收紧地址筛选

如果某个国内网站加上 expectIPs 后开始解析失败,先临时移除该限制并比较返回地址。确认是正常 CDN 调度后,再为该域名单独设置解析器,不要反复更换节点掩盖分类问题。

三、国内优选与远端 DoH 配置片段

下面采用“国内分类优选国内 DNS,其余查询使用远端 DoH”的基础结构。第一项使用公共国内解析器,不是家庭路由器地址;如果需要运营商内网域名,应另行指定实际的内网 DNS。第二项使用 IP 形式的 DoH 地址,避免为 DoH 服务器名称额外进行引导解析。

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

这不是完整的 config.json。应把 dns 对象合并到原有顶层,不能在一个 JSON 对象内重复添加同名键。已有 DNS 设置时,应修改现有段落,而不是把两个片段前后粘贴。JSON 中也不能直接加入解释性注释。

  1. 确认运行的是支持这些字段的 V2Fly 或 Xray 内核,并查看当前内核启动日志。客户端名称和内核版本不是同一个概念。
  2. 确认内核能读取包含 cn 分类的域名库与地址库;缺失数据时,先处理加载错误。
  3. 保留现有 inbounds、outbounds,再合并 DNS 设置,重新加载配置并检查错误日志。
  4. 先用少量已知域名验证,再逐步扩大匹配范围。若网络确实需要 IPv6,应在验证双栈连通性后调整查询策略。

四、让 DNS 查询本身走正确出站

写入 DoH 地址只说明查询协议,不说明网络出口。普通 https:// 形式的内置 DoH 查询会受内核路由影响;若默认出站是直连,远端 DoH 仍可能直接连接。不要把它与绕过常规路由的本地解析形式混用,也不要认为“加密”就等于“已经经过代理”。

53
示例国内 DNS 的 UDP 目标端口
443
示例 DoH 的 HTTPS 目标端口
10808
下文测试假定的本机 SOCKS 端口

以下路由片段假定已有名为 direct 与 proxy 的出站标签。必须将标签替换成现有配置中实际的 tag,或先配置对应出站。示例用精确 IP 和端口约束 DNS 连接,避免把这些地址的所有流量都纳入同一规则。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "ip": ["223.5.5.5"],
        "port": "53",
        "network": "udp",
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": ["1.1.1.1"],
        "port": "443",
        "network": "tcp",
        "outboundTag": "proxy"
      }
    ]
  }
}

把这两条规则合并到原有 routing.rules 中,并放在可能提前命中的宽泛规则之前。路由按顺序匹配,前面的规则已经命中时,后面的 DNS 专项规则不会再生效。该片段只安排解析器连接,不负责完整的网站分流。

五、在 v2rayN 与安卓客户端中验证

v2rayN 的常规节点配置往往由客户端生成。直接修改运行目录中的临时配置,可能在切换节点或重启后被覆盖。应使用当前版本提供的 DNS 设置或自定义配置入口,保存后检查实际生成的配置。v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核;客户端自己的远程 DNS、VPN 与路由选项,不能一概等同于原生 JSON 字段。

  1. 记录基线:保存原配置,记录当前节点、本机监听端口、系统 DNS 与浏览器安全 DNS 状态。一次只改变一个解析设置。
  2. 确认入口:以下命令假定本机存在 127.0.0.1:10808 SOCKS 入站。若客户端显示其他端口,先更改命令;不要把测试端口当成所有版本的默认值。
  3. 比较路径:分别测试应用本地解析与把域名交给代理的请求。两者结果不同,说明需要继续检查解析发生位置。
  4. 检查日志:临时将 log.loglevel 调为 info,结合请求时间核对 DNS 与出站记录。不同内核输出细节不同,必要时短暂使用 debug,完成后恢复原级别。
curl --socks5 127.0.0.1:10808 -I https://www.qq.com
curl --socks5-hostname 127.0.0.1:10808 -I https://www.qq.com
nslookup www.qq.com 223.5.5.5

第一条命令通常由 curl 在本地解析网站域名;第二条把域名交给 SOCKS 代理,后续解析位置由内核路由和出站决定。因此,第二条成功并不能单独证明使用了本机内置 DNS。第三条直接查询指定公共 DNS,只能作为解析器连通性对照,不能证明 dns.servers 已生效。在 Windows PowerShell 中,如遇到命令别名差异,可使用 curl.exe。

结论:用查询路径证明配置,而不是只看网页能否打开

修改后重启相关应用并等待或清理对应缓存,再重复测试。若日志没有预期的解析记录,先确认请求是否进入内核;不要仅凭打开网页或一次延迟变化,宣布 DNS 分流已经完成。

六、DNS 防污染与常见故障

防污染的重点是查询传输、解析器可信度、结果使用位置与回退策略。DoH 可以保护客户端到 DoH 解析器之间的传输,但不会自动修复错误分类、代理出口不可达或应用自带解析。expectIPs 只是地址范围约束,不能替代加密传输,也不能识别所有错误答案。

加了 expectIPs,国内网站反而打不开怎么办?

先临时移除该服务器的 expectIPs,重新加载后查询同一域名。若返回的是正常境外 CDN 地址,应调整该域名的解析策略或核对地址库,而不是强制把所有结果都限定为国内地址。

配置了远端 DoH,为什么仍看到本地 DNS 请求?

先核对请求属于哪个进程。浏览器、系统服务和不使用代理的应用仍可能独立解析;代理节点域名也可能需要引导解析。检查系统 DNS、浏览器安全 DNS和客户端 DNS 接管设置,不能只修改 dns 段。

打开网页很慢,是不是 DNS 服务器不够多?

先区分解析等待、TCP 建连和 TLS 握手耗时。保留一个国内优选解析器与一个可达的远端 DoH 作为基线,检查超时及回退记录。堆叠多个失联解析器可能增加等待,也可能把查询扩散给更多服务器。

改完 JSON,切换节点后为什么又恢复了?

通常是客户端重新生成了运行配置。回到客户端支持的 DNS 设置或自定义配置入口保存,并在切换节点后核对生成结果。订阅负责更新节点资料,不等于自动保存手工修改的临时配置。

只保留 IPv4 能长期使用吗?

UseIPv4 适合先排除双栈干扰,但会放弃 IPv6 地址查询。若所在网络和代理出口都具备稳定 IPv6 连通性,可以测试 UseIP,再分别检查 IPv4、IPv6 路由及应用行为。

最终应保留三项可核对的结果:域名在哪一层解析、DNS 连接从哪个出站发出、解析失败时回退到哪里。需要对照顶层配置关系时,可查看配置字段;对代理、内核与路由概念仍有疑问时,可先阅读名词解释。

下载客户端