FakeDNS 用虚拟地址保存域名线索,适合需要按域名分流的透明接管场景。本文从 DNS 应答、连接回收、域名还原三个环节说明原理,再给出内核配置片段、TUN 检查步骤与回退方法。重点不是寻找一个通用开关,而是确认 DNS 与后续连接是否进入同一条可还原的处理链。
FakeDNS 是什么:用虚拟地址关联域名
普通 DNS 查询会把域名转换为可连接的真实地址。FakeDNS 则从指定地址池取出一个虚拟 IP 返回给应用,并记录“域名与虚拟 IP”的对应关系。应用仍然按照正常流程发起连接,但这个地址不是网站服务器的实际地址,必须由本地代理接回处理。
例如,应用查询 example.com,本地 FakeDNS 可以分配 198.18.0.1。应用连接该地址的 443 端口时,代理查询映射表,把目标恢复成 example.com:443,再进行域名规则匹配与出站选择。这个地址仅为流程示例,不代表某次查询一定会分配相同地址。
它解决的是“连接到达代理时只剩 IP,域名信息已经丢失”的问题。它不负责提供节点,不替代 VMess、VLESS 或 Trojan,也不改变 REALITY 的握手配置。订阅负责提供连接参数,FakeDNS 负责保留本地连接与域名之间的关联,两者所在层次不同。
域名还原与普通嗅探有什么不同
普通协议嗅探会分析连接中的应用层信息,例如 HTTP Host 或 TLS ClientHello 中可见的服务器名称。FakeDNS 还原则依赖先前保存的映射,不需要等应用主动在载荷中暴露域名。两种方式可以配合,但不能把“开启 HTTP/TLS 嗅探”直接等同于“已经完成 FakeDNS 配置”。
- 映射还原:根据目标虚拟 IP 查找域名。前提是分配地址与接收连接的一侧共享有效映射。
- 协议嗅探:从连接内容提取域名。对于没有可识别域名信息的流量,不能保证得到结果。
- 域名路由:拿到域名后匹配规则。恢复了域名,不代表规则一定命中,还要检查规则顺序与目标出站。
- 实际连接:代理出站可能把域名交给远端解析;直连出站通常仍需要获取真实地址,具体取决于内核与出站设置。
这也解释了为什么开启 FakeDNS 不等于彻底取消真实 DNS:应用端可能省去一次等待真实解析的过程,但最终建立直连、解析节点服务器域名等环节仍可能需要真实 DNS。远程代理链路中,目标域名也可能由远端继续解析。
FakeDNS 与 TUN:需要接通的两个入口
TUN 提供虚拟网络接口,用来接收符合路由条件的 IP 流量;FakeDNS 提供虚拟 DNS 应答与映射。两者经常同时出现,是因为 TUN 能把发往虚拟地址的连接重新送回代理,但 TUN 本身不保证所有 DNS 都已接管,也不保证使用某一种 FakeDNS 实现。
DNS 处理入口
- 输入
- 应用发出的域名查询
- 处理
- 由指定 DNS 模块分配虚拟 IP
- 检查点
- 系统 DNS、应用加密 DNS、IPv6 查询
查询未进入此入口,就不会产生可用于后续还原的映射。
连接处理入口
- 输入
- 应用发往虚拟 IP 的连接
- 处理
- TUN 接收后交给对应的映射还原逻辑
- 检查点
- 虚拟地址段路由、映射生命周期、出站目标
不能把虚拟地址直接交给不认识该映射的另一套内核。
在 v2rayN 中,TUN 路径与常规代理路径可能使用不同的配置生成方式或处理模块。不要把某个内核的 fakedns JSON 直接粘贴到另一套 TUN 配置格式中。应先确认当前选中的内核、正在使用的配置与日志,再判断 DNS 是由哪一层处理。
- 先关闭 TUN,用原有系统代理验证节点能否正常连接,排除订阅和服务端故障。
- 打开 v2rayN 的「设置」→「参数设置」,检查当前版本提供的内核与相关配置项;具体分页名称随版本变化,以实际界面为准。
- 启用 TUN 后检查系统路由,确认虚拟地址段会进入接管路径,而不是发往物理网关。
- 同时检查 DNS 接管与应用自身的加密 DNS 设置,避免只接住业务连接却没有建立域名映射。
V2Ray / Xray 配置:分配与还原必须成对
下列是支持对应字段的 V2Ray / Xray 内核配置片段,用来说明字段关系,不是完整的 v2rayN 导入配置。它没有入站监听、节点出站和完整路由规则。图形客户端通常会生成这些内容,修改生成文件也可能在下次保存时被覆盖。
{
"dns": {
"servers": ["fakedns"]
},
"fakedns": [
{
"ipPool": "198.18.0.0/15",
"poolSize": 4096
}
]
}
dns.servers 中的 fakedns 表示使用虚拟 DNS 应答;顶层 fakedns 定义地址池与容量。本例中的 4096 是示例容量,不是所有内核的默认值,也不是性能指标。还需要把实际 DNS 查询送入这个 DNS 模块,仅添加字段不会自动接管系统查询。
对于接收虚拟 IP 连接的入站,还需要启用对应的恢复机制。下面的 sniffing 对象应合并到相关入站对象内,不是另一个顶层配置。实际字段支持情况应以所用内核为准。
{
"sniffing": {
"enabled": true,
"destOverride": ["fakedns"],
"routeOnly": false
}
}
enabled开启该入站的嗅探处理;destOverride中的fakedns指定按虚拟地址映射恢复目标。- 本示例使用
routeOnly: false,让恢复结果可以用于目标替换,而不只用于路由匹配。不要在未理解出站行为时改成仅路由模式。 - 若选择代理出站,应确认恢复后的域名被交给代理链路;若选择直连,应提供能得到真实地址的解析路径,避免再次返回虚拟地址形成循环。
geosite:规则匹配域名分类,geoip:规则匹配地址分类。虚拟 IP 不代表目标服务器的地理位置,不能依靠它进行真实目标的 IP 归属分流。
什么时候开启:按连接方式做选择
如果应用本来就通过 HTTP 代理或携带域名的 SOCKS 请求连接,代理已经可能拿到域名,FakeDNS 的额外收益通常有限。它更适合透明接管后只能看到目标 IP、又需要稳定使用域名规则的情况。
| 使用场景 | 建议 | 先检查什么 |
|---|---|---|
| TUN 接管,主要按域名分流 | 可评估开启 | DNS 与连接能否共享映射 |
| 浏览器使用显式代理 | 优先维持现状 | 代理是否已经接收到域名 |
| 企业内网、局域网服务发现 | 先配置真实解析例外 | 内部域名、打印机与本地设备访问 |
| 应用强制使用自带加密 DNS | 先解决查询绕行 | 查询是否经过本地 DNS 模块 |
| 工具需要显示目标真实 IP | 对此类查询保留真实解析 | 诊断结果是否被虚拟地址替代 |
结论:先验证域名是否丢失,再决定开启
如果日志已经显示目标域名且域名规则命中正常,先保留现有 DNS 配置;只有在透明接管路径中确实丢失域名,并能同时接管查询与连接时,再试用 FakeDNS。
198.18.0.0/15 属于用于网络基准测试的特殊用途地址段,不是网站公网地址,也不等同于常见私有网段。如果本地实验网络或企业环境已经使用它,应先排查路由冲突。使用其他地址池同样需要确认内核支持与路由规划,不能随意选一个公网地址段替代。
如何验证:不要只看 DNS 查询结果
验证需要覆盖完整链路。仅看到 198.18 或 198.19 开头的地址,只能说明某次查询得到了虚拟应答,不能证明后续连接已经恢复域名或正确分流。反过来,某个工具返回真实地址,也可能是它绕过了预期 DNS 入口。
- 记录基线。保存原配置,选择一个原本可访问的域名,同时记录当前节点和分流模式;不要一边测试一边更换协议。
- 触发新查询。启用配置后重新启动测试应用。Windows 可执行
ipconfig /flushdns清除系统 DNS 缓存,但浏览器自己的 DNS 与连接缓存仍可能需要另行清理。 - 观察 DNS 入口。可用
nslookup example.com辅助检查系统解析路径,但该工具不一定复现浏览器的加密 DNS 行为,不能单独作为验收依据。 - 观察连接日志。检查虚拟目标是否被还原为原始域名,以及最终命中的出站。临时增加日志详细程度后,应在测试结束时恢复,避免长期记录访问域名。
- 交叉测试。分别验证代理站点、直连站点、内网域名和 IPv6 场景。只测试一个网页,容易遗漏直连解析循环或 AAAA 查询绕行。
常见问题与回退步骤
开启后所有网页都打不开,先改哪里?
先恢复原 DNS 模式并重启测试应用,确认基本连接恢复。随后检查发往虚拟地址段的连接是否进入正确入站,以及该入站是否启用了映射还原。不要先更换订阅或传输协议。
网页能打开,内网域名却解析失败怎么办?
为内部域名设置走局域网 DNS 的真实解析例外,并保留相应直连路由。内部解析器常依赖当前网络环境,不能把内部域名统一交给外部解析器后期待得到相同结果。
为什么只有部分应用没有虚拟地址?
检查这些应用是否使用自带加密 DNS、已有缓存或直接连接固定 IP。先选择一个走系统 DNS 的测试应用复现完整链路,再逐个处理应用差异;直接使用 IP 的连接本来就没有 DNS 映射可还原。
v2rayNG 和 v2flyNG 能照抄桌面配置吗?
不能直接照抄。v2rayNG 使用 Xray 内核,v2flyNG 使用 v2fly 内核,安卓 VPN 接管与桌面 TUN 的配置入口也不同。应核对应用是否暴露相关功能、当前内核是否支持对应字段,并使用应用实际生成的配置检查结果。
回退时按“恢复 DNS 设置、恢复原路由、重启接管服务、清理应用缓存”的顺序操作。保留一份可正常使用的基线配置,比同时调整 FakeDNS、IPv6、嗅探和路由策略更容易定位问题。重新启用时每次只改变一个环节,才能分清故障来自查询绕行、映射失效还是出站规则。