← [ BACK_TO_NOTES ]

Mihomo redir-host vs fake-ip

Mihomo/Clash 的 redir-host 模式先解析出真实 IP 再连接;fake-ip 模式先返回保留段虚拟地址,连接时再恢复域名交远端按域名路由,从而不必先用错误 A 记录定目标。

#synthesis #growing #network #dns

[!info] related notes

Mihomo redir-host vs fake-ip

一句话定义

Mihomo/Clash 有两条核心 DNS 处理思路:redir-host 先解析出真实 IP 再建连;fake-ip 先返回保留段虚拟地址,待应用连接该地址时再恢复原始域名、按域名规则选择出口并把域名交给远端解析。

核心机制 / 工作原理

redir-host(先拿真实 IP)

域名
  ↓ Mihomo DNS 解析
真实 IP(如 104.17.x.x)
  ↓ 路由和连接

若内部 DNS 返回了错误/不可用 IP,代理仍会连接这个地址——问题在解析阶段已定(见 proxy-and-dns-separation)。

fake-ip(先拿虚拟地址,后恢复域名)

anyrouter.top
  ↓ Mihomo 返回保留段虚拟地址 198.18.x.x
应用连接 198.18.x.x
  ↓ Mihomo 恢复原始域名
按域名规则选出口(如 Oracle1)
  ↓ 把域名交给远端代理节点解析

重要优势:不必先获得真实目标 IP,就能按域名完成代理路由,并把域名继续交给远端节点。

解析控制项

Mihomo 文档区分 fake-ip 与 redir-host,并提供:

  • nameserver-policy:为特定域名指定解析器
  • proxy-server-nameserver:代理服务器用的解析器
  • direct-nameserver:直连域名用的解析器
  • respect-rules:是否让 DNS 结果也受路由规则影响

最小例子 / 最小场景

dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.x.x/16
rules:
  - DOMAIN-SUFFIX,anyrouter.top,PROXY

配合高优先级域名规则,浏览器拿到 fake IP → Mihomo 恢复域名 → 按规则走 Oracle1 → 域名交远端解析,绕开本地错误 A 记录。

边界与易混淆点

  • fake-ip 不解「解析本身」,它解「解析决策位置」:把域名保留到连接时才定,从而让远端/规则参与(见 proxy-and-dns-separation)。
  • TUN 模式可劫持发往 53 的 DNS 请求送入 Mihomo 内部 DNS,避免程序绕过;但 DoH、Android Private DNS、硬编码 DoH 等仍能绕过(见 browser-secure-dns、dns-filtering-hijacking-pollution)。
  • strict-route 在 Windows 上可通过防火墙规则减少多网卡 DNS 泄漏。
  • nameserver-policy 让某域名走特定 DoH(可带 #PROXY 表示经某代理出口),但答案仍取决于该 DoH 递归从权威拿到的内容,不等同「直接用 Oracle 系统 DNS」(见 dns-bootstrap-problem)。
  • 验证:看 Mihomo 连接日志的目标 IP 是 104.17.x.x 还是 155.102.x.x,即可判断是否在连接前采用了本地 DNS 结果(见 dns-wrong-ip-tls-handshake-failure-debug)。

学习检查

不看正文回答:

  1. redir-host 与 fake-ip 的关键差异发生在什么时候获得真实目标 IP?
  2. 为什么 fake-ip 能把域名保留到路由决策之后?
  3. 本地 DNS 返回错误 A 记录时,两种模式受到的影响为什么不同?
  4. fake-ip 解决的是“DNS 是否正确”还是“解析决策放在哪里”?
  5. 给一个浏览器 + TUN + 远端代理的场景,画出 fake-ip 从虚拟地址恢复域名并选择出口的路径。
创建于 2026/7/31 更新于 2026/9/30
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本