合成地址用来保存域名与连接的关系
在相应 DNS 规则下,客户端为查询域名分配 Fake-IP,并记录地址与域名的对应关系。应用连接这个地址时,流量需要按配置回到客户端;客户端据映射恢复域名,再执行路由与出站处理。
这个地址不是网站服务器的真实 IP,不能直接拿去查地理位置或判断网站的机房。具体地址池由内核配置决定;一些示例使用 198.18.0.0/15 范围,它在 IANA 登记为网络设备基准测试用途,不是普通公网目标地址。
DNS 接管、Fake-IP 与 TUN 各负责什么
| 概念 | 主要作用 | 单独开启后的限制 |
|---|---|---|
| DNS 接管 | 把相应查询送到客户端的解析流程 | 仍要确认哪些应用、协议和端口被覆盖 |
| Fake-IP | 返回合成地址并保存域名映射 | 后续连接必须能回到持有映射的客户端 |
| TUN | 按系统路由接收相应 IP 流量 | DNS、排除路由及出站仍需配置 |
浏览器自己的 DoH、已有 DNS 缓存或应用内置解析,可能走另一条查询路径。是否被接管要看实际设置和记录,不能只因为界面显示 TUN 已开启,就认定所有查询都经过 Fake-IP。
先追一条域名,从查询追到出站
- 固定一个出现问题的域名,记录查询工具、解析器、记录类型与返回地址。
- 如果返回值在配置的 Fake-IP 地址池内,确认客户端在运行,并检查它是否持有对应映射。
- 用原应用重新发起请求,在客户端连接记录中查看恢复的域名、命中规则和最终出站。
- 如果没有连接记录,先看路由与接管范围;如果有记录但出站失败,再检查节点和目标连接。
客户端的 DNS 监听端口与 HTTP 或 SOCKS 代理入口不是同一个概念。查询工具不能把 HTTP 混合端口当成普通 DNS 服务器端口,除非配置明确提供了对应 DNS 服务。
内网域名需要真实解析时,精确添加例外
部分内网服务、需要直接使用 IP 的应用,或特定网络发现流程可能不适合当前 Fake-IP 方式。先确认具体域名和查询路径,再为它添加过滤;不要为解决一个域名,把所有域名都排除。
下面只是 mihomo 的 DNS 配置片段,需合并进已有配置,不能作为完整配置导入。示例明确使用 blacklist 模式,将一个保留示例域名排除出 Fake-IP;使用时替换成自己的目标。
dns:
enhanced-mode: fake-ip
fake-ip-filter-mode: blacklist
fake-ip-filter:
- "intranet.example.invalid"过滤模式会改变名单的含义:blacklist 中的匹配域名不使用 Fake-IP,whitelist 的含义相反。不同内核的字段也不同,不能把这个 YAML 片段直接粘到 sing-box JSON。
不使用 Fake-IP 并不等于请求一定直连。真实解析用哪个 DNS、连接命中什么分流规则,需要分别设置。修改后用同一个域名复测,确认答案和出站都符合预期。
停止客户端后还连着合成地址,先看缓存
应用可能仍保存着之前的合成地址,客户端却已经停止,或重启后映射发生变化。这时应用继续访问旧地址,连接就可能失败。是否保存映射、怎样恢复,要看内核的缓存配置。
先恢复客户端和正确接管路径,再重新查询并重试目标。需要退出客户端长期直连时,恢复原来的 DNS 与路由,并按问题范围刷新应用或系统缓存。只清一个相关缓存即可定位时,不必重置整个网络配置。
Fake-IP 不等于加密 DNS
Fake-IP 解决的是客户端对域名和连接的识别方式。DoH、DoT 或 DoQ 解决的是到解析器的查询传输;两者可以配合,但其中一个开启,并不会自动完成另一个。
检查 DNS 查询走向、规则与最终出站时,分别记录证据。仅凭返回合成 IP,不能证明没有外发解析,也不能证明所有应用都被接管。
常见问题
198.18 开头的答案一定表示网站出问题了吗?
不一定。先看客户端是否启用了相应 Fake-IP 地址池。若是合成地址,应检查映射和接管路径,而不是按真实网站地址排查。
加到 fake-ip-filter 之后会自动直连吗?
不会。这个过滤影响 DNS 是否返回合成地址,连接的最终去向仍受路由规则和出站选择控制。
参考资料
原理和协议定义可查以下标准与官方文档。文中的流程图由 AFQKit 绘制。