FakeDNS 用本地分配的虚拟地址保留域名线索,不是公共 DNS,也不是新的代理协议。本文适合已经能正常连接、准备调整 TUN 与域名分流的用户:先看查询与连接如何闭环,再核对配置边界,最后按缓存、DNS 接管和局域网访问逐项排查。没有明确需求时,保留当前可用的真实地址解析方案即可。
FakeDNS 原理:虚拟地址是映射索引
普通 DNS 查询把域名解析成目标服务的真实地址。FakeDNS 则从本地地址池中选取一个地址,记录“域名与虚拟 IP”的映射,再把虚拟地址返回给应用。例如,应用查询 example.org 的 A 记录,可能获得 198.18.0.1。这个地址只是演示值,实际分配顺序由实现与运行状态决定。
应用随后向这个虚拟 IP 建立连接。接管流量的组件读取目标地址,查回域名,将域名交给路由与出站处理。因此,FakeDNS 的关键不是“回答一个特殊 IP”,而是查询和后续连接必须经过能够共享或使用这份映射的处理链。
198.18.0.0/15 是用于基准测试的保留地址范围,覆盖 198.18.0.0 至 198.19.255.255;它不是普通公网服务地址。FakeDNS 常借用此范围,但不同实现可以使用不同地址池。如果虚拟地址绕过接管直接发给物理网络,通常无法到达原本的网站。
TUN 与域名分流:接管、还原、匹配缺一不可
TUN 在网络层接收 IP 数据包,刚接管一个连接时,常见信息只有目标 IP、端口与传输协议。如果应用已经完成域名解析,域名可能不再直接出现在数据包里。FakeDNS 把“这个地址原来对应哪个域名”提前保存在映射中,为域名规则提供线索。
- 接管 DNS:应用的查询需要进入预期的 DNS 处理链。传统 DNS 常使用 UDP 53,也可能使用 TCP 53;只处理其中一种不能代表所有查询都已接管。
- 接管连接:发往虚拟地址池的 TCP 或 UDP 流量必须进入相应的 TUN、路由与内核处理链,不能被排除规则提前放行。
- 恢复域名:接收连接的组件必须能使用映射。Xray 的相关配置涉及 FakeDNS 与入站嗅探;仅在 DNS 列表中加入一个名称并不足以完成闭环。
- 执行规则:还原域名后再按域名规则、IP 规则和兜底规则决定出站。VMess、VLESS 等协议负责后续代理传输,不负责生成这份映射。
浏览器通过系统 HTTP 代理访问 HTTPS 网站时,可以在 CONNECT 请求中携带目标主机名;SOCKS5 也能使用域名地址类型。这类链路可能已经把域名交给代理,不一定需要再引入 FakeDNS。相反,应用若先在本地解析并只提交 IP,就需要另行判断域名信息如何获取。
判断:先确认域名是否已经到达路由层
如果当前系统代理链路已经能按域名命中规则,先保留现状。只有 TUN 接管后域名信息不足、并且 DNS 与连接都能进入同一套处理链时,再评估 FakeDNS。
配置核对:地址池与还原入口必须配套
v2rayN 是桌面客户端,v2rayNG 使用 Xray 内核,v2flyNG 使用 V2Fly 内核。客户端界面、所选内核和 TUN 接入组件是不同层级,不能仅凭客户端名称判断配置字段是否可用。下列键值用于解释 Xray 的配置关系,不代表三款客户端都提供同名开关,也不能直接作为完整配置导入。
虚拟地址分配端
- 配置对象
fakedns- 地址池示例
198.18.0.0/15- 容量示例
poolSize: 65535- DNS 服务项
fakedns
容量是示例参数,不是节点数或并发承诺;定义地址池还需要让相应查询实际使用它。
连接还原端
- 入站配置
sniffing- 启用字段
enabled: true- 还原类型
destOverride: ["fakedns"]- 接管范围
- 应用到虚拟地址池的连接
应核对实际承接流量的入站,而不是给一个没有流量经过的入站添加字段。
下面是 Xray 原生 JSON 的分配端片段,只展示地址池和内置 DNS 的关联。它缺少入站、出站、路由和接管配置,不能替换客户端生成的完整文件。客户端若用另一组件处理 TUN 与 DNS,应以该组件的配置结构为准,不要混用字段。
{
"fakedns": [
{
"ipPool": "198.18.0.0/15",
"poolSize": 65535
}
],
"dns": {
"servers": [
"fakedns"
]
}
}
- 先备份现有设置,再检查实际生成的运行配置。界面中的“启用 TUN”不等于已启用 FakeDNS。
- 确认客户端启动时没有未知字段、配置解析失败或地址池冲突。不能通过的配置应立即回退,不要同时修改节点协议参数。
- 检查 A 与 AAAA 查询的处理策略。上面的 IPv4 地址池示例不代表 IPv6 查询也获得了对应的虚拟映射。
- 分别检查直连与代理出站如何处理还原后的域名。最终连接需要真实地址时,仍要有可用的解析路径,不能让查询反复回到虚拟分配端。
适用场景与副作用:不是所有应用都适合虚拟 IP
FakeDNS 可以减少部分连接在本地获取真实地址的需求,并帮助域名规则识别已经变成 IP 连接的请求。但它不会自动缩短远端解析时间,也不会修复节点不可用、TLS 参数错误或路由规则顺序错误。是否有收益,应看域名识别和应用兼容性,而不是只看 DNS 回答是否变快。
| 场景 | 主要影响 | 处理建议 |
|---|---|---|
| TUN 下按域名分流 | 映射可为 IP 连接补回域名 | 验证 DNS、虚拟网段与还原入口的完整链路 |
| 局域网服务与内部域名 | 名称发现、内网解析可能被错误接管 | 为内部域名和网段保留真实解析及直连路径 |
| 企业网络使用相同网段 | 虚拟池可能与现有路由冲突 | 检查路由表,按实现能力更换池或关闭该功能 |
| 应用检查解析结果 | 程序可能拒绝保留地址或缓存虚拟地址 | 对该应用采用真实地址解析,重新测试登录与连接 |
| 应用使用加密 DNS | 查询可能绕过常规 53 端口接管 | 检查应用 DNS 设置,不把加密连接误当普通 DNS 强行重定向 |
直接连接 IP 字面量的程序没有先查询域名,FakeDNS 无法凭空补出域名。局域网的组播名称发现也不等于普通单播 DNS;只调整 53 端口规则,不一定能解决打印、文件共享或内部服务发现问题。
取舍:内部服务优先保持真实解析
如果工作网络依赖内部 DNS,先把内部域名、DNS 服务器和相关网段的解析及连接路径核对清楚。出现登录或服务发现异常时,先回退 FakeDNS,不要用扩大代理范围来掩盖问题。
验证流程:分开检查 DNS、映射和出站
验证时使用同一个测试域名,固定节点与路由规则,一次只改变一个开关。看到虚拟地址只能证明某次查询获得了虚拟回答;看到网站打开也不能证明所有应用都经过相同链路。应把解析结果、接管日志和规则命中一起检查。
- 建立基线:关闭 FakeDNS,记录测试域名能否访问、当前 DNS 结果和出站规则。保留可恢复的设置,不修改订阅中的服务器地址。
- 验证查询:启用后查询同一域名,核对 A 记录是否位于实际配置的虚拟地址池。若仍为真实 IP,先查缓存、应用自带 DNS 和 DNS 路由,不急着修改地址池。
- 验证还原:发起新连接,检查日志是否能关联到原域名及预期出站。若只看到虚拟 IP 被直接连接,应优先检查还原入口与网段路由。
- 验证兼容性:分别测试网页、内部服务和一个非浏览器应用。对 UDP 应用也要单独测试,网页的 TCP 连接成功不能替代 UDP 验证。
Windows 可先查看系统当前使用的解析结果,切换方案后再清理系统 DNS 缓存。下面两条命令分别用于查询和清理;它们不是性能测试,也不提供固定的预期地址。
nslookup example.org
ipconfig /flushdns
系统缓存清理不等于清除了浏览器或应用内部缓存。关闭 FakeDNS 或重启映射组件后,应用可能仍持有旧虚拟地址;若映射已经消失,这些旧连接会失败。回退时应停止相关应用、清理系统缓存,再重开应用验证。
常见问题:开启后异常从哪里查
解析到 198.18 开头,是否说明 DNS 出错了?
先看实际地址池。启用 FakeDNS 且配置使用 198.18.0.0/15 时,这可能是正常回答。继续发起连接并查看域名还原和出站日志;如果功能已关闭却仍返回这类地址,清理系统与应用缓存,并检查是否还有其他 DNS 接管组件运行。
为什么开启后浏览器能用,其他应用却断网?
分别检查应用是否使用独立 DNS、是否被排除在 TUN 之外,以及是否拒绝保留地址。先让异常应用回到真实地址解析方案,重启应用复测。不要只凭浏览器成功就扩大所有应用的接管范围。
开启 FakeDNS 就不用配置远端 DNS 了吗?
不是。虚拟分配端只解决本地映射;直连出站或远端代理建立实际连接时,仍可能需要解析域名。检查负责最终解析的组件与 DNS 出站,避免代理服务器域名的解析依赖尚未建立的代理连接。
关掉后还是打不开网页,应该重装客户端吗?
先恢复原 DNS 与接管设置,执行 ipconfig /flushdns,再退出并重开浏览器。随后核对系统代理是否仍指向已停止的本地服务。Android 端先停止并重启客户端 VPN 连接及相关应用,再复测;通常应先排除旧缓存和残留接管状态。
最终判断标准是连接链路可解释、域名规则能命中、日常应用能稳定使用。FakeDNS 只是 DNS 与流量接管之间的一种配合方式;订阅导入、节点选择、系统代理和 TUN 仍然需要分别核对。