FakeDNS 原理详解:适用场景与开启前的注意事项

解释 FakeDNS 用虚拟地址池换取域名信息的工作方式,分析它在 TUN 模式与分流中的优势,以及与部分应用和缓存可能产生的冲突。

本文速览

FakeDNS 适合解决透明接管流量后“只剩目标 IP、缺少原始域名”的问题。本文面向已经使用 v2rayN 或 v2rayNG、准备调整 TUN 或 VPN 分流的用户,说明虚拟地址映射如何工作、哪些请求仍需真实解析,以及如何用日志和缓存清理验证效果。现有域名分流正常时,不必为了增加一个开关而启用它。

FakeDNS 原理:用虚拟地址保留域名

FakeDNS 不是代理协议,也不是加密 DNS。普通 DNS 为域名返回实际服务地址;FakeDNS 则从专用地址池分配一个虚拟 IP,并记录“域名与虚拟 IP”的对应关系。应用随后连接这个地址时,接管流量的内核通过映射找回原始域名,再执行路由与出站处理。

域名查询 虚拟地址分配 应用发起连接 映射还原域名 规则选择出口

Xray 在这条链路中需要同时处理 DNS 请求和后续连接。例如,应用查询 example.com,得到地址池中的 198.18.0.1;随后发往该地址的连接必须重新进入持有映射的内核。这个地址只是示意分配结果,不是该域名的真实地址,也不是应当填进节点配置的服务器地址。

TUN 与域名分流:FakeDNS 解决哪一层问题

v2rayN 的系统代理通常由应用主动使用 HTTP 或 SOCKS 代理,应用有机会把域名直接交给代理端。TUN 接管的则是网络层数据包,内核看到的目标可能已经是解析后的 IP。FakeDNS 的价值,是在这种情况下保留可用于域名规则匹配的信息。

v2rayNG 通过安卓 VPN 接口接收设备流量,但 VPN 接管不等于自动启用 FakeDNS。DNS 是否进入内核、内核是否分配虚拟地址、连接是否还原域名,是三个独立条件。TLS 或 HTTP 嗅探也能提供部分域名信息,不过它受协议和应用行为限制,不能视为所有连接都可靠可用的替代方案。

显式代理路径

流量入口
HTTP 或 SOCKS 入站
域名来源
应用提交的目标域名
关键检查
应用是否使用代理及远端解析
开启判断
域名已完整传递时通常不必增加 FakeDNS

SOCKS 应用也可能先在本地解析,再只提交 IP;不能仅凭代理类型判断。

TUN 与 VPN 路径

流量入口
虚拟网络接口
域名来源
FakeDNS 映射或其他可用元数据
关键检查
DNS 接管与虚拟地址路由
开启判断
需要稳定按域名分流时评估

只有 DNS 查询和后续连接均被接管,虚拟地址映射才能发挥作用。

VLESS 与 VMess 负责代理连接,FakeDNS 负责本地 DNS 与目标信息处理;切换代理协议并不会自动修好映射链路。v2flyNG 使用 V2Fly 内核,配置能力与字段支持应按实际内核核对,不能把 Xray 示例直接当作三款客户端通用配置。

地址池与配置字段:先理解三个数字

53
传统 DNS 的 UDP / TCP 服务端口
131072
IPv4 /15 网段包含的地址总数
65535
下方示例配置的 poolSize 值

Xray 的 FakeDNS 配置可使用 198.18.0.0/15 作为 IPv4 地址池。该网段属于用于基准测试的特殊用途地址空间,不是可直接访问公网服务的普通地址。网段包含的地址总数与 poolSize 不是同一个概念:前者由前缀长度决定,后者控制实现中的映射池容量。

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ]
}

Xray 的这段示例只展示顶层地址池定义,不是可独立运行的完整配置。实际接入还涉及内置 DNS 的 fakedns 服务器项,以及接收连接的入站中相应的域名恢复设置,例如 sniffing.destOverride 对 fakedns 的支持。仅粘贴地址池,并不会让系统 DNS 自动改道。

适用场景:哪些流量值得启用

FakeDNS 更适合依赖域名规则、又难以从应用直接获得域名的透明接管场景。它可以减少前置真实解析对域名识别的影响,但不保证网页必然更快。最终出站、服务器可达性和真实目标解析仍然会影响连接结果。

使用场景建议验证重点
TUN 接管后按域名选择出口适合评估开启日志能恢复域名,连接命中预期规则
浏览器显式代理且域名已传入保持现状也可应用是否已把域名交给代理
公司内网域名与私有地址访问先配置真实解析例外内网 DNS、返回地址与直连路由匹配
应用直接连接固定 IPFakeDNS 无法补出原始域名使用 IP 规则或适合该应用的其他规则
应用自带加密 DNS先确认查询是否绕过内置 DNS仅接管 53 端口不足以覆盖应用内查询

FakeDNS 对内网域名尤其需要谨慎。公司服务可能必须通过指定 DNS 才能得到私有地址;让这些查询使用真实解析,再为相应连接设置直连,往往更容易维持原有访问逻辑。具体例外要配置在当前 DNS 与路由实现中,不能只加一条直连规则就假定解析路径也随之改变。

开启前检查:DNS、出站与缓存要一起看

  1. 保存基线。记录当前客户端版本、运行内核版本、DNS 设置、TUN 或 VPN 状态。使用同一个域名完成一次访问并保存日志,后续才能比较变化。
  2. 确认解析入口。检查系统 DNS 是否被接管;浏览器的安全 DNS、应用内 DoH 可能绕过该入口。测试时可临时让测试应用使用系统 DNS,测试结束后再恢复原设置。
  3. 确认连接回流。检查虚拟地址池是否由当前 TUN 或 VPN 路由接收。安卓按应用代理若排除了测试应用,该应用可能拿到虚拟地址,却无法把连接送回内核。
  4. 确认真实解析出口。代理服务器地址如果是域名,必须有可用的引导解析路径,不能依赖尚未建立的代理完成解析。直连目标也仍可能需要真实 IP。
  5. 只改一个变量。先保持节点与路由预设不变,仅调整 FakeDNS 相关设置。不要同时切换内核、协议、DNS 和分流规则,否则难以定位失败环节。

v2rayN 与 v2rayNG 的界面项目会随版本变化,判断依据应落在运行配置和日志,而不是某张旧截图中的开关位置。若当前版本没有暴露所需配置,优先保持已验证的模式;自定义配置需要同时理解 DNS、入站与路由,不能只添加一个字段。

验证与回退:把解析成功和连接成功分开

FakeDNS 测试应当分为两步:先观察系统查询结果,再观察同一域名的实际连接。Windows 可以在命令提示符中执行下面的命令。nslookup 验证的是其当前使用的 DNS 查询路径,不代表浏览器自带 DNS 也走同一条路径。

ipconfig /flushdns
nslookup example.com

FakeDNS 的映射通常属于运行时状态。内核重启、映射淘汰或配置变化后,应用可能还缓存着旧虚拟地址,而新的内核已经不知道它对应哪个域名。此时不断更换节点通常无效,应先清理缓存并重建连接。Windows 的 ipconfig /flushdns 只刷新系统 DNS 缓存,不会替代所有应用自身的缓存清理。

常见问题:虚拟地址、应用冲突与耗电

查到 198.18 开头的地址,是 DNS 被改坏了吗?

FakeDNS 启用且地址池为 198.18.0.0/15 时,这可能是正常结果。先核对查询域名是否应进入 FakeDNS,再看连接日志能否恢复该域名。单凭地址外观无法判断故障,也不要把它保存为网站的固定 IP。

关闭 FakeDNS 后,为什么部分应用仍然超时?

应用可能缓存了旧虚拟地址。恢复原 DNS 设置,重新建立客户端连接,Windows 执行 ipconfig /flushdns,然后完全退出并重开应用。安卓先强制停止受影响应用再测试;不要一开始就清除应用数据。

只有某个游戏或办公应用打不开,怎么定位?

先为该应用所需域名测试真实解析例外,保持其他设置不变。部分应用会检查地址类型、固定使用 IP 或自行解析,不能仅凭“其他网页正常”排除兼容性问题。如果改为真实解析后恢复,再检查其 DNS 与路由需求。

v2rayNG 开启后会更耗电或一定更快吗?

两者都不能直接保证。FakeDNS 维护映射并参与目标恢复,实际耗电还受网络唤醒、应用重试与 VPN 持续运行影响。保持相同网络、节点与应用负载,对照观察;若日志出现密集重试,应先修复失败链路,而不是扩大地址池。

FakeDNS 的开启标准应是可验证的域名恢复与正确分流。v2rayN、v2rayNG 或 v2flyNG 已经稳定工作的配置,不需要仅为增加功能而调整。需要引入时,先确保查询入口、虚拟地址路由、真实解析例外和缓存回退都能解释清楚,再扩展到日常使用。

v2rayN 客户端下载