订阅自带的规则覆盖了大路货,但总有它照顾不到的:公司内网域名被错误代理、某个冷门网站没走代理、想按进程分流。学会自己写规则,这些问题五分钟解决。规则应写在 Merge 配置里(为什么以及怎么做),本文专讲语法。

Clash 自定义规则示例:流媒体走代理、内网直连、广告拦截
一份典型的自定义规则片段,注释说明每组的用途

规则的通用格式

类型,匹配值,出口[,附加参数]

出口填分组名(如 PROXY)、DIRECTREJECT从上到下匹配、命中即停——这一条记住了,优先级问题就全通了。

最常用的规则类型

类型示例说明
DOMAINDOMAIN,ads.example.com,REJECT精确匹配整个域名
DOMAIN-SUFFIXDOMAIN-SUFFIX,netflix.com,PROXY匹配域名及其全部子域,最常用
DOMAIN-KEYWORDDOMAIN-KEYWORD,google,PROXY域名包含关键词即命中,慎用(误伤面大)
IP-CIDRIP-CIDR,10.0.0.0/8,DIRECT,no-resolve按目标 IP 段匹配
GEOIPGEOIP,CN,DIRECT按 IP 归属国家,依赖 Geo 数据库
PROCESS-NAMEPROCESS-NAME,steam.exe,DIRECT按发起连接的进程分流
MATCHMATCH,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 仓库里,多设备共享一份清单。

验证规则是否命中

「连接」页面是标准答案:每条连接都标注了命中的规则和出口。改完规则 → 重新激活订阅 → 访问目标网站 → 连接页看命中情况,一个循环十几秒。规则没生效时,先检查是不是被更靠前的规则截胡了。