FakeDNS 工作原理解析:假地址映射如何减少解析延迟

拆解 FakeDNS 返回保留段假 IP、再在出站时还原域名的完整流程,分析它适合与不适合的场景,以及与 TUN 模式、分流规则搭配时的注意事项。

本文速览

本文面向已经使用 v2rayN、v2rayNG 或 v2flyNG,并准备理解 TUN 接管与域名分流细节的用户。重点解释 FakeDNS 的映射表、保留地址池、域名还原、规则命中顺序和故障判断;读完可以分清“DNS 变快”和“连接变快”,并判断当前网络是否值得开启 FakeDNS。

FakeDNS 链路:先返回假 IP,再恢复原域名

普通 DNS 流程会先把域名发送给解析服务器,取得真实 A 或 AAAA 记录后,应用再连接返回的地址。这个过程至少包含一次 DNS 往返;如果系统 DNS 响应慢、解析请求走错出口,或者本地缓存没有命中,连接建立就会被解析阶段阻塞。

FakeDNS 改变的是本地解析路径。应用查询域名时,内核不必立即向公共 DNS 获取真实地址,而是从预设地址池中分配一个假 IP,同时记录“域名—假 IP”的对应关系。应用随后向假 IP 发起连接,TUN 入站捕获这条连接,核心根据映射表找回原域名,再按域名规则选择代理、直连或阻断出口。

应用查询域名 分配假地址 TUN 捕获连接 还原原始域名 规则匹配出站

常见的 IPv4 地址池是 198.18.0.0/15。这段地址用于网络设备基准测试,不属于公网可路由地址,因此适合在本机内部充当映射标记。假 IP 不是目标服务器地址,也不会作为最终目的地址直接发往代理节点;它的作用类似本地索引,真正的代理请求仍以还原后的域名为目标。

198.18/15
常用 IPv4 假地址池
65,535
常见映射池容量
1.2 ms
本地冷查询中位值
43 ms
同网络远端解析中位值

上面的延迟数据来自同一设备连续执行 100 次冷查询的示例:本地 FakeDNS 返回中位值约 1.2 毫秒,远端 DNS 往返中位值约 43 毫秒。它只说明首个解析响应可以更快,不代表网页总加载时间一定减少 41.8 毫秒;TLS 握手、节点往返、丢包和服务器响应仍然决定后续速度。

映射表、嗅探与出站之间如何配合

FakeDNS 能否工作,取决于三个环节是否同时成立:DNS 查询被核心接收,假地址连接被对应入站捕获,出站前能够用映射记录还原域名。只启用地址池但没有让 TUN 流量进入核心,会出现应用拿到 198.18.x.x 后无法连接的现象。

核心收到指向假 IP 的连接后,会检查目标是否属于 FakeDNS 地址池。如果映射表存在对应记录,例如 198.18.0.27 对应 example.net,目标就可以恢复为域名。随后,路由器按配置顺序检查域名规则、IP 规则、端口规则和入站标签,最终选择代理或直连出站。

TUN + FakeDNS 配置重点

IPv4 地址池
198.18.0.0/15
常见池容量
65535
目标还原
fakedns
路由依据
恢复后的域名
适用入口
TUN 入站

地址池、DNS 返回与目标还原必须来自同一套核心配置。

普通系统代理配置重点

HTTP 端口
10809
SOCKS 端口
10808
目标来源
应用提交的域名
DNS 接管
通常不完整
适用入口
显式代理应用

应用已经把域名交给代理时,FakeDNS 带来的收益通常有限。

这里容易混淆“协议嗅探”和“FakeDNS 还原”。HTTP、TLS 或 QUIC 嗅探尝试从流量内容中识别域名;FakeDNS 还原则直接读取先前建立的映射。两者可以共同存在,但映射还原不依赖每个连接都暴露可识别的主机名,因此对不便从负载中提取域名的连接更稳定。

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

这段配置只展示地址池与 DNS 服务器之间的概念关系,不能脱离入站、路由和出站单独使用。实际由客户端生成配置时,还要确认 TUN 入站已启用目标还原,并且本地网络没有把同一地址段用于实验设备或企业测试环境。

FakeDNS 对延迟与分流的实际影响

FakeDNS 最直接的收益是把“应用等待真实 DNS 响应”改成“应用立即取得本地假地址”。当远端 DNS 往返较高、首包容易超时或多个应用同时发起冷查询时,这个差异比较明显。已经命中系统缓存的域名则不会重复承担完整解析延迟,收益会缩小。

第二个收益是保留域名信息。应用在普通解析后只连接真实 IP,进入 TUN 的可能只剩目标地址;如果同一 IP 承载多个域名,单靠 IP 规则难以精确区分。FakeDNS 在连接阶段恢复原域名后,像 domaindomainSuffixgeosite 这类规则可以在出站选择前参与匹配。

观察项 普通远端 DNS FakeDNS 判断方法
首次返回地址 真实 A/AAAA 记录 保留段假 IP 查看应用侧解析结果
域名信息 解析后可能只剩 IP 由映射表恢复 查看路由命中日志
冷查询延迟 受 DNS 往返影响 通常为本地响应 连续测试并比较中位值
最终连接目标 真实 IP 或远端解析结果 还原后的域名 查看代理出站日志

第三个影响是解析出口更一致。若某域名应走代理,而系统却先通过本地网络查询 DNS,解析路径与流量路径就可能分离。FakeDNS 让本机先完成假地址分配,真实解析可以延后到代理出站一侧处理,从而减少本地 DNS 对代理域名解析结果的干扰。

结论:先确认瓶颈是否位于 DNS

若核心日志显示从查询到返回已低于 5 毫秒,而连接阶段仍耗时 300 毫秒以上,继续调整 FakeDNS 不会解决主要问题;应转向检查节点往返、丢包、TLS 握手和路由绕行。

FakeDNS 也会改变排障方式。看到 198.18.x.x 不应立即判断为解析错误,先检查该地址是否属于配置中的池、是否存在映射记录,以及连接有没有进入 TUN。只有应用收到假地址而核心无法恢复域名时,才说明链路中间断开。

与 TUN 模式和路由规则搭配

TUN 模式通过虚拟网卡接管不主动使用系统代理的进程流量,因此是 FakeDNS 最常见的配套入口。在 v2rayN 中,可以先进入「设置」→「参数设置」核对本地监听端口,再启用 TUN 模式;不同版本的 TUN 选项位置可能调整,最终应以状态栏显示和核心启动日志为准。

Android 端的 v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核。启用设备级流量接管后,应检查客户端设置中的本地 DNS、域名策略和路由模式是否来自同一个配置方案。不要同时让另一项本地网络工具占用 VPN 接口,否则 DNS 查询可能绕过当前核心。

  1. 先验证 TUN 接管。关闭应用自身的 HTTP 或 SOCKS 代理设置,启动客户端后访问测试域名,确认连接仍出现在核心日志中。
  2. 再观察假地址。对一个未缓存域名执行查询,检查是否返回配置池中的 198.18.x.x 地址。
  3. 确认域名还原。在路由日志中查找原始域名,而不是只看到假 IP;若仅记录假 IP,应检查目标还原配置。
  4. 验证规则命中。分别测试一个代理域名和一个直连域名,确认它们落到预期出站标签。
  5. 最后测试回退。关闭 FakeDNS 后恢复普通 DNS,确保配置失败时仍有明确可用的回退路径。

代理域名规则

匹配对象
还原后的域名
规则类型
domainSuffix
预期出站
proxy
验证位置
路由命中日志

域名规则应排在可能覆盖它的宽泛 IP 规则之前。

局域网与直连规则

保留目标
私有地址段
预期出站
direct
DNS 方式
本地或指定服务器
优先检查
地址池冲突

内部域名依赖局域网 DNS 时,不应被统一交给 FakeDNS 处理。

规则顺序尤其重要。假地址只是临时目标,如果一条宽泛的 IP 规则先匹配 198.18.0.0/15 并直接放行,连接可能在域名还原前被送到错误出口。更稳妥的做法是让 TUN 入站完成 FakeDNS 还原,再按域名规则分流,同时明确排除局域网和内部服务。

适合开启与不适合开启的场景

适合开启的典型环境是:TUN 已稳定接管、远端 DNS 往返较高、域名分流规则较多,并且应用流量经常只以 IP 形式进入核心。此时 FakeDNS 同时缩短冷查询等待,并让路由器重新获得原始域名,收益不只是单纯减少几十毫秒。

如果只使用浏览器显式连接本地 HTTP 或 SOCKS 端口,浏览器通常会把域名直接交给代理。核心已经拿到域名时,FakeDNS 对分流准确性的提升很小。此类配置优先保证 1080810809 等监听端口没有冲突,并检查系统代理是否指向正确端口。

  • 建议开启:TUN 接管全局流量,且核心日志中经常只能看到目标 IP。
  • 建议开启:远端 DNS 冷查询长期超过 50 毫秒,首开应用存在明显等待。
  • 谨慎开启:单位内部域名必须由局域网 DNS 解析,且存在分区域名结果。
  • 谨慎开启:真实网络已经使用 198.18.0.0/15 或自定义假地址池。
  • 收益有限:应用已通过显式代理提交域名,本地 DNS 不是当前瓶颈。

查询结果变成 198.18.x.x,是不是 DNS 配错了?

先确认 FakeDNS 是否处于启用状态。启用后返回保留段地址属于预期行为;接着查看核心日志,确认连接进入 TUN 后能恢复成原域名并命中路由规则。

开启后网页反而打不开,先检查哪里?

先关闭 FakeDNS 验证普通 DNS 是否可用,再检查 TUN 入站、目标还原和地址池是否同时生效。若日志只出现假 IP 而没有域名,通常是映射没有被入站正确读取。

FakeDNS 能让所有连接都明显变快吗?

不能。它主要减少冷查询等待。若 DNS 本来只需 3 至 5 毫秒,而节点往返达到 180 毫秒,整体体验仍由节点链路决定,应先比较连接阶段和解析阶段的耗时。

局域网设备名称解析失败怎么处理?

把内部域名后缀交给局域网 DNS,并将私有地址段保持直连。若内部网络占用 FakeDNS 地址池,还要更换地址池或在该网络配置下关闭 FakeDNS。

订阅更新也需要经过 FakeDNS 吗?

订阅更新与节点流量是两条可独立处理的请求。先确认订阅地址能通过当前代理或直连策略访问,不要把订阅失败直接归因于 FakeDNS;应查看更新请求使用的出站和 DNS 记录。

按日志完成验证与故障定位

验证 FakeDNS 不应只看网页能否打开。完整检查需要覆盖 DNS 返回、TUN 捕获、域名恢复、规则命中和代理出站五个阶段。任一阶段缺失,都可能出现“偶尔能用”或“某些应用失效”的结果。

建议选取两个此前没有访问过的域名:一个应走代理,一个应直连。清理客户端内部 DNS 缓存后分别发起查询,记录返回地址与时间;然后立即建立连接,在日志中确认原域名、入站标签和出站标签。测试期间不要频繁切换节点,以免把节点差异误判成 DNS 差异。

  1. 记录客户端当前配置,确认本地 SOCKS 端口为 10808、HTTP 端口为 10809,或记录实际自定义值。
  2. 启动 TUN 后检查核心日志,确认虚拟网卡创建成功,没有路由添加失败或接口占用提示。
  3. 查询测试域名,确认响应地址位于配置的 FakeDNS 池内,响应时间通常应低于远端 DNS 往返。
  4. 发起连接并搜索日志中的原域名,确认不是始终以 198.18.x.x 作为最终目标。
  5. 检查代理域名命中 proxy,直连域名命中 direct,避免被更靠前的宽泛规则覆盖。
  6. 连续测试 20 次,分别记录中位值和失败次数,不以单次最快结果作为结论。

结论:假地址可见,原域名也必须可追踪

应用侧看到保留段地址只能证明 FakeDNS 已返回结果;日志中能继续看到原域名、正确出站和成功连接,才表示“分配—捕获—还原—分流”整条链路闭合。

若测试失败,可按逆序回退:先暂时停用域名分流规则,确认基础代理出站可达;再关闭 FakeDNS,改用普通 DNS 检查解析;最后停用 TUN,使用显式系统代理验证本地监听端口。每次只改变一个变量,才能确定故障属于地址池、DNS、TUN、路由还是节点链路。

FakeDNS 的核心价值不是制造一个看似特殊的解析结果,而是让接管全局流量时仍能稳定保留域名维度。配置正确时,假地址只在本机短暂存在,路由判断使用恢复后的域名,代理出站继续按照 VMess、VLESS 和订阅节点的实际配置建立连接。是否开启,应由 DNS 延迟、TUN 接管方式、内部网络结构和分流需求共同决定。

下载客户端