本文速览

适合已能连接节点、但遇到部分域名打不开或解析结果异常的用户。先确认应用是否把域名交给核心,再分别设置解析器、DNS 请求出站和网站流量路由。本文提供一组面向 Xray 内核的配置片段,说明境内 DNS、代理 DoH、geosite 与 FakeDNS 各自负责哪一步,并给出逐项验证方法。

先区分解析器选择、DNS 出站与网站出站

“DNS 分流”至少包含两个独立判断:某个域名交给哪个解析器,以及发往解析器的请求走哪个出站。网站连接还有第三次判断。把境外 DNS 地址填进设置,不代表查询已经通过代理;把网站路由设成代理,也不代表浏览器此前的本地解析会自动改走核心。

应用提交域名 选择解析器 解析请求出站 返回解析结果 网站连接分流

V2Ray/Xray 的 dns 对象配置内置解析器;routing 决定连接走哪个出站。geosite:cn 是域名规则集合,geoip:cn 是 IP 地址规则集合,两者不能互换。域名未被应用交给核心时,只有 IP 的连接无法直接按域名集合匹配;流量嗅探有时能恢复域名信息,但不应把它视为所有协议都适用的补救措施。

境内 DNS 与远程 DoH:先确定各自职责

下面以 223.5.5.5 处理境内域名、https://1.1.1.1/dns-query 处理其余查询。它们是可替换的公共解析器示例,不是适用于所有网络的固定最优值。前者通常使用 UDP 53,后者使用 HTTPS 443;加密保护的是客户端到解析器之间的查询传输,解析器仍能看到它处理的域名。

境内域名解析

address
223.5.5.5
domains
geosite:cn
skipFallback
true
查询出站
direct

优先处理匹配的境内域名,不加入无关域名的通用回退队列。

其余域名解析

address
https://1.1.1.1/dns-query
传输端口
443
查询出站
proxy
queryStrategy
UseIPv4

作为默认解析器,并让 HTTPS 查询连接经代理节点发送。

UseIPv4 用于把首轮排查限制在 IPv4,避免同时处理 IPv6 路由问题;它不是长期禁用 IPv6 的通用建议。网络和节点都支持 IPv6 时,可在基线通过后改为 UseIP,再分别检查 A 与 AAAA 记录。DNS 查询类型策略也不会替代系统层面的 IPv6 路由设置。

dns.servers 示例:域名匹配与回退行为

以下是核心配置片段,不是可单独导入的完整节点配置。示例面向 v2rayNG 使用的 Xray 内核,v2rayN 也应先确认当前选择的内核。修改前备份配置;使用客户端生成配置时,应在对应 DNS 设置或自定义配置入口中修改,而不是编辑下次启动就会被覆盖的临时运行文件。

{
  "dns": {
    "tag": "dns-internal",
    "queryStrategy": "UseIPv4",
    "servers": [
      {
        "address": "223.5.5.5",
        "domains": [
          "geosite:cn"
        ],
        "skipFallback": true
      },
      "https://1.1.1.1/dns-query"
    ]
  }
}

需要严格限制匹配域名只使用其指定服务器时,可以评估 Xray 的 disableFallbackIfMatch。启用前先确认当前核心支持该字段,并接受“指定解析器故障就解析失败”的结果。不要同时大量改动回退、缓存和 IPv6 策略,否则一次失败会对应多个候选原因。

routing 示例:让远程 DNS 确实走代理

下面片段假设现有配置已经包含标签为 proxy 的可用代理出站,以及标签为 direct 的直连出站。标签必须与实际 outbounds[].tag 完全一致。此示例没有末尾全匹配规则,未命中的连接使用第一个出站,因此还要求第一个出站为 proxy。如果现有配置采用其他默认策略,应按原结构调整,不能原样覆盖。

{
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
      {
        "type": "field",
        "inboundTag": [
          "dns-internal"
        ],
        "ip": [
          "223.5.5.5"
        ],
        "port": "53",
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "inboundTag": [
          "dns-internal"
        ],
        "ip": [
          "1.1.1.1"
        ],
        "port": "443",
        "outboundTag": "proxy"
      },
      {
        "type": "field",
        "domain": [
          "geosite:cn"
        ],
        "outboundTag": "direct"
      },
      {
        "type": "field",
        "ip": [
          "geoip:private",
          "geoip:cn"
        ],
        "outboundTag": "direct"
      }
    ]
  }
}

前两条只识别内置 DNS 查询,避免把用户直接访问相同 IP 的其他连接也当成解析请求处理。后两条处理网站连接。IPIfNonMatch 的含义是:域名连接未匹配现有规则时,再尝试解析 IP 并进行 IP 规则匹配;它不决定使用哪台 DNS,也不会自动把 DNS 请求送入代理。

设置位置示例值实际控制的对象
dns.servers[].domainsgeosite:cn域名优先交给哪个解析器
dns.queryStrategyUseIPv4内置 DNS 的地址查询策略
routing.domainStrategyIPIfNonMatch路由匹配时何时解析域名
routing.rules[].outboundTagproxy命中连接使用哪个出站

结论:先验证解析连接,再调整网站规则

重启核心后先确认发往 1.1.1.1:443 的内置 DNS 请求命中 proxy。如果这一步没有成立,继续添加境外网站域名规则并不能保证解析链路避开本地网络干扰。

DoH 与 FakeDNS:加密查询和虚拟地址不是同一件事

DoH 将 DNS 消息放在 HTTPS 连接中传输,主要解决查询传输保护问题。FakeDNS 则向应用返回虚拟 IP,并维护域名与虚拟地址的映射,让后续连接仍能按域名处理。FakeDNS 不会把真实网站部署到虚拟地址,也不等于“已经完成了远程真实解析”。

方案返回内容需要重点检查适用起点
普通 DNS真实 A 或 AAAA 记录UDP/TCP 53 的出站和可达性境内解析基线
DoH真实 A 或 AAAA 记录HTTPS 443、证书与路由远程加密解析
FakeDNS虚拟地址池中的 IP映射恢复、入站捕获与嗅探基础分流稳定后再评估

例如使用 198.18.0.0/15 作为 FakeDNS IPv4 地址池时,系统必须把访问该地址池的连接送回核心,并让核心恢复对应域名。如果连接绕过 VPN 或 TUN 路径,虚拟 IP 无法像真实公网地址一样访问。启用后只有部分应用失败,应先检查分应用代理、捕获范围及映射处理,而不是直接换节点。

在 v2rayN 与 v2rayNG 中逐项验证

客户端界面与核心配置分属两层。同一个“远程 DNS”输入框,在不同客户端版本中可能生成不同结构;应以最终加载的核心配置为准。在 v2rayN 中可从「设置」→「参数设置」检查日志相关设置,再到主窗口日志区域观察启动结果。DNS 编辑入口的名称会随版本调整,不要把普通单行地址框当成完整 JSON 编辑器。

  1. 记录基线。保存节点、当前路由模式、DNS 地址及系统代理或 VPN 状态。v2rayNG 从「设置」检查 DNS 相关项,修改后停止并重新启动服务,确认日志没有配置解析错误。
  2. 检查启动错误。先处理未知字段、找不到出站标签、读取 geosite 数据失败等错误。核心没有正常启动时,测试网页只能得到误导性的结果。
  3. 检查应用是否提交域名。桌面测试可使用支持远程解析的 SOCKS 请求。下方命令假设本机 SOCKS 端口为 10808;若运行配置不同,必须改成实际端口。
  4. 核对路由命中。短时启用较详细日志,分别访问境内与境外域名,确认 DNS 查询与网站连接的出站。验证后恢复常用日志级别,避免长期记录不必要的访问细节。
  5. 隔离缓存影响。重启核心并关闭旧连接后再试。Windows 可执行 ipconfig /flushdns 清理系统缓存,但浏览器或应用自己的缓存可能仍需单独清理。
curl --proxy socks5h://127.0.0.1:10808 --head --max-time 15 https://www.example.com/

socks5h 让 curl 把域名交给 SOCKS 代理;改成 socks5 时通常由本机先解析,两种测试路径并不相同。这条命令只用于确认域名进入代理路径,不足以单独证明全部 DNS 都已按预期分流。另一个常见误区是只运行 nslookup www.example.com 223.5.5.5:它直接询问指定解析器,可以验证该解析器是否可达,却不能证明内置 DNS 的规则已经生效。

常见问题:解析超时、地址异常与设置不生效

换成 DoH 后所有网页都超时,先检查哪里?

先看核心是否成功启动,再核对 1.1.1.1:443 是否命中可用的 proxy 出站。检查设备时间是否正确,日志是否出现 TLS 证书或握手错误。暂时恢复原 DNS 能定位变化范围,但不要通过关闭证书验证来掩盖问题。

境内网站打开变慢,是不是都被远程 DNS 解析了?

先确认 geosite:cn 数据加载成功,并检查具体域名是否属于集合。对明确需要境内解析的域名,可在境内解析器的 domains 中加入 domain:example.cn 一类明确规则,同时核对网站连接是否走直连。网站主域与其图片、视频域名可能分属不同规则。

两个 DNS 返回不同 IP,就能判断有污染吗?

不能。CDN 调度、缓存期限、解析器位置和 IPv4/IPv6 差异都可能产生不同答案。应结合异常地址、证书不匹配、持续连接失败和多个可信解析路径对比判断。只比较两次返回值不同,不能直接得出污染结论。

修改 DNS 后浏览器没变化,但其他应用正常?

先检查浏览器是否启用了自己的安全 DNS,再确认它是否遵循系统代理。排查时临时统一解析路径、清理浏览器 DNS 缓存并关闭旧连接,然后重新测试。若使用分应用代理,也要确认浏览器没有被排除在 VPN 捕获范围外。

最终应保留一份能解释清楚的配置:哪些域名使用境内解析、默认查询交给谁、解析连接走哪个出站、未命中规则的网站如何处理。每次只改一个变量,并用启动日志与连接结果复核,比同时堆叠多个公共 DNS 更容易定位问题。

客户端安装与 DNS 配置入口

按操作系统选择 v2rayNG 或 v2rayN,先完成节点导入与基础连接,再调整 DNS 分流。首次配置可先阅读入门指南。

去下载页 看教程