订阅自带的规则覆盖了大路货,但总有它照顾不到的:公司内网域名被错误代理、某个冷门网站没走代理、想按进程分流。学会自己写规则,这些问题五分钟解决。规则应写在 Merge 配置里(为什么以及怎么做),本文专讲语法。
规则的通用格式
类型,匹配值,出口[,附加参数]
出口填分组名(如 PROXY)、DIRECT 或 REJECT。从上到下匹配、命中即停——这一条记住了,优先级问题就全通了。
最常用的规则类型
| 类型 | 示例 | 说明 |
|---|---|---|
DOMAIN | DOMAIN,ads.example.com,REJECT | 精确匹配整个域名 |
DOMAIN-SUFFIX | DOMAIN-SUFFIX,netflix.com,PROXY | 匹配域名及其全部子域,最常用 |
DOMAIN-KEYWORD | DOMAIN-KEYWORD,google,PROXY | 域名包含关键词即命中,慎用(误伤面大) |
IP-CIDR | IP-CIDR,10.0.0.0/8,DIRECT,no-resolve | 按目标 IP 段匹配 |
GEOIP | GEOIP,CN,DIRECT | 按 IP 归属国家,依赖 Geo 数据库 |
PROCESS-NAME | PROCESS-NAME,steam.exe,DIRECT | 按发起连接的进程分流 |
MATCH | MATCH,PROXY | 兜底,永远放最后一条 |
IP 类规则记得加 no-resolve:否则纯域名请求会为了匹配这条规则先做一次 DNS 解析,拖慢速度还可能造成泄漏。
三个拿来即用的例子
公司内网强制直连
prepend-rules:
- DOMAIN-SUFFIX,corp.example.com,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
轻量去广告
prepend-rules:
- GEOSITE,category-ads-all,REJECT
比装浏览器插件更彻底——App 内广告也能拦一部分。误杀时把具体域名 DOMAIN 直连放它前面。
下载工具不走代理省流量
prepend-rules:
- PROCESS-NAME,qbittorrent.exe,DIRECT
- PROCESS-NAME,Thunder.exe,DIRECT
RULE-SET:规则多了怎么管
规则上百条后,全堆在 Merge 里难以维护。Mihomo 支持把规则放进独立文件按需引用:
rule-providers:
my-direct:
type: http
behavior: domain
url: "https://example.com/my-direct.yaml"
interval: 86400
prepend-rules:
- RULE-SET,my-direct,DIRECT
规则文件可以放在自己的 GitHub 仓库里,多设备共享一份清单。
验证规则是否命中
「连接」页面是标准答案:每条连接都标注了命中的规则和出口。改完规则 → 重新激活订阅 → 访问目标网站 → 连接页看命中情况,一个循环十几秒。规则没生效时,先检查是不是被更靠前的规则截胡了。