开启 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 连接能回到同一核心。
- 在客户端主界面选中一个可用的 VMess、VLESS 或其他已导入节点,先完成普通代理连通测试。
- 打开「设置」→「参数设置」,确认本地混合监听端口没有与其他程序冲突;本文示例使用
10808。 - 进入「设置」→「Tun 模式设置」,核对虚拟网卡、DNS 接管和自动路由选项,再返回主界面开启 Tun。
- 执行一次
nslookup example.com 127.0.0.1或使用系统查询工具,观察响应是否落在配置的虚拟地址池。 - 访问该域名并查看核心日志,确认路由记录显示的是域名规则,而不是仅显示
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 是否被另一条静态路由抢先接管。
局域网设备名称突然无法访问?
为
lan、local 等内部后缀设置本地 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 规则通常更清楚。
- 系统代理已经覆盖浏览器和办公软件,域名规则能在日志中直接命中。
- 网络中存在大量短主机名、内部搜索域或只能由路由器解析的名称。
- 关键应用使用自带加密 DNS,且无法关闭或纳入 TUN 接管。
- 正在使用虚拟机、容器或其他隧道,占用了 198.18.0.0/15 或相邻路由。
- 当前问题是节点握手失败、订阅过期或端口占用,这些故障与 FakeDNS 无关。
用日志和对照测试判断是否真的生效
判断 FakeDNS 是否有效,不能只看开关状态。完整验证应同时看到三个证据:DNS 查询返回虚拟地址、虚拟地址连接被 TUN 捕获、路由日志恢复并匹配原始域名。如果日志最终只显示 198.18.x.x,说明映射还原没有完成;如果查询仍返回公网地址,说明 DNS 没有进入 FakeDNS;如果能恢复域名但网页打不开,则应继续检查出站与真实解析。
- 关闭目标应用,清理系统 DNS 缓存,记录客户端当前核心与配置名称。
- 开启 TUN 和 FakeDNS,查询一个此前未访问的测试域名,确认结果属于虚拟地址池。
- 立即访问该域名,在日志中寻找完整域名、命中的路由规则和最终出站标签。
- 分别测试一个代理域名、一个直连域名和一个局域网名称,避免只验证单一路径。
- 关闭 FakeDNS 后重复相同测试,对比首个 DNS 响应时间、路由命中和应用兼容性。
测试时不要只盯着网页是否打开。建议记录冷查询耗时、首次连接耗时、路由标签和 DNS 出口。若 FakeDNS 把冷查询从 60 毫秒降到 2 毫秒,但目标应用出现偶发超时,整体收益并不成立。反之,即使页面总耗时变化不明显,只要域名分流从偶发误判变为稳定命中,它仍可能值得保留。
检查顺序
1. DNS 返回地址是否属于 FakeDNS 地址池
2. TUN 路由是否捕获该虚拟地址
3. 核心日志是否恢复出原始域名
4. 域名是否命中预期路由规则
5. 代理或直连出站是否完成真实连接
v2rayN、v2rayNG 与 v2flyNG 的菜单和底层内核不同,但排查逻辑一致。先确定请求进入哪个 DNS,再确定连接进入哪个入站,最后查看路由把它交给哪个出站。把这三段链路拆开检查,比反复切换节点、重导订阅或扩大 FakeDNS 地址池更有效。