规则配置

Clash 分流规则实战:从零写一份好用的 rules 配置

订阅自带的规则要么太粗、要么根本没覆盖你在意的 App。这篇文章从匹配顺序讲起,教你写常用规则类型,再用规则集合把维护量降到最低。

为什么订阅自带的规则不够用

大部分订阅都会自带一份分流规则,覆盖常见的国内直连、境外代理、广告拦截场景,日常使用基本够了。但只要你的需求稍微特殊一点——比如某个国内 App 却要走代理、某个游戏客户端必须直连、想自己加一条广告域名——订阅自带的规则往往改不了(订阅更新时会被覆盖),这时候就需要自己在配置里补一段 rules

大多数客户端支持把订阅规则和自定义规则分开管理(比如 Clash Verge 的"覆写"/"合并"功能),自定义规则写在覆写文件里,订阅更新也不会把你的规则冲掉。具体操作看客户端文档,本文只讲规则本身怎么写。

先搞懂匹配顺序,再动手写规则

rules 是一个数组,Clash 按从上到下的顺序逐条比对,命中第一条规则就立刻使用它指定的出站,后面的规则不会再看。这意味着规则的顺序比内容本身更容易出错——把宽泛规则写在前面,后面再精确的规则也永远轮不到。

config.yaml YAML
rules:
  # 从上到下匹配,命中一条就停止
  - DOMAIN-SUFFIX,ad.com,REJECT
  - DOMAIN-SUFFIX,google.com,节点选择
  - GEOIP,CN,DIRECT
  - MATCH,节点选择          # 兜底,必须放最后一条

常见踩坑:把 GEOIP,CN,DIRECT(国内直连)写在广告拦截规则前面。如果广告域名解析出的 IP 恰好在国内,就会先命中"国内直连"而不是"拦截",广告规则形同虚设。写规则时始终记住:越具体、越想优先生效的规则,越要往前放

常用规则类型实战

规则类型有几十种,但日常够用的其实就下面这几类,按使用频率排序:

  • 域名类:DOMAIN-SUFFIX / DOMAIN-KEYWORD / DOMAINDOMAIN-SUFFIX,google.com 匹配 google.com 及其所有子域名,是最常用的写法;DOMAIN-KEYWORD 匹配域名里包含某个关键字,适合"只要沾点这个词就拦截/代理"的场景,但要小心误伤;DOMAIN 只匹配完全一致的域名,最精确也最少用。
  • GEOSITE:按域名分类打包GEOSITE,youtube,节点选择 直接命中 YouTube 相关的整批域名,不用自己一条条写。规则集合社区已经整理好了几乎所有主流网站/App 的域名分类,比手写 DOMAIN-SUFFIX 省事得多。
  • GEOIP:按 IP 所属国家/地区GEOIP,CN,DIRECT 是几乎所有配置文件的标配兜底规则之一——凡是解析出国内 IP 的请求,直接走直连,不占用代理流量。
  • IP-CIDR:按 IP 段精确匹配适合内网地址段(如 192.168.0.0/16)、CDN 固定 IP 段等场景,配合 no-resolve 参数可以跳过一次不必要的 DNS 解析,加快匹配速度。
示例片段 YAML
rules:
  # 内网地址直连,no-resolve 跳过 DNS 解析
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,127.0.0.0/8,DIRECT,no-resolve
  # 按域名分类整批命中
  - GEOSITE,category-ads-all,REJECT
  - GEOSITE,netflix,节点选择
  # 兜底:国内 IP 直连,其余走代理
  - GEOIP,CN,DIRECT
  - MATCH,节点选择

规则太多、太长?用 RULE-SET 引入规则集合

如果要拦截的广告域名有几百条,直接写进 rules 数组会让配置文件变得极其臃肿,而且没法复用。这时应该用 rule-providers(规则集合),把一大批规则放到单独的文件/订阅链接里,配置里只需要一条 RULE-SET 引用它。

config.yaml YAML
rule-providers:
  reject:
    type: http
    behavior: domain
    url: "https://example.com/reject-list.txt"
    path: ./rule_providers/reject.yaml
    interval: 86400

rules:
  - RULE-SET,reject,REJECT
  - GEOIP,CN,DIRECT
  - MATCH,节点选择
  • behavior 决定规则集合文件的内容格式:domain(域名列表)、ipcidr(IP 段列表)、classical(完整规则,支持几乎所有类型),三者写法互不相同。
  • interval 让规则集合像订阅一样定期自动更新,广告域名库更新了也不用手动改配置。
  • 社区维护的常见规则集合(比如广告拦截列表、常见流媒体域名列表)基本都能直接拿来用,不需要自己从零整理。

规则集合内容本身的详细格式(三种 behavior 分别怎么写),可以看文档区的《规则集合内容》,这里就不重复展开了。

实战:搭一份"广告拦截 + 国内直连 + 特定 App 代理"配置

把前面讲的几种规则类型组合起来,就能搭出一份满足大多数人日常需求的配置骨架:

config.yaml YAML
rules:
  # 1. 局域网 / 内网地址,直连,跳过解析
  - IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
  - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve

  # 2. 广告拦截,规则集合,优先级最高
  - RULE-SET,reject,REJECT

  # 3. 特定 App/网站,指定必须走代理(写在国内规则之前!)
  - PROCESS-NAME,SomeApp.exe,节点选择
  - GEOSITE,netflix,节点选择
  - GEOSITE,youtube,节点选择

  # 4. 国内域名/IP,直连
  - GEOSITE,cn,DIRECT
  - GEOIP,CN,DIRECT

  # 5. 兜底:剩下的都走代理
  - MATCH,节点选择

第 3 步(指定 App/网站走代理)必须放在第 4 步(国内直连)前面。如果顺序反了,只要这些域名解析出的 IP 落在国内网段,就会被第 4 步的 GEOIP,CN,DIRECT 提前拦下,代理规则永远轮不到。

常见问题

改完规则要重启客户端吗?

大多数客户端支持热重载配置(一般叫"重新加载配置"或"Reload"),保存后点一下即可生效,不需要重启整个客户端。如果改动没生效,检查一下是不是改错了文件(订阅规则和覆写规则是分开的)。

规则很多的时候,会不会拖慢代理速度?

规则匹配本身是纯内存操作,几百条规则的匹配耗时通常在微秒级,感知不到延迟。真正影响体验的是 DNS 解析和节点本身的网络质量,不是规则数量。

为什么我加的 IP-CIDR 规则没生效?

最常见的原因是顺序问题——前面有一条更宽泛的规则(比如 MATCH 或范围更大的 GEOIP)已经先命中了。用控制面板的"规则"页搜索对应的 IP/域名,看它实际命中了哪一条,通常一眼就能定位问题。

延伸阅读

学完了?把 Clash 装上试试

全平台安装包一站获取,跟着推荐标签选就不会错,几分钟就能用上。

前往下载页
#规则配置 #RULE-SET #分流实战
返回博客列表
下载 Clash 客户端全平台安装包,即刻开始