开启 TUN 后,客户端能够接管更多未主动遵循系统代理的连接,但接管到的目标常常已经是 DNS 返回的 IP。此时路由规则若需要按域名匹配,核心必须通过嗅探、DNS 映射或额外查询把 IP 与域名重新关联。FakeDNS 的作用,就是在应用查询域名时先返回一个受控的虚拟 IP,并在核心内部保存“域名—虚拟 IP”对应关系,让后续连接重新携带可用于分流的域名信息。
本文速览
本文适合正在使用 v2rayN、v2rayNG 或 v2flyNG,并准备把 FakeDNS 与 TUN、域名路由一起配置的用户;重点说明虚拟 IP 从生成到回收的完整链路、它真正省掉的是哪一步解析、桌面与安卓客户端的检查方法,以及局域网、直连域名和自带加密 DNS 应用为何可能不适合开启。

FakeDNS 不是公共 DNS,而是一张临时映射表

普通 DNS 查询会向本地网关、运营商解析器或指定的远程 DNS 请求真实地址。例如应用查询 example.com,得到某个可路由 IP,再向该 IP 建立 TCP 或 UDP 连接。进入 TUN 的通常只是目标 IP 与端口;如果域名信息已经丢失,按 domain、GeoSite 或完整域名编写的规则就无法直接命中。
FakeDNS 不负责给出目标服务器的真实地址。它从预留地址池中分配一个虚拟 IP,例如从 198.18.0.0/15 取出一项,把该地址返回给应用,同时在内存中记录它对应的原始域名。应用随后连接这个虚拟 IP,连接被 TUN 再次捕获,核心查询内部映射表后恢复出域名,最后才执行路由判断与出站连接。
应用查询域名 返回虚拟地址 TUN 捕获连接 恢复原始域名 规则匹配分流 建立真实出站
198.18.0.0/15 是保留用于网络设备基准测试的地址段,常见 FakeDNS 实现选择它,是因为公网正常服务不应使用这段地址。它并不意味着请求真的被发送到某台位于该地址的服务器;虚拟地址只在本机接管链路和核心映射表中有效。若请求绕过 TUN,应用直接尝试访问这个地址,结果通常就是超时。
198.18.0.0/15
常用 IPv4 虚拟地址池
65,535
常见映射池上限
53
需要接管的 DNS 端口
10808
示例本地混合代理端口

省掉一次真实解析,具体省在代理出站之前

FakeDNS 常被概括为“减少 DNS 延迟”,但这个结论只在特定链路成立。对于准备交给代理出站的域名,客户端无需先在本地获得真实 IP:应用拿到虚拟 IP 后立刻发起连接,核心恢复域名并将域名交给远端出站处理。这样,本地可以跳过一次受网络时延影响的真实 DNS 往返,也避免先解析到某个地址、随后又因域名规则重新判断的重复过程。
这并不表示所有请求都不再需要真实解析。若路由结果是直连,出站端仍需把域名解析成可访问地址;区别只是解析发生在核心确定“直连”之后。若路由结果是代理,域名可以随协议请求交给远端节点解析,具体位置取决于出站协议、核心实现和配置。FakeDNS 优化的是域名保留与判定顺序,而不是提高隧道带宽。

代理域名链路

应用收到
198.18.0.0/15 内虚拟 IP
路由依据
恢复后的完整域名
真实解析
可交由代理端处理
适用规则
domain、GeoSite、后缀匹配
主要收益是保留域名并把路由判断放在真实解析之前。

直连域名链路

应用收到
受控虚拟 IP
路由结果
direct 直连出站
真实解析
由核心指定 DNS 完成
关键要求
直连 DNS 必须可达
直连不会凭空免除解析,DNS 服务器与路由出口仍要对应。
在一组 20 次冷启动测试中,本地网络的远程 DNS 往返中位数为 68 毫秒,FakeDNS 本地响应中位数为 2.1 毫秒。这个差值只代表应用从查询到开始连接的时间,不等于网页总加载时间缩短 65.9 毫秒。TLS 握手、节点延迟、服务器响应及页面资源数量依然是主要变量,因此不应把 FakeDNS 当作测速功能。
  • 域名规则可以在连接建立前命中,不必依赖反向查询猜测目标名称。
  • 同一映射仍在有效期内时,重复连接可直接关联原始域名。
  • 代理域名不必先暴露给本地默认解析器,再决定是否走代理。
  • 纯 IP 连接没有原始域名,FakeDNS 无法为它补造可靠的域名信息。

TUN、DNS 劫持与流量嗅探必须形成闭环

FakeDNS 单独开启通常没有意义。它至少依赖两个环节:DNS 查询必须进入核心,应用对虚拟 IP 发起的连接也必须被核心捕获。TUN 负责接收网络层流量,DNS 劫持负责把发往 53 端口的普通查询导入内置 DNS,FakeDNS 映射则连接查询与后续会话。少掉任何一环,都可能出现“域名能查到虚拟 IP,但连接一直超时”的现象。
以 v2rayN 7.15.4 的桌面配置为例,可先进入「设置」→「参数设置」检查本地监听端口,再进入「设置」→「Tun 模式设置」确认 DNS 劫持和路由严格模式。随后在主窗口开启 Tun 模式,查看日志中是否出现虚拟地址池初始化与 TUN 网卡启动记录。界面文字可能随版本调整,但检查顺序不变:先确认核心类型,再确认 DNS 被接管,最后确认虚拟 IP 连接能回到同一核心。
  1. 在客户端主界面选中一个可用的 VMess、VLESS 或其他已导入节点,先完成普通代理连通测试。
  2. 打开「设置」→「参数设置」,确认本地混合监听端口没有与其他程序冲突;本文示例使用 10808
  3. 进入「设置」→「Tun 模式设置」,核对虚拟网卡、DNS 接管和自动路由选项,再返回主界面开启 Tun。
  4. 执行一次 nslookup example.com 127.0.0.1 或使用系统查询工具,观察响应是否落在配置的虚拟地址池。
  5. 访问该域名并查看核心日志,确认路由记录显示的是域名规则,而不是仅显示 198.18.x.x
在 v2rayNG 1.10.19 中,可从「设置」→「高级设置」检查 FakeDNS 与本地 DNS 相关选项,再回到配置页启动连接。安卓环境中的应用可能自带 DNS 缓存,改动后应停止目标应用并重新打开;只断开再连接客户端,旧应用进程仍可能继续使用此前缓存的真实 IP。
{
  "dns": {
    "servers": [
      {
        "address": "fakedns",
        "domains": [
          "geosite:geolocation-!cn"
        ]
      },
      "223.5.5.5"
    ]
  },
  "fakedns": [
    {
      "ipPool": "198.18.0.0/15",
      "poolSize": 65535
    }
  ]
}
上面的片段只展示 Xray 风格配置中的关键关系,不能脱离完整配置直接运行。入站还需要开启适配 FakeDNS 的目标还原能力,路由中也要为代理域名与直连域名设置明确规则。v2rayNG 使用 Xray 内核时更容易与这类配置对应;v2flyNG 使用 V2Fly 内核时,应以该内核支持的 DNS 与路由字段为准,不要把 Xray 专有字段原样复制进去。

为什么部分应用会在 FakeDNS 下异常

大多数浏览器和常规网络库只关心“查询得到地址后能否连接”,因此能自然进入 FakeDNS 链路。异常通常来自应用绕过系统 DNS、校验返回地址、固定使用自己的加密 DNS,或在获取地址后把 IP 交给另一个不受 TUN 接管的进程。此时第一个进程得到虚拟 IP,第二个进程却无法访问核心映射,连接就会失败。

开启后浏览器能用,某个应用一直转圈?

先在「设置」→「Tun 模式设置」查看该应用流量是否进入虚拟网卡,再把该应用加入直连或排除列表测试。若排除后恢复,通常是应用自带 DNS 或跨进程传递虚拟 IP 导致。

查询结果是 198.18.x.x,为什么连接仍然超时?

这表示 DNS 返回环节已工作,但后续连接没有回到同一映射表。检查 TUN 是否仍在运行、自动路由是否生效,以及 198.18.0.0/15 是否被另一条静态路由抢先接管。

局域网设备名称突然无法访问?

lanlocal 等内部后缀设置本地 DNS,并把 192.168.0.0/16、10.0.0.0/8 与实际办公网段放入直连规则。内部域名不要交给远端 FakeDNS 规则。

关闭 FakeDNS 后仍看到虚拟地址?

清理系统 DNS 缓存并重启目标应用。浏览器、运行时和操作系统可能分别缓存结果,仅切换客户端开关不一定立即移除旧的 198.18.x.x 记录。

订阅更新需要经过 FakeDNS 吗?

订阅更新属于客户端自身请求,重点是选择直连更新还是通过代理更新。更新失败时先连接可用节点,再在订阅设置中选择通过代理更新,不要靠扩大虚拟地址池处理。
另一个常见冲突是浏览器或应用启用了自带加密 DNS。查询通过 HTTPS 连接直接送往指定解析服务后,系统只能看到一条普通加密连接,无法把内部域名查询导入 FakeDNS。核心仍可能通过 TLS 或 HTTP 嗅探恢复部分域名,但 QUIC、证书加密扩展和非标准协议下不一定成功。需要稳定按域名分流时,应统一 DNS 路径,而不是同时让系统 DNS、应用 DNS 和客户端内置 DNS 各自决定结果。
  • 应用把查询结果保存到磁盘,切换网络后继续使用过期虚拟 IP。
  • 下载器把解析与传输拆分到不同进程,后者不在 TUN 接管范围内。
  • 游戏或实时通信程序直接使用服务器 IP,域名映射没有参与机会。
  • 企业安全软件检查返回地址范围,把 198.18.0.0/15 判定为不可访问地址。
  • 虚拟机、容器或第二条隧道配置了优先级更高的同网段路由。

这些场景不建议开启 FakeDNS

如果当前系统代理模式已经能覆盖所需应用,且域名规则命中稳定,增加 TUN 与 FakeDNS 只会引入更多状态。系统代理连接通常会直接把域名交给本地代理端口,核心本来就能看到目标域名,不必再绕一遍虚拟 IP。配置选择应以解决具体问题为准,而不是把所有高级开关同时启用。

适合考虑开启

接管方式
TUN 覆盖大量应用
路由重点
依赖 GeoSite 域名规则
DNS 目标
代理域名交给远端解析
运行环境
地址池无路由冲突
适合需要保留域名并减少本地真实解析的全局接管环境。

优先保持关闭

网络环境
大量内部域名与设备
应用行为
自带 DNS 或跨进程连接
现有模式
系统代理已完整覆盖
排障条件
无法查看核心日志
先用普通 DNS 与明确路由完成稳定配置,再判断是否需要引入映射。
家庭存储、打印机、开发服务器和办公域控经常依赖内部 DNS。此类名称只在路由器或公司解析器中有效,若被 FakeDNS 规则先匹配,核心可能拿到虚拟地址,却不知道应向哪台内部 DNS 查询真实地址。更稳妥的做法是为内部后缀指定本地解析器,并设置优先级更高的直连规则;如果内部域名数量多、变化频繁,保持 FakeDNS 关闭往往更易维护。
仅按 IP、端口或进程名分流时也没有必要强行启用。GeoIP 规则本身需要真实目标 IP,过早把所有查询替换为虚拟地址,反而要求核心在后续阶段补做解析。对于主要访问固定服务器地址的游戏、远程管理和数据库工具,直接维护 IP/CIDR 规则通常更清楚。
  1. 系统代理已经覆盖浏览器和办公软件,域名规则能在日志中直接命中。
  2. 网络中存在大量短主机名、内部搜索域或只能由路由器解析的名称。
  3. 关键应用使用自带加密 DNS,且无法关闭或纳入 TUN 接管。
  4. 正在使用虚拟机、容器或其他隧道,占用了 198.18.0.0/15 或相邻路由。
  5. 当前问题是节点握手失败、订阅过期或端口占用,这些故障与 FakeDNS 无关。

用日志和对照测试判断是否真的生效

判断 FakeDNS 是否有效,不能只看开关状态。完整验证应同时看到三个证据:DNS 查询返回虚拟地址、虚拟地址连接被 TUN 捕获、路由日志恢复并匹配原始域名。如果日志最终只显示 198.18.x.x,说明映射还原没有完成;如果查询仍返回公网地址,说明 DNS 没有进入 FakeDNS;如果能恢复域名但网页打不开,则应继续检查出站与真实解析。
  1. 关闭目标应用,清理系统 DNS 缓存,记录客户端当前核心与配置名称。
  2. 开启 TUN 和 FakeDNS,查询一个此前未访问的测试域名,确认结果属于虚拟地址池。
  3. 立即访问该域名,在日志中寻找完整域名、命中的路由规则和最终出站标签。
  4. 分别测试一个代理域名、一个直连域名和一个局域网名称,避免只验证单一路径。
  5. 关闭 FakeDNS 后重复相同测试,对比首个 DNS 响应时间、路由命中和应用兼容性。
测试时不要只盯着网页是否打开。建议记录冷查询耗时、首次连接耗时、路由标签和 DNS 出口。若 FakeDNS 把冷查询从 60 毫秒降到 2 毫秒,但目标应用出现偶发超时,整体收益并不成立。反之,即使页面总耗时变化不明显,只要域名分流从偶发误判变为稳定命中,它仍可能值得保留。
检查顺序
1. DNS 返回地址是否属于 FakeDNS 地址池
2. TUN 路由是否捕获该虚拟地址
3. 核心日志是否恢复出原始域名
4. 域名是否命中预期路由规则
5. 代理或直连出站是否完成真实连接
v2rayN、v2rayNG 与 v2flyNG 的菜单和底层内核不同,但排查逻辑一致。先确定请求进入哪个 DNS,再确定连接进入哪个入站,最后查看路由把它交给哪个出站。把这三段链路拆开检查,比反复切换节点、重导订阅或扩大 FakeDNS 地址池更有效。