Fake-IP 与 redir-host 对比
拆解 Fake-IP 分配虚拟地址的过程,对比它与 redir-host 在解析速度、兼容性上的差异,并说明 fake-ip-filter 的常见用法。
先区分 DNS 模式与流量接管
dns.enhanced-mode 决定 Clash 内置 DNS 如何回答域名查询。fake-ip 返回用于映射的虚拟地址,redir-host 返回上游解析得到的真实地址。它们不是规则模式、全局模式的替代项,也不决定某个连接最终走哪个代理节点。
另一层是流量接管。系统代理通常只影响遵循代理设置的程序;TUN 通过虚拟网卡和路由接管更多 IP 流量。DNS 查询是否进入内核、应用连接是否回到内核,需要分别检查。仅把配置里的模式改成 Fake-IP,并不能让所有程序自动经过代理。
- 希望保留域名信息进行分流,且 DNS 与连接均由内核接管:优先测试 Fake-IP。
- 应用必须取得真实 IP,或涉及局域网设备发现:先做定向过滤,再评估 redir-host。
- 遇到超时:先定位 DNS、路由还是出站连接,不要同时改模式、节点和规则。
Fake-IP 虚拟地址如何工作
Fake-IP 的关键是“域名与虚拟地址映射”,不是把网站地址永久改写。常见地址池为 198.18.0.1/16,位于保留的基准测试地址范围内,不是网站实际部署的公网地址。这个地址必须由代理内核解释,不能当作普通目标直接发往互联网。
- 应用请求解析某个域名,查询进入 Clash 内置 DNS。
- 内核从地址池分配或复用一个虚拟地址,并保存域名映射。对符合条件的 A 查询,通常不必等待目标域名的真实 A 记录返回。
- 应用向该虚拟地址建立连接;TUN 等接管链路把连接交回内核。
- 内核依据映射恢复域名,执行规则匹配,再交给对应出站。直连通常仍需解析真实目标;代理出站是否在远端解析,取决于协议和出站实现。
为什么有时首连更快
传统路径常在建立连接前等待真实 DNS 结果。Fake-IP 可以缩短这一段等待,并使基于域名的规则更容易获得域名信息。但这不等于所有请求都更快:代理握手、TLS、远端解析和目标服务器响应仍然存在,IP 规则匹配也可能触发真实解析。
看到 198.18.x.x 的解析结果不代表网站故障,也不是实际出口 IP。直接对这个地址执行 ping,结果不能用于判断节点延迟。应使用真实业务连接,并结合内核连接面板检查规则、策略和错误信息。
redir-host 的解析路径与边界
在 redir-host 下,内置 DNS 向配置的上游解析器查询,并把真实地址交给应用。内核可记录解析产生的域名与 IP 关系,在后续流量中辅助恢复域名。但多个域名可能共享同一地址,应用也可能绕过内置 DNS,所以这种关联并不总能唯一、完整地还原原始域名。
真实地址对部分应用更友好,例如软件需要比较解析地址、直接把 IP 交给其他进程,或者设备要求访问某个局域网地址。不过,返回真实 IP 并不能保证一定直连;若流量已由 TUN 接管,仍会按规则选择出站。
| 对比项 | Fake-IP | redir-host |
|---|---|---|
| 常见 A 查询结果 | 地址池中的虚拟 IPv4 地址 | 上游返回的真实 IPv4 地址 |
| 建立连接前的解析 | 可先返回映射地址,真实解析可能后移 | 通常先等待真实解析或命中缓存 |
| 域名信息来源 | 虚拟地址与域名的映射 | DNS 关联、协议提供的域名等 |
| 常见兼容性问题 | 虚拟地址绕过接管、应用拒绝保留地址 | 共享 IP 关联不明确、解析线路与出口不匹配 |
| 更适合的起点 | DNS 与连接接管完整的日常规则分流 | 明确要求真实解析结果的应用环境 |
两种模式都不是防泄漏开关。应用自带的 DoH、未接管的 IPv6 流量和直接访问外部 DNS 的程序,都要单独排查。一次网页 DNS 检测显示了某个解析器,也不足以证明所有程序的查询路径相同。
Fake-IP 基础配置与接入条件
下面只展示需要合并到现有配置的 dns 段,不包含节点与代理组。保留现有订阅的其他部分;若客户端支持覆写或合并配置,应在其持久化入口修改,避免下一次订阅更新覆盖设置。
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
default-nameserver:
- 223.5.5.5
nameserver:
- https://dns.alidns.com/dns-query
fake-ip-filter:
- "localhost"
- "*.lan"
- "*.local"
listen的1053是本文示例监听端口,不是 HTTP 或 SOCKS 代理端口。只监听回环地址,不向局域网提供 DNS 服务。default-nameserver用于解析 DNS 服务器自身的域名等引导场景。这里的普通 DNS 引导查询不具备 DoH 的加密属性。nameserver是常规上游解析入口。使用 HTTPS 地址不代表全部 DNS 流量自动通过代理,实际路径仍需检查。- 操作系统的普通 DNS 设置通常不能直接指定
1053端口。生产接入需要客户端的 DNS 接管、TUN DNS 劫持,或本地转发器配合,不能只填写127.0.0.1就认为完成接入。
如果要对照测试 redir-host,可暂时把 enhanced-mode 改为 redir-host,其余变量保持不变。Fake-IP 地址池和过滤列表不再承担分配虚拟地址的作用。先备份,再重载配置;若客户端管理 DNS,应检查生成后的运行配置确实发生了变化。
fake-ip-filter 的定向例外
在常见的默认黑名单语义下,fake-ip-filter 表示“这些域名不分配 Fake-IP,返回真实解析结果”,不是“这些域名不走代理”。是否直连仍由 rules 决定。支持过滤模式切换的 mihomo 版本还可能使用其他语义,复制列表前应确认没有额外设置白名单模式。
先列具体域名,再扩大范围
假设家庭 NAS 的域名是 nas.home.arpa,应用在收到虚拟地址后拒绝连接,可以先加入精确条目。若同一区域的设备都有同样问题,再使用内核支持的域名通配语法扩大范围。在 mihomo 的常见匹配语义中,+.home.arpa 可覆盖根域及其子域;不要把它当作所有旧内核都支持的通用写法。
dns:
fake-ip-filter:
- "localhost"
- "nas.home.arpa"
- "+.home.arpa"
- "*.lan"
- "*.local"
这是局部修改示例,应合并到前一段已有的 dns 中,不能在 YAML 顶层再建立第二个同名 dns 键。精确条目与覆盖它的通配条目可以按需要二选一,长期配置应删除冗余项。
过滤不负责提供内网解析答案
把 NAS 域名放入过滤列表后,上游仍需要知道它的真实地址。公共 DNS 通常不了解家庭内部域名;这时应把对应域名交给路由器或内部 DNS,必要时使用 nameserver-policy 定向解析。只有过滤而没有正确上游,问题会从虚拟地址不兼容变成域名解析失败。
.local 常用于 mDNS,依赖局域网组播。加入 *.local 只能避免相关查询被分配虚拟地址,并不等于内核会代替系统完成 mDNS 发现。打印机、投屏设备仍可能需要保持组播发现链路和局域网路由可达。
检测解析结果与连接链路
排查分三步:确认运行配置,直接查询内置 DNS,再检查应用连接。不要只看配置编辑器中的文本,也不要只凭浏览器能否打开网页得出结论。
1. 直接查询 1053 端口
在安装了 dig 的环境中,运行下面两条命令。它们明确查询回环地址的 1053 端口,不会因为系统 DNS 设置不同而误测其他解析器。
dig @127.0.0.1 -p 1053 example.com A +short
dig @127.0.0.1 -p 1053 nas.home.arpa A +short
Fake-IP 下,未过滤域名通常应返回所配地址池中的地址;具体分配值不固定。NAS 域名只有在过滤命中且内网上游可用时,才应取得对应真实地址。查询超时先查监听状态和配置加载错误;返回真实公网地址则继续检查模式、过滤规则与客户端覆写。
2. 查看规则与出站
打开客户端连接面板,访问待测网站,查看目标域名、命中规则和使用的策略。若拿到虚拟地址却没有对应连接记录,重点检查流量是否绕过内核、是否存在路由冲突,以及应用是否在另一台未接管的设备上使用了该地址。
3. 清理旧状态后复测
切换模式后,应用可能继续使用旧缓存或已建立的连接。先退出目标应用,再清理系统 DNS 缓存并重开。Windows 可运行 ipconfig /flushdns;使用 systemd-resolved 的 Linux 可运行 resolvectl flush-caches。应用自带的 DNS 缓存未必随系统缓存一起清除。
若启用了 profile.store-fake-ip,部分内核会持久化映射。该选项有助于恢复既有映射,但不是所有超时问题的修复手段。调整地址池前,应按客户端支持的方式清理旧映射并重建连接,不要直接删除不明用途的配置文件。
按故障现象选择模式
- 普通网页与常用应用正常:保留现有模式。没有必要为了抽象的“更快”反复切换。
- 只有 NAS、打印机或内网域名异常:优先处理过滤、内网 DNS 和局域网路由,不急于切换整个环境。
- 应用明确拒绝虚拟 IP:先为它实际查询的域名添加例外;依赖域名很多且难以维护时,再测试 redir-host。
- 所有 Fake-IP 连接都超时:优先检查虚拟地址段的路由与接管。DNS 返回成功并不意味着连接已经进入 TUN。
- redir-host 下部分站点地址不合适:检查解析出口与代理出口是否匹配,按域名设置解析策略,而不是盲目增加上游数量。
最终判断标准是可重复的业务结果:同一设备、同一节点、同一域名,分别检查解析答案、规则命中和连接是否成功。Fake-IP 更侧重通过映射保留域名并调整解析时机,redir-host 更侧重向应用提供真实地址。模式选择应服从实际接管方式与应用要求,而不是把其中一种视为所有场景的固定答案。