深入剖析 Clash / Mihomo Fake-IP 与 TUN 模式:从 DNS 泄露根治到全链路数据流实战

现象切入:一个令无数开发者困惑的排网谜团

在配置好本地 Clash Verge Rev / Mihomo 并开启内核 TUN 模式后,在终端执行以下网络诊断命令:

1
2
3
4
5
6
7
8
9
# 查询自定义域名解析
nslookup 870306666.xyz
# 返回结果:
# Address: 198.18.1.144

# 尝试直接向公网阿里 DNS 查询
nslookup 870306666.xyz 223.5.5.5
# 返回结果:
# DNS request timed out / Server failed

然而在浏览器中输入该网址,却能瞬间顺畅秒级渲染!
为什么 nslookup 拿到的是一个奇特的 198.18.x.x 地址?为什么指定阿里 DNS 223.5.5.5 依然查不出来?真实的 IP(182.136.15.18)到底在什么时候由谁去查询的?DNS 泄露又是如何被根除的?

本文将通过动态流转沙盒与原生 GUI 全景联动控制台,带你从 Windows 内核、TUN 网卡驱动、Clash 虚拟内存池到境外 VPS 出口,彻底拆解这套现代网络核心架构。


🚀 交互式数据流沙盒 (支持「海外代理」与「国内直连」双场景模拟)

操作提示:点击下方「🌍 海外模式」或「🇨🇳 国内模式」按钮切换场景,再点击「开始模拟」,即可动态见证 Fake-IP 在境外代理(本机 0 DNS 查询,海外 VPS 代查)与境内直连(延迟真实解析,握手时查国内 DoH)之间的本质分水岭:

⚡ 端到端数据流转动态仿真 (双路由沙盒)
直观对比:海外代理 与 国内直连 在 Fake-IP 模式下的关键分水岭
测试域名: 分流策略: 走海外代理策略组
1
应用发起解析
getaddrinfo 发起 DNS
2
Clash 分配假 IP
0ms 秒回 198.18.1.144
3
TUN 内核劫持
向假 IP 建立 TCP 握手
4
核心逆向查表
假 IP 还原原始域名
5
海外 VPS 远端代查
域名进加密隧道出海
[READY] 系统仿真器就绪,当前为【海外模式】。点击右上角「开始模拟」或切换模式。

一、为什么会有 Fake-IP?(解决什么根本痛点)

在早期传统的代理客户端中,普遍采用的是 Redir-Host 模式:

  1. 致命的握手时延:浏览器想要访问 google.com,本地必须先通过公网发起一次真正的 DNS 解析。即便通过代理查远端 DNS,也必须先承担一个完整的跨国 RTT(200~400ms)才能拿到真实 IP 开始建立连接。
  2. 严重的 DNS 泄露与污染:如果向本地运营商发起解析,访问的目标网站明文瞬间在本地宽带被记录,并极易遭遇投毒阻断。
  3. 域名丢失:当应用程序拿到真实 IP 发出网络包后,网卡上只有四层目标 IP,原始域名丢失,代理软件只能吃力地依赖反向域名嗅探(Sniffing)。

Fake-IP 的颠覆性设计哲学:【假 IP 换真时效,延迟真实解析】

  • Clash 在本机直接充当首选 DNS 服务器。
  • 任何应用来查 DNS 时,Clash 根本不向公网发出任何查询包,而是直接从保留网段 198.18.0.0/16 抓取一个未占用的假 IP(如 198.18.1.144),并在本地内存构建映射字典:
    $$\text{198.18.1.144} \longleftrightarrow \text{870306666.xyz}$$
  • 这一过程完全发生在本地内存中,耗时通常小于 0.5 毫秒!

二、端到端完整链路生命周期(TUN 模式实战)

图表渲染说明:本节包含交互式动态时序图与 10 大核心流转阶段深度拆解。

📊 TUN + Fake-IP 全链路时序流转图
Mermaid 矢量实时渲染
sequenceDiagram autonumber actor User as 用户程序 (如 Chrome) participant Kernel as Windows 内核网络栈 / TUN 虚拟网卡 participant ClashDNS as Clash 内置 Fake-IP DNS 引擎 participant ClashCore as Clash 核心分流路由引擎 participant Remote as 目标服务器 / 远端 VPS 代理节点 User->>Kernel: 1. 解析 870306666.xyz Kernel->>ClashDNS: 2. 劫持 DNS 查询 (UDP 53) Note over ClashDNS: 本地内存池分配假 IP
198.18.1.144 映射 870306666.xyz ClashDNS-->>User: 3. 0ms 秒级返回 198.18.1.144 User->>Kernel: 4. 向 198.18.1.144:443 发起 TCP SYN Kernel->>ClashCore: 5. TUN 驱动在内核级抓取该数据包送入 Clash Note over ClashCore: 核心逆向查表还原!
198.18.1.144 => 870306666.xyz alt 规则判定走代理 (海外节点) ClashCore->>Remote: 6a. 将原始域名直接打包进加密隧道发给海外 VPS Remote->>Remote: 7a. 由海外 VPS 在当地出口发起真实无污染解析 else 规则判定走直连 (DIRECT) ClashCore->>ClashCore: 6b. Clash 在握手瞬间调用国内 DoH 查询真实 IP (182.136.15.18) ClashCore->>Remote: 7b. 本机物理网卡与真实 IP 直连握手 end Remote-->>ClashCore: 8. 数据双向回传 ClashCore-->>Kernel: 9. 伪装回 198.18.1.144 的响应报文 Kernel-->>User: 10. 用户程序无缝收到网页内容

📌 链路 10 大核心阶段技术解剖表

阶段序号 发生位置 执行动作 关键技术机制 耗时/网络开销
① 发起解析 用户层 (浏览器) 调用系统 getaddrinfo 解析域名 浏览器按标准 Socket 逻辑查询本机配置的首选 DNS 极微
② 内核劫持 Windows 内核 TUN 网卡驱动拦截系统发往 53 端口的 UDP 包 流量强制送入 Clash 内置 DNS 监听端口 (如 :1053) < 0.1ms
③ 分配假 IP Clash 内存表 发现不在黑名单中,秒级应答 198.18.1.144 不发任何公网 DNS 包,在内存建立键值对 198.18.1.144 ↔ 870306666.xyz 0ms (内存)
④ 应用连接 操作系统网络栈 应用程序信任假 IP,向 198.18.1.144:443 发送 TCP SYN 假 IP 充当会话句柄(Token),应用以为连接正在建立 0ms
⑤ TUN 捕获 TUN 驱动 / Wintun 捕获所有 198.18.0.0/16 三层数据包并注入 Clash 核心 绕过 Windows 本地代理设置,捕获全局所有进程的流量 < 0.2ms
⑥ 核心查表 Clash 路由引擎 提取目标 IP 198.18.1.144,反查内存表还原为原始域名 彻底解决真实四层流量域名丢失问题,恢复出原始字符串 0ms (哈希反查)
⑦a 代理出海 海外 VPS 出口 原始域名打包进 Shadowsocks / Trojan / Hysteria2 密文包 由远端海外 VPS 在境外执行真实无污染 DNS 解析并建立连接 1 RTT (跨国)
⑦b 直连握手 本地物理网卡 若命中 geosite:cn 直连,握手瞬间查国内 DoH 获得国内真实 IP 182.136.15.18,物理网卡直连国内服务器 1 RTT (国内)
⑧-⑩ 双向回传 Clash 核心回传 远端服务器响应数据包经 Clash 核心解密后,伪装回传给应用 应用程序完全无感知,顺畅接收到真正的网页与数据 极速秒开

三、为什么 nslookup 会报错?

  1. TUN 驱动的全局劫持:开启 TUN 模式后,虚拟网卡抓取全机 0.0.0.0/0 的全部出站数据包。即使你显式指定 nslookup 870306666.xyz 223.5.5.5,该数据包也根本飞不出物理网卡,而是被 TUN 驱动塞进了 Clash。
  2. 标准应用 vs 专用诊断工具:
    • 浏览器、curl、微信等调用的是标准系统 Socket API(getaddrinfo),拿到假 IP 后顺畅通过 TUN 与 Clash 完成还原;
    • nslookup 属于底层网络诊断工具,它跳过系统 API 自己构造原生 Raw DNS 报文,对报文头部的权威应答标志(AA/RA Flags)有极其严苛的校验,遇到拦截代理环境容易因格式差异抛出 Server failed。

四、Fake-IP 是如何彻底根治 DNS 泄露的?

很多用户常问:“我的本地宽带运营商能不能知道我访问了哪些境外网站?”
在 Fake-IP 模式下,DNS 泄露在物理逻辑上被彻底扼杀:

  1. 本地发包量为 0:在访问境外域名时,本地电脑根本没有向外界发送任何 DNS 数据包,运营商抓包结果为 0。
  2. 代理协议远端代查 (Remote DNS):流量送入 Shadowsocks / Trojan / Hysteria2 / TUIC 时,Clash 打包的是原始域名字符串(DOMAINNAME)。整个数据包通过 TLS 高强度加密飞向海外 VPS,由海外服务器在境外出口完成真实解析。
  3. 4 大防泄露黄金配置:
    • no-resolve 参数:在 IP 规则上加上 GEOIP,LAN,DIRECT,no-resolve,避免规则匹配时在本地提前触发真实解析;
    • **ipv6: false**:坚决关闭 IPv6 解析,彻底堵死国内宽带运营商通过 IPv6 旁路窃取明文 DNS 的后门;
    • nameserver-policy + DoH:国内直连域名走加密的 https://dns.alidns.com/dns-query,全程运行在 HTTPS 443 密文中,旁路无法窥探;
    • 兜底规则走代理:配置末尾保持 MATCH,🌍选择代理节点,未命中域名的流量统一加密出海。

五、终极解惑:真实 DNS 究竟在什么时候、由谁去查?

访问目标类型 命中分流规则 真正查询 DNS 的时刻 由谁执行真正的查询? 本地运营商能否抓到明文?
境外 / 代理域名 代理策略组 远端 VPS 收到代理包的瞬间 海外 VPS 节点(本机完全不查) 完全无法探知(0 本地 DNS 流量)
境内 / 直连域名 DIRECT 浏览器发起 TCP 握手的瞬间 本地 Clash 内核 仅看到向阿里/腾讯 DoH 的 443 密文
带 no-resolve 的规则 GEOIP,LAN,DIRECT,no-resolve 不触发解析,直接按 IP 匹配 不查询 无

🖼️ Clash Verge Rev 原生界面 (GUI) 与 底层 YAML 实时等高联动对比

操作提示:左侧为 1:1 复刻的 Clash Verge Rev 原生长控制台,右侧为底层 YAML 代码。点击左侧长面板中的任意一个开关或输入框,右侧 YAML 代码将自动平滑滚动并高亮相应的配置字段,并浮现深度技术避坑指南:

DNS 覆写
ℹ️ DNS 覆写开关按订阅独立保存,仅对对应订阅生效。

如果你不清楚这里的设置请不要修改,并保持 DNS 覆写关闭

DNS 设置
启用 DNS
DNS 监听地址
增强模式
fake-ip▼
Fake IP 范围
Fake IP 范围 (IPv6)
Fake IP 过滤模式
blacklist▼
IPv6
启用 IPv6 DNS 解析
优先使用 HTTP/3
DNS DOH 使用 HTTP/3 协议
遵循路由规则
DNS 连接遵循路由规则
使用 Hosts
启用通过 hosts 文件解析域名
使用系统 Hosts
启用通过系统 hosts 文件解析域名
直连域名服务器遵循策略
是否遵循 nameserver-policy 设置
默认域名服务器 (解析 DNS 服务器自身默认 DNS)
域名服务器 (兜底 DNS 列表,用逗号分隔)
回退服务器 (回退 DNS 服务器列表,用逗号分隔)
代理节点DNS (仅用于解析代理节点的域名,用逗号分隔)
直连域名服务器 (直连出口域名解析,支持 system)
Fake IP 过滤 (跳过 Fake IP 解析的域名)
域名服务器策略 (特定域名的 DNS 服务器,格式: domain=server1;server2)
回退过滤设置
GeoIP 过滤
启用 GeoIP 回退过滤
GeoIP 国家代码
回退 IP CIDR (不使用回退服务器的 IP CIDR)
回退域名 (使用回退服务器的域名)
Hosts 设置
Hosts (自定义域名到 IP 或域名的映射)
💡 当前聚焦:enhanced-mode: "fake-ip"
DNS 核心模式。开启后本地不再向公网发送查询包,0ms 响应 198.18.x.x 假 IP,推迟真实查询,消灭 DNS 泄露并提速。
dns:
  # 1. 启用 DNS 模块
  enable: true

  # 2. DNS 监听端口 (推荐 0.0.0.0:1053)
  listen: ':53'

  # 3. 增强模式 (fake-ip 核心)
  enhanced-mode: 'fake-ip'

  # 4. Fake IP 假 IP 池网段 (RFC 2544)
  fake-ip-range: '198.18.0.1/16'

  # 5. IPv6 假 IP 范围
  fake-ip-range6: 'fdfe:dcba:9876::1/64'

  # 6. Fake IP 过滤模式
  fake-ip-filter-mode: 'blacklist'

  # 7. IPv6 解析 (防泄露,坚决关闭)
  ipv6: false

  # 8. 优先使用 HTTP/3 (建议关闭防 UDP 干扰)
  prefer-h3: false

  # 9. 遵循分流路由规则
  respect-rules: true

  # 10. 使用 Hosts
  use-hosts: true

  # 11. 忽略系统 hosts (防系统旧映射污染)
  use-system-hosts: false

  # 12. 直连域名服务器遵循策略
  direct-nameserver-follow-policy: false

  # 13. 默认域名服务器 (解析 DoH 域名自身)
  default-nameserver:
    - '223.5.5.5'
    - '119.29.29.29'

  # 14. 域名服务器 (兜底通用 DNS)
  nameserver:
    - 'https://dns.google/dns-query'
    - 'https://1.1.1.1/dns-query'

  # 15. 代理节点专用解析 DNS (拉取节点核心保障)
  proxy-server-nameserver:
    - '223.5.5.5'
    - '119.29.29.29'
    - 'https://dns.alidns.com/dns-query'
    - 'https://doh.pub/dns-query'

  # 16. 直连专用域名服务器
  direct-nameserver: []

  # 17. 回退服务器
  fallback: []

  # 18. Fake IP 过滤白名单 (直连解析真实 IP)
  fake-ip-filter:
    - '*.lan'
    - '*.local'
    - '*.arpa'
    - 'time.*.com'
    - 'ntp.*.com'
    - '+.market.xiaomi.com'
    - 'localhost.ptlogin2.qq.com'
    - '*.msftncsi.com'
    - 'www.msftconnecttest.com'

  # 19. 域名服务器策略 (DoH 内外智能分流)
  nameserver-policy:
    geosite:private,cn:
      - 'https://dns.alidns.com/dns-query'
      - 'https://doh.pub/dns-query'
    geosite:geolocation-!cn:
      - 'https://dns.google/dns-query'
      - 'https://1.1.1.1/dns-query'

  # 20. GeoIP 与回退过滤设置
  fallback-filter:
    geoip: true
    geoip-code: 'CN'
    ipcidr:
      - '240.0.0.0/4'
      - '0.0.0.0/32'
    domain:
      - '+.google.com'
      - '+.facebook.com'
      - '+.youtube.com'

# 24. 自定义 Hosts 静态映射表
hosts: {}

六、24 项核心参数深度对照速查表

板块 界面控件名称 (来自图片) 客户端长图状态 生产配置文件对应行 状态评估与架构建议
基础设置 启用 DNS 🔵 开启 enable: true (L29) 完全一致
基础设置 DNS 监听地址 :53 listen: "0.0.0.0:1053" (L30) 推荐保持 1053(避开 53 端口冲突)
基础设置 增强模式 fake-ip enhanced-mode: "fake-ip" (L36) 完全一致
基础设置 Fake IP 范围 198.18.0.1/16 fake-ip-range: "198.18.0.1/16" (L37) 完全一致
基础设置 Fake IP 范围 (IPv6) fdfe:dcba:.../64 未配置 (缺省) 因关闭 IPv6 不生效,无需配置
基础设置 Fake IP 过滤模式 blacklist 未显式配置 (内核默认 blacklist) 实际等效
基础设置 IPv6 解析开关 ⚪ 关闭 ipv6: false (L31) 坚决保持关闭(防泄露关键)
基础设置 优先使用 HTTP/3 ⚪ 关闭 prefer-h3: false (L32) 完全一致(防 UDP 443 丢包)
基础设置 遵循路由规则 🔵 开启 respect-rules: true (L33) 完全一致
基础设置 使用 Hosts 🔵 开启 未显式配置 (默认 true) 完全一致
基础设置 使用系统 Hosts ⚪ 关闭 use-system-hosts: false (L34) 完全一致(防系统旧 hosts 污染)
域名分流 Fake IP 过滤 常规列表 fake-ip-filter: [...] (L38-L50) 生产配置更优(防 Windows 感叹号)
域名分流 域名服务器策略 内外 DoH 分流 nameserver-policy: ... (L62-L68) 完全一致
域名分流 直连遵循策略 ⚪ 关闭 未配置 (默认 false) 无需配置
域名分流 默认域名服务器 223.5.5.5, 119.29.29.29 default-nameserver: [...] (L51-L53) 完全一致
域名分流 域名服务器 Google / CF DoH nameserver: [...] (L54-L56) 完全一致
回退与代理 GeoIP 过滤 🔵 开启 未配置 (Fake-IP 下不依赖) 由 GEOSITE 精准分流代替
回退与代理 GeoIP 国家代码 CN 未配置 由 GEOSITE 分流代替
回退与代理 回退 IP CIDR 240.0.0.0/4 等 未配置 由 GEOSITE 分流代替
回退与代理 回退域名 Google, FB 等 未配置 由规则库直接命中,更精确
回退与代理 回退服务器 (留空) 未配置 均保持留空
回退与代理 代理节点 DNS 223.5.5.5, 阿里/腾讯 DoH proxy-server-nameserver: [...] (L57) 完全一致(拉取节点核心保障)
回退与代理 直连域名服务器 (留空) 未配置 均保持留空
Hosts Hosts 映射 示例占位符 hosts: {} 完全一致(日常留空)

七、总结与最佳实践

  1. 认准真假 IP:在开启 Fake-IP 后,nslookup 查到 198.18.x.x 是完全符合协议设计的正常行为,不需要惊慌。
  2. **切勿在 Windows 强行监听 :53**:在 TUN 模式下,将监听端口改为 1053,依靠 TUN 驱动从内核层转发,是兼顾稳定性与权限的最优实践。
  3. 保持 DNS 覆写关闭:如客户端长图顶部提示所言,直接以维护良好的订阅 YAML 文件为准运行,既能保证节点订阅动态更新,又不会产生未知的配置覆盖冲突。