Clash 自定义分流规则怎么写(DOMAIN / IP-CIDR / 规则集)

想让某个网站强制直连、某个 App 强制走代理?这就需要自定义分流规则。本文讲清规则语法、匹配优先级,以及如何用扩展配置 / 扩展脚本叠加个人规则——订阅更新后你的规则依然保留。

规则语法基础

一条规则的格式是 规则类型,匹配内容,策略,策略可以是策略组名、DIRECT(直连)或 REJECT(拒绝)。常用类型:

类型含义示例
DOMAIN精确域名DOMAIN,www.google.com,PROXY
DOMAIN-SUFFIX域名后缀DOMAIN-SUFFIX,github.com,PROXY
DOMAIN-KEYWORD域名关键词DOMAIN-KEYWORD,google,PROXY
IP-CIDRIP 段IP-CIDR,192.168.0.0/16,DIRECT
GEOIP按国家GEOIP,CN,DIRECT
MATCH兜底(必须最后)MATCH,PROXY

匹配优先级

Clash 规则从上到下依次匹配,命中即停止。所以越精确的规则要放越前面。推荐顺序:

  1. 精确域名类(DOMAIN > DOMAIN-SUFFIX > DOMAIN-KEYWORD)放最上面;
  2. IP 类(IP-CIDR、GEOIP)放后面,因为它们需要先做 DNS 解析;
  3. 最后用 MATCH 兜底,未命中的流量交给指定策略组。
例子:想让 bilibili.com 直连,把 DOMAIN-SUFFIX,bilibili.com,DIRECT 放在所有代理规则之前即可。

用扩展配置叠加规则(不改订阅)

直接改订阅文件不可取——订阅一更新就被覆盖。正确做法是用 Clash Verge Rev 的扩展配置(旧称 Merge):右键订阅卡片 → 编辑规则 / 编辑扩展配置,在可视化编辑器里把自定义规则前置(prepend)到订阅规则之上。这样订阅更新后,你的规则依然生效。

用扩展脚本动态插入规则

需要更灵活的逻辑时用扩展脚本(JavaScript),入口为 main(config),返回修改后的配置对象:

// 把自定义规则插到订阅规则前面
const prependRules = [
  "DOMAIN-SUFFIX,baidu.com,DIRECT",
  "DOMAIN-SUFFIX,bilibili.com,DIRECT",
  "DOMAIN-KEYWORD,google,PROXY",
];

function main(config) {
  const old = config["rules"] || [];
  config["rules"] = prependRules.concat(old);
  return config;
}
升级注意:Clash Verge Rev v1.7.x 后旧的 prepend-rules / append-rules 写法已失效,请改用可视化编辑器或上面的数组合并写法。

规则集(rule-set / Provider)

规则太多会影响性能。推荐用 rule-providers 引用外部规则集(如按类别维护的 GitHub 规则文件),一条 RULE-SET,类别,策略 即可引用成百上千条规则,且能定时更新。这是进阶分流的主流做法。

更多进阶配置可结合 DNS 配置节点测速 一起调优。

⚠️ 免责声明:本文为开源软件使用教程,本站不提供任何节点、VPN 或机场服务。请遵守所在地区法律法规,合理合法使用网络工具。