Clash的强大之处不仅在于其代理功能,更在于其灵活可定制的规则引擎。通过编写自定义规则,您可以精确控制每一条网络连接的走向,实现国内直连、国外代理、广告拦截等精细化分流策略。本文将从基础开始,逐步教您如何编写Clash规则。

一、规则基础语法

Clash的规则采用YAML格式编写,每条规则由三部分组成:规则类型、匹配值和策略名称。基本格式为:规则类型,匹配值,策略。理解这个基本格式是编写规则的第一步。

常用规则类型

  • DOMAIN:精确匹配完整域名,如 DOMAIN,www.google.com,Proxy
  • DOMAIN-SUFFIX:匹配域名后缀,如 DOMAIN-SUFFIX,google.com,Proxy 会匹配所有以google.com结尾的域名
  • DOMAIN-KEYWORD:匹配域名中包含的关键词,如 DOMAIN-KEYWORD,google,Proxy
  • IP-CIDR:匹配IP地址段,如 IP-CIDR,192.168.0.0/16,DIRECT
  • GEOIP:按IP地理位置匹配,如 GEOIP,CN,DIRECT 匹配所有中国IP
  • PROCESS-NAME:按进程名匹配,如 PROCESS-NAME,telegram,Proxy
  • MATCH:兜底规则,匹配所有未被前面规则匹配的流量

二、规则优先级

Clash按照规则在配置文件中从上到下的顺序进行匹配,一旦匹配成功就停止继续匹配。因此规则的排列顺序非常重要。建议按照以下优先级排列:

  1. 广告拦截规则(REJECT)- 最先匹配,直接丢弃广告请求
  2. 私有网络和局域网规则(DIRECT)- 确保本地设备通信正常
  3. 特定应用规则(PROCESS-NAME)- 按应用精确分流
  4. 高频域名规则(DOMAIN/DOMAIN-SUFFIX)- 常用网站精确匹配
  5. 地理位置规则(GEOIP)- 按IP归属地分流
  6. 兜底规则(MATCH)- 放在最后,处理所有未匹配的流量

重要提示:MATCH规则必须放在规则列表的最后一条,否则所有流量都会被MATCH匹配,后面的规则将不会生效。

三、实用规则示例

广告拦截规则

广告拦截是最常见的规则需求之一。通过将已知广告域名指向REJECT策略,可以有效屏蔽网页和应用中的广告:

  • DOMAIN-SUFFIX,ad.com,REJECT - 拦截ad.com及其子域名的所有请求
  • DOMAIN-KEYWORD,adservice,REJECT - 拦截域名中包含adservice的请求
  • DOMAIN-KEYWORD,tracker,REJECT - 拦截包含tracker的追踪器请求

国内直连规则

将国内常用网站设置为直连,可以减少不必要的代理转发,提升访问速度:

  • DOMAIN-SUFFIX,cn,DIRECT - 所有.cn域名直连
  • DOMAIN-SUFFIX,baidu.com,DIRECT - 百度直连
  • DOMAIN-SUFFIX,qq.com,DIRECT - 腾讯直连
  • DOMAIN-SUFFIX,taobao.com,DIRECT - 淘宝直连
  • GEOIP,CN,DIRECT - 所有中国IP直连

国外代理规则

将国外常用网站设置为走代理:

  • DOMAIN-SUFFIX,google.com,Proxy - Google走代理
  • DOMAIN-SUFFIX,youtube.com,Proxy - YouTube走代理
  • DOMAIN-SUFFIX,github.com,Proxy - GitHub走代理
  • DOMAIN-SUFFIX,twitter.com,Proxy - Twitter走代理

四、规则集(Rule Provider)

当规则数量较多时,将所有规则写在主配置文件中会导致文件臃肿且难以维护。规则集功能允许将规则组织到独立文件中,实现模块化管理。

规则集配置示例

在配置文件中定义规则集提供者,然后在rules中引用:

  • 定义 rule-providers 部分,指定规则集的名称、类型(http或file)、URL和路径
  • 在 rules 中使用 RULE-SET,规则集名称,策略 引用规则集
  • 规则集可以设置自动更新间隔,保持规则始终最新

规则集的优势在于:可以共享和复用规则集,社区维护的规则集通常比个人维护的更全面和准确;规则集独立更新,不影响主配置文件;大量规则的匹配效率经过优化,性能更好。

五、高级规则技巧

按应用分流

PROCESS-NAME规则可以根据应用程序名称进行分流,这在桌面端特别有用。例如,可以让Telegram始终走代理,而浏览器按照域名规则分流。需要注意的是,PROCESS-NAME规则仅在系统代理模式下有效,在TUN模式下需要使用PROCESS-PATH规则。

NOT逻辑规则

Clash支持在规则前加NOT前缀实现反向匹配。例如 NOT,DOMAIN-SUFFIX,cn,Proxy 表示所有非.cn域名走代理。这种写法可以简化某些复杂的规则配置。

SRC规则

以SRC-开头的规则类型匹配的是请求源信息而非目标信息。例如 SRC-IP-CIDR,192.168.1.0/24,DIRECT 匹配来自特定局域网段的所有请求。这在路由器部署场景中特别有用。

六、规则调试方法

编写规则后,需要验证规则是否按预期工作。Clash提供了多种调试方法:

  1. 查看实时日志:在客户端的日志页面可以看到每条连接的规则匹配结果
  2. 使用Clash API:通过API查询特定连接的匹配详情
  3. 测试特定域名:在配置中添加测试规则,访问目标网站后检查日志确认匹配结果
  4. 使用在线工具:部分在线工具可以模拟Clash规则匹配过程

总结

掌握Clash规则编写是充分利用Clash功能的关键。从基础的域名匹配到高级的规则集管理,从简单的直连代理到精细化的应用分流,规则引擎为Clash提供了无限的可能性。建议从简单的规则开始,逐步增加复杂度,在实践中不断学习和优化。社区维护的规则集是很好的学习资源,可以参考他人的规则配置来提升自己的规则编写能力。