2026-10-21 · DNS 进阶 · 约 10 分钟

V2Ray FakeDNS 工作原理:虚拟 IP 分配、流量嗅探配合与适用场景

解释 FakeDNS 如何用保留网段的虚拟地址换取域名信息,与 sniffing、TUN 模式如何配合,哪些场景值得开启、哪些情况反而会出问题。

本文速览

FakeDNS 适合解决透明接管中“连接只剩 IP,域名规则失去依据”的问题,不是通用的网络加速开关。下面先拆开虚拟地址、映射表与入站恢复的关系,再给出 Xray 配置片段、TUN 接管检查项和回退步骤。适合已经能正常连接、准备调整 DNS 与路由的用户;首次配置应先完成普通代理验证。

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

普通 DNS 把域名解析成可连接的实际地址。FakeDNS 则为受处理的 A 或 AAAA 查询分配虚拟地址,并在本地保存“域名与虚拟地址”的对应关系。应用以为拿到了正常解析结果,随后向该地址建立连接;代理内核接住连接后查映射表,把目标恢复为原来的域名,再交给路由与出站处理。

应用查询域名 分配虚拟地址 接管目标连接 查表恢复域名 路由选择出站

这里的“恢复”是本地映射查找,不是向公共 DNS 发起 PTR 反向查询。比如应用查询 example.com,得到池内某个地址;内核看到应用连向这个地址,就能根据同一份映射表找回 example.com。具体分配到哪个地址由运行状态决定,不应把某个虚拟地址永久写进规则。

虚拟 IP 只是本机接管链路里的标记,不是网站服务器的实际地址。它不能拿到另一台设备上直接访问,也不能通过普通网关发送到公网后期待目标响应。即便最后选择直连出站,也要先正确恢复域名,再由相应解析与连接逻辑处理实际目标。

地址池与端口:先分清三个数字

198.18.0.0/15
本文 IPv4 虚拟地址池示例
4096
本文 poolSize 配置示例
53
传统 DNS 的服务端口

198.18.0.0/15 覆盖 198.18.0.0 到 198.19.255.255,是为基准测试保留的地址段,不是普通私有局域网地址段。把它用作虚拟地址池,是借其不应作为正常公网目标的特点;但企业网络、实验环境或其他隧道也可能使用它,启用前仍要排查路由冲突。

poolSize 表示映射池容量,不是 DNS 缓存时间,也不是并发连接上限。本文的 4096 只是配置示例,不是所有设备都应采用的最佳值。容量不足、映射被淘汰而应用仍保留旧地址时,可能出现恢复失败;不能只清浏览器缓存而忽略内核映射与系统 DNS 缓存的生命周期。

FakeDNS、sniffing 与 TUN:三个环节各管一件事

TUN 负责接收被路由进虚拟网卡的 IP 流量,本身不保证所有连接都有域名。普通 sniffing 尝试从 HTTP Host、TLS 握手等受支持的协议信息中识别域名;FakeDNS 则依靠此前生成的映射恢复域名。二者都能补充域名信息,但信息来源不同,不能互相等同。

FakeDNS 映射恢复

信息来源
本地虚拟地址映射表
必要前提
查询经过对应 FakeDNS
入站设置
启用匹配的 fakedns 恢复
目标处理
恢复域名后进入路由与出站

分配虚拟地址与恢复映射必须形成完整链路。

常规协议嗅探

信息来源
受支持的应用层握手
常见目标
HTTP Host、TLS SNI
限制条件
加密握手、协议差异与缺失信息
TUN 职责
接管流量,不代替域名识别

嗅探并非适用于每一种协议,也不解密业务正文。

如果应用直接使用 IP、使用未被接管的加密 DNS,或复用了启用前的真实地址缓存,FakeDNS 就没有机会创建相应映射。此时看到连接仍按 IP 规则处理,并不能直接说明功能失效。反过来,只有 DNS 查询进了 FakeDNS,而目标连接绕过 TUN 或透明入站,也会导致应用拿着虚拟地址连接失败。

结论:先核对 DNS 和连接是否进入同一处理链路

出现虚拟地址却打不开页面时,先查目标流量有没有回到能读取映射的内核;不要立即更换节点,也不要先把路由改成全代理。

Xray 配置示例:分配地址与入站恢复要同时存在

下面展示 Xray 风格的字段关系,不是完整运行配置。V2Ray 是常用称呼,具体字段和行为仍以实际运行的内核为准。v2rayN 是客户端,v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核;不要仅因为界面名称相近,就跨内核复制同一份 JSON。

第一段是顶层配置片段:声明 IPv4 池,并让内置 DNS 使用 FakeDNS。它只展示最小关系,没有包含节点服务器域名解析、局域网域名例外、IPv6 与 DNS 流量入口,不应直接覆盖客户端生成的完整配置。

{
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 4096
    }
  ],
  "dns": {
    "servers": [
      "fakedns"
    ]
  }
}

第二段属于接收虚拟目标连接的那个入站对象,用于查表恢复域名。这里仅保留 fakedns,方便看清必要关系;若要增加 HTTP、TLS 等嗅探类型,应先核对所用内核的支持情况。不要把这个对象作为顶层独立配置,也不要误加到一个完全接不到目标连接的入站上。

{
  "sniffing": {
    "enabled": true,
    "destOverride": [
      "fakedns"
    ]
  }
}

适用场景:透明接管有收益,普通系统代理先保持简单

使用场景建议检查重点
TUN 接管且域名规则经常无法命中可在备份后试用DNS 入口、映射恢复与目标路由闭环
浏览器通过 HTTP 代理提交域名通常不必额外开启先确认代理协议是否已传递域名
内网域名与企业专用解析优先保留实际解析结果内网 DNS、路由与虚拟池有无冲突
应用使用 IP 白名单或检测解析结果针对应用验证或设置例外虚拟地址是否被应用判为异常
应用自带加密 DNS先查查询是否经过接管不能把端口 53 接管当成覆盖全部 DNS

HTTP 代理和支持远端解析的 SOCKS 请求可以直接把域名交给代理,此时再引入 FakeDNS,未必能解决新的问题。透明接管只收到 IP 包,更容易丢失域名上下文,才是它常见的使用位置。选择开关前,先判断流量缺的到底是域名信息,还是节点连接、出站解析或路由顺序。

FakeDNS 不等于 DNS 加密,也不保证所有 DNS 都经过代理。它只是改变了应用侧收到的解析结果;后续真实解析在哪一端进行、使用什么传输方式,仍由出站与 DNS 策略决定。VMess 或 VLESS 等节点协议不会单独决定 FakeDNS 能否工作,也不需要为此重新导入一份订阅。

验证步骤:从解析结果追到最终出站

  1. 保留基线。先在普通代理模式下确认同一节点可以访问目标,备份当前配置。暂时不要同时调整订阅、路由规则库和 DNS。
  2. 检查接管入口。启用选定的 TUN 或透明接管方案,确认应用的 DNS 查询与后续连接都进入预期链路。Windows 可在「设置」→「网络和 Internet」中核对当前网络接口,但不要把物理网卡 DNS 的显示值当作接管成功的充分证据。
  3. 清除旧缓存。关闭测试应用;Windows 可在命令提示符运行 ipconfig /flushdns 清理系统缓存,再重新打开应用。浏览器自己的缓存和加密 DNS 设置仍需单独检查。
  4. 观察实际查询。通过应用请求触发解析,配合 DNS 日志确认返回地址是否属于配置池。nslookup example.com 可作辅助,但它的查询路径可能与浏览器不同,不能凭一次结果判断所有应用。
  5. 核对恢复与分流。在可用日志中寻找原始虚拟目标、恢复后的域名、命中的规则及出站标签。日志详细程度因内核和客户端而异,必要时临时提高级别,测试结束后恢复。
  6. 验证例外。分别测试内网站点、IPv6 目标和直连规则。只验证一个代理网站能打开,不足以证明整套 DNS 策略正确。

测试数据要能回答一个具体问题:DNS 返回了什么、连接去了哪里、哪条规则命中。单独运行 ping 不适合判断网页代理是否可用,因为虚拟地址不必响应 ICMP,而网页使用的是另一条连接路径。也不要把获得虚拟地址的速度写成网站访问延迟,两者不是同一个指标。

常见故障:虚拟地址残留、内网异常与分流失效

查到 198.18 开头的地址,是 DNS 出错了吗?

先核对当前池是否为 198.18.0.0/15。若一致,说明查询可能已进入 FakeDNS,接下来应检查该地址的连接是否回到正确入站,以及映射能否恢复。不能仅凭这个地址认定连接正常或异常。

关闭 TUN 后网页反而全部打不开,怎么办?

应用可能仍缓存着虚拟地址。恢复原 DNS 与代理设置,退出测试应用,清理系统 DNS 缓存后重开;若应用仍复用旧连接,再结束其后台进程重试。不要继续把虚拟池路由到普通网关。

外网能开,公司内网站点却失效了?

把内网域名交回企业 DNS,并按所用客户端的机制配置 FakeDNS 例外与直连路由。两者要一起检查:只改成直连,却仍给依赖真实地址的应用返回虚拟地址,问题可能仍在。

域名分流规则已经写了,为什么还走默认出站?

先从日志确认入站是否恢复出域名,再看规则顺序。较早的兜底规则可能提前命中;应用自带 DNS 或旧缓存也可能让该连接根本没有映射。不要用新增更多重复规则掩盖上游信息缺失。

如果问题只在内核重启后出现,还要考虑映射状态与应用缓存不同步:应用保存了旧虚拟地址,新进程却没有相应条目。此时重启应用并重新解析,比反复切换节点更有针对性。若扩大池容量后仍反复发生,也要回头检查是否存在多个 DNS 处理组件,不能无限增加容量代替排障。

回退顺序:恢复 DNS,再清缓存和验证普通代理

判断功能不适合当前网络时,按原配置回退即可。关键是同时撤销虚拟地址分配与依赖它的接管关系,避免保留一半链路。客户端更新可能改变配置生成方式,回退应以此前保存的配置为依据,而不是猜测哪个开关曾经打开。

记住这一条就够用:FakeDNS 的价值是给需要域名的分流链路补信息。已经能稳定传递域名的场景,不必为了多开一个选项增加复杂度;透明接管确实缺少域名时,再把地址池、查询入口、入站恢复和出站解析逐项接完整。更多字段关系可结合配置参考中的 DNS 设置检查,基础连接问题先看连接排查说明。

客户端与平台选择

按系统选择 v2rayN、v2rayNG 或 v2flyNG,先完成订阅导入与普通代理验证,再根据实际内核配置 DNS 和 TUN。

下载v2rayN