Fake-IP是什么意思?
一句话结论
内核对域名查询立刻返回的一个虚拟地址,真实解析推迟到出口端进行。
程序拿到的是内核临时分配的地址,内核再按记录还原出域名交给节点。它省去了本地等待上游解析的一步,代价是个别需要真实地址的程序会表现异常,常见于 TUN 场景。
Fake-IP 是 Clash 系内核 DNS 模块的一种工作方式。程序问“这个域名是多少”,内核不去问上游,而是从一段预留地址里随手发一个,并记下“这个地址对应这个域名”。程序随后连向这个地址,内核再翻记录,把请求交给节点去访问真正的域名。
它解决什么问题
走代理的域名,真实地址其实用不着在本机知道,节点那一端会自己解析。Fake-IP 利用了这一点:本机不必等待解析结果,也就不会因为本地解析器给出错误答案而被带偏。
在哪里会看到它
- 在命令行里查询域名,得到一个以 198.18 开头的地址,这是 Mihomo 默认的虚拟地址段,具体以所用内核文档为准。
- 配置的 dns 段里出现 enhanced-mode 一项,取值写成 fake-ip。
- 同一段里的 fake-ip-filter,用来列出“不要发虚拟地址”的域名。
常见误解
| 说法 | 实际情况 |
|---|---|
| 这个地址就是网站的 IP | 它只在你的电脑与内核之间有意义,拿去封禁或记录没有价值 |
| 开了它所有程序都正常 | 局域网设备发现、时间同步、联机类程序可能需要真实地址 |
| 它能挡住所有 DNS 泄露 | 只覆盖被内核接管的查询,直连域名仍会在本机解析 |
遇到异常程序,思路是把相关域名加入过滤列表,让它们拿到真实地址,一次只加一类。完整写法见 Clash DNS 设置详解,与它相对的另一种做法见 redir-host。
怎么判断它在不在起作用
查一个走代理的域名,看到的是上面那段虚拟地址,说明内核已经接管了这次查询。如果只用系统代理,命令行工具走的是系统自己的解析,看不到虚拟地址并不奇怪。想确认查询有没有绕开内核,去 DNS 泄露 条目里看检查思路。国内网站变慢时,也可以先排除这里,参见 开了梯子后国内网站变慢。