本文介绍下 Clash 的规则以及如何配置规则。
前几天有朋友留言,觉得某个机场的规则很好,但很可惜它又跑路了(是的,说的就是 Duangcloud)。刚好今天说下自己要怎么写规则。
Clash 规则是什么?
Clash 的规则是一套用于流量分流的配置规则,通过这些规则,Clash 能够对网络请求进行分类,并根据规则决定如何处理这些请求。简单说,这些规则决定了哪些网站或IP是使用代理访问,哪些是直接访问。例如,你开着代理软件的时候,访问bilibili就希望是直接访问,不要经过代理,不然你的流量一下就跑没了。
于是,通过规则,你就可以实现:
- 流量分流:区分哪些流量走代理,哪些直连。
- 广告屏蔽:通过特定规则屏蔽广告域名或 IP。
- 优化流媒体和游戏:指定流媒体(如Netflix)、游戏(如Steam)走特定代理。
Clash 规则的基本结构
每条规则包含三部分:
规则类型, 匹配目标, 路由策略
- 规则类型:指定如何匹配流量(如域名、IP、地理位置等)。
- 匹配目标:定义要匹配的内容(如具体的域名、IP 地址等)。
- 路由策略:决定匹配后的处理方式(如
DIRECT
、PROXY
或REJECT
)。
看明白了吧,规则类型和匹配目标就是条件,当你要访问的某个域名符合你制定的条件,那么就按照你给它规定的路由策略来决定流量走不走代理。
常见的规则类型
规则类型 | 说明 | 示例 |
---|---|---|
DOMAIN | 精确匹配某个域名。 | DOMAIN, www.google.com, PROXY |
DOMAIN-SUFFIX | 匹配域名的后缀。 | DOMAIN-SUFFIX, google.com, PROXY |
DOMAIN-KEYWORD | 匹配包含指定关键字的域名。 | DOMAIN-KEYWORD, google, PROXY |
IP-CIDR | 匹配某个 IP 范围。 | IP-CIDR, 8.8.8.0/24, PROXY |
GEOIP | 根据 IP 所属地理区域匹配。 | GEOIP, CN, DIRECT |
MATCH | 匹配所有剩余流量,通常用于兜底规则。 | MATCH, PROXY |
匹配目标
匹配目标可以是域名(如 www.google.com
)、IP 地址(如 8.8.8.8
)、关键字(如 ads
)或地理区域(如 CN
表示中国)。
路由策略
- DIRECT:直连,不使用代理。
- PROXY:使用代理。
- REJECT:拦截流量,丢弃请求。
不过一般机场的路由策略会采用一些自定义的分组,下面会说。
规则的匹配顺序
Clash 从规则列表的顶部开始逐行匹配,直到找到第一个满足条件的规则为止。因此:
- 高优先级规则放在顶部。
- 常见规则放在中间。
MATCH
(兜底规则)放在底部,确保所有流量都有处理。
例如:
rules:
- DOMAIN-SUFFIX, google.com, PROXY # 访问 *.google.com 走代理
- GEOIP, CN, DIRECT # 所有中国流量直连
- MATCH, PROXY # 其余流量走代理
这几条规则的意思是:
- 如果访问
www.google.com
,匹配第一条规则,走代理。 - 如果访问中国大陆的 IP,匹配第二条规则,直连。
- 如果没有匹配到,默认使用最后的
MATCH
规则,走代理。
这里用的是 DOMAIN-SUFFIX
的类型,会匹配所有域名后缀是 google.com
的网络请求。例如 play.google.com, ads.google.com, www.google.com
等都会匹配上。但是 google.co.uk
就不会匹配上。
规则的实际应用场景举例
1. 屏蔽广告
rules:
- DOMAIN-SUFFIX, adservice.google.com, REJECT
- DOMAIN-KEYWORD, ads, REJECT
2. 分流国内外流量
rules:
- GEOIP, CN, DIRECT
- MATCH, PROXY
3. 优化流媒体访问
rules:
- DOMAIN-SUFFIX, netflix.com, PROXY
- DOMAIN-SUFFIX, youtube.com, PROXY
- GEOIP, CN, DIRECT
- MATCH, PROXY
4. 局域网直连
rules:
- IP-CIDR, 192.168.1.0/24, DIRECT
机场的配置文件举例
拿前面提到的机场的配置文件来看一下:
rules:
- 'DOMAIN,api.duangss.cloud,DIRECT'
- 'DOMAIN-SUFFIX,acl4ssr,🎯 全球直连'
- 'DOMAIN-SUFFIX,localhost,🎯 全球直连'
- 'IP-CIDR,10.0.0.0/8,🎯 全球直连,no-resolve'
- 'IP-CIDR,100.64.0.0/10,🎯 全球直连,no-resolve'
- 'DOMAIN,router.asus.com,🎯 全球直连'
- 'DOMAIN-SUFFIX,hiwifi.com,🎯 全球直连'
- 'DOMAIN-KEYWORD,adservice,🛑 全球拦截'
- 'DOMAIN-KEYWORD,adsh,🛑 全球拦截'
- 'DOMAIN-KEYWORD,adsmogo,🛑 全球拦截'
- 'DOMAIN-SUFFIX,a.youdao.com,🍃 应用净化'
- 'DOMAIN-SUFFIX,adgeo.corp.163.com,🍃 应用净化'
- 'DOMAIN-SUFFIX,analytics.126.net,🍃 应用净化'
- 'DOMAIN-KEYWORD,1drv,Ⓜ️ 微软服务'
- 'DOMAIN-KEYWORD,microsoft,Ⓜ️ 微软服务'
- 'DOMAIN,apple.comscoreresearch.com,🍎 苹果服务'
- 'DOMAIN-SUFFIX,aaplimg.com,🍎 苹果服务'
- 'DOMAIN-SUFFIX,edgedatg.com,🌍 国外媒体'
- 'DOMAIN-SUFFIX,go.com,🌍 国外媒体'
- 'DOMAIN-KEYWORD,abematv.akamaized.net,🌍 国外媒体'
- 'DOMAIN-SUFFIX,1password.com,🚀 节点选择'
- 'GEOIP,CN,🎯 全球直连'
- 'MATCH,🐟 漏网之鱼'
结合上面的内容,这时候你就能明白这些是什么意思了。但是呢,你会发现为什么他后面路由策略的地方写的是 🎯 全球直连、 🌍 国外媒体
这样的,而不是 DIRECT、PROXY
。
这是因为这里用到了 proxy-groups
的功能。在 Clash 的配置中,proxy-groups
是用于管理代理节点选择的部分,它定义了一个或多个代理组,每个组包含一系列代理节点,用户可以通过这些代理组轻松切换节点或设置自动选择策略。你可以根据自己的需求,把节点分组为手动选择、自动选择、特定用途(如流媒体、聊天工具)等类型。
从上图可以看出,分组的格式一般是这样的:
- { name: '🚀 节点选择', type: select, proxies: [...] }
name
: 组的名称,比如🚀 节点选择
。这是用户在客户端界面上看到的名称。type
: 组的类型,有以下几种:select
: 手动选择。用户可以在客户端中手动选择具体节点。url-test
: 自动测试所有节点的延迟,并选择最快的节点。fallback
: 备用机制。主要节点不可用时切换到可用的节点。load-balance
: 负载均衡,在多个节点间分配流量。
proxies
: 该组内包含的具体代理节点的列表。
总结
Clash 的规则配置乍一看好像挺复杂,密密麻麻一堆字。但你掌握了基础的语法和逻辑之后,还是很容易理解的。一般情况下,也不需要配置这些规则,因为机场都给你配置好了。默认就开规则模式,如果遇到访问不了的站,再开全局。但总有用得上的时候,谁知道你买的机场写的规则全不全面呢?
延伸阅读:知道了基础语法,看下 Clash Verge Rev 里在哪里设置规则。
言简意赅