Clash的强大之处不仅在于其代理功能,更在于其灵活可定制的规则引擎。通过编写自定义规则,您可以精确控制每一条网络连接的走向,实现国内直连、国外代理、广告拦截等精细化分流策略。本文将从基础开始,逐步教您如何编写Clash规则。
一、规则基础语法
Clash的规则采用YAML格式编写,每条规则由三部分组成:规则类型、匹配值和策略名称。基本格式为:规则类型,匹配值,策略。理解这个基本格式是编写规则的第一步。
常用规则类型
DOMAIN:精确匹配完整域名,如DOMAIN,www.google.com,ProxyDOMAIN-SUFFIX:匹配域名后缀,如DOMAIN-SUFFIX,google.com,Proxy会匹配所有以google.com结尾的域名DOMAIN-KEYWORD:匹配域名中包含的关键词,如DOMAIN-KEYWORD,google,ProxyIP-CIDR:匹配IP地址段,如IP-CIDR,192.168.0.0/16,DIRECTGEOIP:按IP地理位置匹配,如GEOIP,CN,DIRECT匹配所有中国IPPROCESS-NAME:按进程名匹配,如PROCESS-NAME,telegram,ProxyMATCH:兜底规则,匹配所有未被前面规则匹配的流量
二、规则优先级
Clash按照规则在配置文件中从上到下的顺序进行匹配,一旦匹配成功就停止继续匹配。因此规则的排列顺序非常重要。建议按照以下优先级排列:
- 广告拦截规则(REJECT)- 最先匹配,直接丢弃广告请求
- 私有网络和局域网规则(DIRECT)- 确保本地设备通信正常
- 特定应用规则(PROCESS-NAME)- 按应用精确分流
- 高频域名规则(DOMAIN/DOMAIN-SUFFIX)- 常用网站精确匹配
- 地理位置规则(GEOIP)- 按IP归属地分流
- 兜底规则(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提供了多种调试方法:
- 查看实时日志:在客户端的日志页面可以看到每条连接的规则匹配结果
- 使用Clash API:通过API查询特定连接的匹配详情
- 测试特定域名:在配置中添加测试规则,访问目标网站后检查日志确认匹配结果
- 使用在线工具:部分在线工具可以模拟Clash规则匹配过程
总结
掌握Clash规则编写是充分利用Clash功能的关键。从基础的域名匹配到高级的规则集管理,从简单的直连代理到精细化的应用分流,规则引擎为Clash提供了无限的可能性。建议从简单的规则开始,逐步增加复杂度,在实践中不断学习和优化。社区维护的规则集是很好的学习资源,可以参考他人的规则配置来提升自己的规则编写能力。