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 模式)#
- 老板:「秘书,查一下谷歌先生的电话。」
- 秘书:「您先挂断等着,我去翻电话簿。」
- 秘书翻 DNS(可能 50-200ms)。
- 秘书:「号码是 142.250.x.x。」
- 老板拨号 → 连接代理。
缺点:老板必须等秘书查完才能拨,白屏时间长。
开启 Fake-IP 模式#
- 老板:「秘书,查一下谷歌先生的电话。」
- 秘书:直接编一个假号码
198.18.0.1:「号码是 198.18.0.1,快打!」 - 老板秒拨。
- 秘书拦截这个拨向假 IP 的电话,心里记得”这是谷歌”。
- 秘书直接告诉国外的代理节点:「帮我接通谷歌,号码你自己解析。」
- 国外节点解析 + 连接谷歌。
优点:
- DNS 查询零延迟(直接给假 IP)
- 真实 DNS 在国外节点解析(彻底无泄漏)
- 浏览器拿到假 IP 时本地完全不查 DNS
三、DNS 分流:处理国内站#
但有些站不能给假 IP——比如百度。CDN 会根据你的 IP 给你最近的服务器,给假 IP 会让百度以为你在某个奇怪的地方,分配到慢的节点。
所以国内站要禁用 Fake-IP,走真实 IP。这就是 fake-ip-filter:
1dns:2 fake-ip-filter:3 - "+.lan"4 - "+.local"5 - "geosite:private"6 - "geosite:connectivity-check" # 微软/安卓的网络连通性检测7 - "geosite:cn" # 国内域名走真实 IP但走真实 IP 又要解决「该用哪个 DNS 查」的问题——国内站走国内 DNS(不然被分配到海外 CDN),国外站走国外 DNS(不然被 GFW 污染)。这就是 nameserver-policy:
1dns:2 nameserver-policy:3 "geosite:cn,private":4 - https://223.5.5.5/dns-query5 - https://doh.pub/dns-query6 "geosite:geolocation-!cn":7 - https://1.1.1.1/dns-query8 - https://dns.google/dns-query整体流程:
四、no-resolve:避免本地多余解析#
即使开了 Fake-IP,规则匹配阶段 Clash 可能还会做一次本地 DNS 查询。
举例规则:
1rules:2 - RULE-SET, youtube, PROXY3 - GEOIP, CN, DIRECT4 - MATCH, PROXY当访问一个未知国外域名时:
没有 no-resolve#
- Fake-IP 给假 IP,浏览器秒连。
- Clash 匹配规则:
RULE-SET, youtube→ 没命中GEOIP, CN→ 这是 IP 规则,Clash 必须知道真 IP才能判断是否 CN
- Clash 在本地发起一次 DNS 查询(200ms)
- 拿到美国 IP → 不是 CN → 走 PROXY → 代理节点再解析一次
🪤 白白等了 200ms 本地解析。
加上 no-resolve#
1rules:2 - RULE-SET, youtube, PROXY3 - GEOIP, CN, DIRECT, no-resolve # 👈4 - MATCH, PROXY- Fake-IP 给假 IP。
- 匹配
GEOIP, CN:
- 看到
no-resolve:「没真实 IP 就别查了,跳过这条」
- 没匹配 → 走 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 配置#
1dns:2 enable: true3 ipv6: false4 listen: 0.0.0.0:10535 prefer-h3: false6 respect-rules: true # 让 DNS 解析参考分流规则7 cache-algorithm: arc8 cache-size: 20489 enhanced-mode: fake-ip10 fake-ip-range: 198.18.0.1/1611
12 # Fake-IP 过滤:返回真实 IP 的域名13 fake-ip-filter:14 - "+.lan"15 - "+.local"16 - "geosite:private"17 - "geosite:connectivity-check"18 - "geosite:cn"19
20 # 用于解析 DoH 域名自身(先有 IP 才能访问 DoH)21 default-nameserver:22 - 223.5.5.523 - 119.29.29.2924 - 1.1.1.125 - 8.8.8.826
27 # 代理节点的 DNS(必须国外,防止节点域名被污染连不上)28 proxy-server-nameserver:29 - https://1.1.1.1/dns-query30 - https://dns.google/dns-query31
32 # 默认 nameserver(视为国外/未知流量,走国外加密 DNS)33 nameserver:34 - https://1.1.1.1/dns-query35 - https://dns.google/dns-query36
37 # 备用 fallback38 fallback:39 - https://1.1.1.1/dns-query40 - https://8.8.8.8/dns-query41
42 # 分流策略(灵魂)43 nameserver-policy:44 "geosite:cn,private":45 - https://223.5.5.5/dns-query46 - https://doh.pub/dns-query47 "geosite:geolocation-!cn":48 - https://1.1.1.1/dns-query49 - https://dns.google/dns-query配合规则的写法:
1rules:2 # 域名规则(不需要 no-resolve)3 - DOMAIN-SUFFIX,google.com,PROXY4 - GEOSITE,youtube,PROXY5 - GEOSITE,cn,DIRECT6
7 # IP 规则(必须加 no-resolve)8 - GEOIP,CN,DIRECT,no-resolve9 - GEOIP,private,DIRECT,no-resolve10
11 - 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 没泄漏#
跑代理 + 配完上面这套之后,用这几个站验证:
1https://dnsleaktest.com2https://browserleaks.com/dns3https://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 这块就基本一劳永逸了——无泄漏、无污染、国内国外分流准确,从此再不用想这块。