mihomo / Clash 规则进阶:fake-ip + DNS 分流 + no-resolve

目录

mihomo / Clash 配置里最容易让人头大的就是 DNS 这块——fake-ip 是什么?nameserver-policy 怎么写?no-resolve 加不加?看似都对实际却 DNS 泄漏 / 国内访问变慢。

这篇用“老板和秘书”的类比把这三个概念讲透,配出一份零泄漏 + 国内国外分流准确的配置。

一、DNS 泄漏是什么

当你的网页流量走了代理,但 DNS 查询请求却走了本地未加密网络——你的 ISP 仍然能看到你访问了哪些域名,甚至会返回错误 IP(DNS 污染)。

流程图流程图

代理通了不等于安全。DNS 这条副本通道才是真正的隐私问题。

二、Fake-IP:核心比喻

把 Clash 当秘书,浏览器当老板。老板要打电话给“谷歌先生”:

没有 Fake-IP(Real-IP / Redir-Host 模式)

  1. 老板:「秘书,查一下谷歌先生的电话。」
  2. 秘书:「您先挂断等着,我去翻电话簿。」
  3. 秘书翻 DNS(可能 50-200ms)。
  4. 秘书:「号码是 142.250.x.x。」
  5. 老板拨号 → 连接代理。

缺点:老板必须等秘书查完才能拨,白屏时间长。

开启 Fake-IP 模式

  1. 老板:「秘书,查一下谷歌先生的电话。」
  2. 秘书:直接编一个假号码 198.18.0.1:「号码是 198.18.0.1,快打!」
  3. 老板秒拨。
  4. 秘书拦截这个拨向假 IP 的电话,心里记得“这是谷歌”。
  5. 秘书直接告诉国外的代理节点:「帮我接通谷歌,号码你自己解析。」
  6. 国外节点解析 + 连接谷歌。

优点:

  • DNS 查询零延迟(直接给假 IP)
  • 真实 DNS 在国外节点解析(彻底无泄漏)
  • 浏览器拿到假 IP 时本地完全不查 DNS

三、DNS 分流:处理国内站

但有些站不能给假 IP——比如百度。CDN 会根据你的 IP 给你最近的服务器,给假 IP 会让百度以为你在某个奇怪的地方,分配到慢的节点。

所以国内站要禁用 Fake-IP,走真实 IP。这就是 fake-ip-filter:

dns:
  fake-ip-filter:
    - "+.lan"
    - "+.local"
    - "geosite:private"
    - "geosite:connectivity-check"   # 微软/安卓的网络连通性检测
    - "geosite:cn"                   # 国内域名走真实 IP

但走真实 IP 又要解决「该用哪个 DNS 查」的问题——国内站走国内 DNS(不然被分配到海外 CDN),国外站走国外 DNS(不然被 GFW 污染)。这就是 nameserver-policy:

dns:
  nameserver-policy:
    "geosite:cn,private":
      - https://223.5.5.5/dns-query
      - https://doh.pub/dns-query
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query
      - https://dns.google/dns-query

整体流程:

流程图流程图

四、no-resolve:避免本地多余解析

即使开了 Fake-IP,规则匹配阶段 Clash 可能还会做一次本地 DNS 查询。

举例规则:

rules:
  - RULE-SET, youtube, PROXY
  - GEOIP, CN, DIRECT
  - MATCH, PROXY

当访问一个未知国外域名时:

没有 no-resolve

  1. Fake-IP 给假 IP,浏览器秒连。
  2. Clash 匹配规则:
  • RULE-SET, youtube → 没命中
  • GEOIP, CN → 这是 IP 规则,Clash 必须知道真 IP才能判断是否 CN
  1. Clash 在本地发起一次 DNS 查询(200ms)
  2. 拿到美国 IP → 不是 CN → 走 PROXY → 代理节点再解析一次

🪤 白白等了 200ms 本地解析。

加上 no-resolve

rules:
  - RULE-SET, youtube, PROXY
  - GEOIP, CN, DIRECT, no-resolve   # 👈
  - MATCH, PROXY
  1. Fake-IP 给假 IP。
  2. 匹配 GEOIP, CN:
  • 看到 no-resolve:「没真实 IP 就别查了,跳过这条」
  1. 没匹配 → 走 MATCH → 代理节点解析 + 连接

结论:本地解析消失了,所有解析推迟到节点。

no-resolve 加的位置

✅ 对 IP 类规则(GEOIP / IP-CIDR)才加 no-resolve,对域名类规则(DOMAIN-SUFFIX 等)加了没意义。

规则类型 加 no-resolve?
DOMAIN-SUFFIX 不用
DOMAIN-KEYWORD 不用
RULE-SET(域名集合) 不用
GEOIP 要加
IP-CIDR 要加
IP-CIDR6 要加
GEOSITE 不用

五、DoH (DNS over HTTPS)

上面配置里 https://1.1.1.1/dns-query 是 DoH:

DNS 类型 端口 加密 速度
普通 DNS 53 / UDP 否 快但明文
DoT (DNS over TLS) 853 / TCP 是 慢一点
DoH (DNS over HTTPS) 443 / TCP 是 中等
DoQ (DNS over QUIC) 853 / UDP 是 快(HTTP/3)

DoH 优势:

  • ✅ 隐私:DNS 查询加密
  • ✅ 防污染:GFW 看不到也改不了
  • ✅ 全球可用:Cloudflare / Google 都有 anycast 节点

💡 国内 DoH 也要用,纯 UDP 的 223.5.5.5:53 仍可能被中间人投毒。用 https://223.5.5.5/dns-query 即可。

六、推荐的完整 DNS 配置

dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:1053
  prefer-h3: false
  respect-rules: true              # 让 DNS 解析参考分流规则
  cache-algorithm: arc
  cache-size: 2048
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16

  # Fake-IP 过滤:返回真实 IP 的域名
  fake-ip-filter:
    - "+.lan"
    - "+.local"
    - "geosite:private"
    - "geosite:connectivity-check"
    - "geosite:cn"

  # 用于解析 DoH 域名自身(先有 IP 才能访问 DoH)
  default-nameserver:
    - 223.5.5.5
    - 119.29.29.29
    - 1.1.1.1
    - 8.8.8.8

  # 代理节点的 DNS(必须国外,防止节点域名被污染连不上)
  proxy-server-nameserver:
    - https://1.1.1.1/dns-query
    - https://dns.google/dns-query

  # 默认 nameserver(视为国外/未知流量,走国外加密 DNS)
  nameserver:
    - https://1.1.1.1/dns-query
    - https://dns.google/dns-query

  # 备用 fallback
  fallback:
    - https://1.1.1.1/dns-query
    - https://8.8.8.8/dns-query

  # 分流策略(灵魂)
  nameserver-policy:
    "geosite:cn,private":
      - https://223.5.5.5/dns-query
      - https://doh.pub/dns-query
    "geosite:geolocation-!cn":
      - https://1.1.1.1/dns-query
      - https://dns.google/dns-query

配合规则的写法:

rules:
  # 域名规则(不需要 no-resolve)
  - DOMAIN-SUFFIX,google.com,PROXY
  - GEOSITE,youtube,PROXY
  - GEOSITE,cn,DIRECT

  # IP 规则(必须加 no-resolve)
  - GEOIP,CN,DIRECT,no-resolve
  - GEOIP,private,DIRECT,no-resolve

  - MATCH,PROXY

七、几个常见配置选项的含义

选项 作用
enable 启用内置 DNS
listen 监听端口(系统 DNS 指向这里能用)
enhanced-mode fake-ip / redir-host 二选一,推荐 fake-ip
fake-ip-range 假 IP 段,默认 198.18.0.1/16 别动
respect-rules DNS 解析时是否走代理规则(推荐 true)
default-nameserver 引导 DNS:解析 DoH 域名本身用
nameserver 主 DNS:默认走它
proxy-server-nameserver 解析代理节点用的 DNS(强烈建议国外)
fallback 主 DNS 全部失败时的备用
nameserver-policy 按域名匹配走不同 DNS(灵魂)
fake-ip-filter 哪些域名不要假 IP(走真实解析)

八、验证 DNS 没泄漏

跑代理 + 配完上面这套之后,用这几个站验证:

https://dnsleaktest.com
https://browserleaks.com/dns
https://ipleak.net

正确的结果应该是:

  • DNS 服务器全部显示国外(Cloudflare / Google)
  • IP 显示节点 IP
  • 没有任何国内 ISP 的 DNS 出现

九、常见误配

9.1 写了 nameserver-policy 但没生效

可能是规则匹配触发了 IP 类规则解析(没 no-resolve)。补 no-resolve。

9.2 国内站打开很慢

fake-ip-filter 漏了 geosite:cn。

9.3 节点显示离线 / 测速不通

proxy-server-nameserver 没设国外 DoH。节点域名被国内 DNS 污染。

9.4 微信 / QQ 不能用

fake-ip-filter 漏了 geosite:connectivity-check,或者腾讯系域名误走代理。

9.5 fake-ip-range 改成别的段

不要改!默认 198.18.0.1/16 是 RFC 保留段,改成别的可能撞真实公网 IP。

十、几条实用经验

  • fake-ip-filter 必加 geosite:cn + geosite:connectivity-check + geosite:private——少一个国内站都不顺。
  • proxy-server-nameserver 必用国外 DoH,不然节点域名被污染你就以为机场跑路了。
  • 所有 IP 规则(GEOIP / IP-CIDR)都加 no-resolve——零本地解析。
  • 国内 DoH 也要用(https://223.5.5.5/dns-query),纯 UDP 仍可能被投毒。
  • respect-rules: true 让 DNS 解析也走代理规则,国内 DNS 不再因为走代理而被污染。
  • prefer-h3: false:除非你确认网络稳定,HTTP/3 偶尔会出怪问题。

配通这套之后,DNS 这块就基本一劳永逸了——无泄漏、无污染、国内国外分流准确,从此再不用想这块。