1. 传统解析的性能瓶颈 vs Fake-IP 0ms 突破
对比两种模式下打开一个新网站的时延:
### 传统模式(Redir-Host):
1. 客户端向 DNS 发包查询;
2. 跨国链路往返 150ms 拿到海外真实 IP;
3. 操作系统向真实 IP 发起 TCP 握手(再消耗 150ms);
4. **总计耗时 300ms 以上** 才能开始传输数据。
### Fake-IP 模式:
1. 客户端发起查询;
2. 本地内核在 **0.001ms** 内直接返回虚拟私网 IP `198.18.0.88`;
3. 操作系统立即向该虚拟 IP 发包;
4. 内核接管数据包,直接把域名打包进代理报文发送出境;
5. **完全抹掉了整整一次远程 DNS 查询的往返等待时间!**
💡 网页首包呈现时间(TTFB)由此大幅缩短,直观感受就是页面点击秒开。
2. 内存 LRU 环形地址池淘汰回收机制
一个经典的工程质疑:虚拟地址池只有 65,534 个 IP,如果长久不关机或者遭遇网络爬虫高频访问,IP 池用完了怎么办?
### Mihomo 的智能保障:
- **LRU(最近最少使用)淘汰算法**:当地址池耗尽时,内核自动淘汰最早未被活跃访问的映射关系;
- **长连接锁死机制**:只要该虚拟 IP 对应的 TCP 连接仍在持续通信,该槽位绝对不被回收;
- **本地持久化**:退出软件时自动将映射关系持久化写入 `cache.db`,下次启动无需重建。
bash
# 查看本地 Fake-IP 映射状态与活跃槽位数量
curl -s -H "Authorization: Bearer 你的Secret" http://127.0.0.1:9090/dns | jq '.' 3. 为什么在本地 Ping 出来的都是 198.18.x.x?
这是初学者最常误报的“假 Bug”:
- 用户在 CMD 中执行 `ping google.com`,看到返回结果是 `来自 198.18.0.23 的回复`;
- 误以为自己的电脑中毒或网络坏了;
- **真相**:这正是 Fake-IP 正在完美发挥作用的最佳铁证!198.18.0.0/15 是 IETF RFC 2544 专门为网络基准测试保留的私有保留地址块,绝不会与公网 IP 发生冲突。
❓ 常见疑问与排查步骤
用 Fake-IP 模式会影响本地局域网设备互访吗?
不会。局域网私有网段(192.168.x.x / 10.x.x.x)由操作系统物理网卡直连,不会分配 Fake-IP。
为什么抓包工具看到的目标 IP 全是 198.18?
因为抓包工具捕获的是操作系统网络栈发出的原始报文,真实域名在进入 Clash 内核后才会被还原封装。
部分软件无法在 Fake-IP 下运行怎么排查?
在配置中的 `fake-ip-filter` 列表中将该软件的域名加入白名单,强制其走真实解析即可完美解决兼容性问题。