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:
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整体流程:
真实解析延后到节点] R -->|geosite:cn| RD[阿里/腾讯 DoH] R -->|geosite:!cn| RD2[Cloudflare/Google DoH]
四、no-resolve:避免本地多余解析
即使开了 Fake-IP,规则匹配阶段 Clash 可能还会做一次本地 DNS 查询。
举例规则:
rules: - RULE-SET, youtube, PROXY - GEOIP, CN, DIRECT - 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
rules: - RULE-SET, youtube, PROXY - GEOIP, CN, DIRECT, no-resolve # 👈 - 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 配置
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.comhttps://browserleaks.com/dnshttps://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 这块就基本一劳永逸了——无泄漏、无污染、国内国外分流准确,从此再不用想这块。