掌握 Clash 分流:策略组与规则设置全攻略
Clash 作为一款功能强大的代理客户端,其核心魅力之一便是灵活且高度可定制的分流能力。通过精妙地配置“策略组”(Proxy Group)和“规则”(Rule),用户可以实现对网络流量的精准控制,例如特定网站走特定代理、国内流量直连、广告拦截等。本文将深入解析 Clash 的分流机制,助你全面掌握策略组与规则的设置。
一、Clash 分流基础概念
在深入策略组和规则之前,我们先理解几个基本概念:
- 代理节点 (Proxy Node):指实际的代理服务器,如 Shadowsocks (SS)、VMess、Trojan 等。它们是流量的最终出口。
- 策略组 (Proxy Group):可以理解为一个代理节点的集合,或者是一个流量分配的逻辑单元。一个策略组内可以包含多个代理节点,也可以包含其他策略组。它是实现复杂分流逻辑的关键。
- 规则 (Rule):定义了什么样的流量(如目标域名、IP 地址、流量类型等)应该如何处理(如走哪个代理节点、走哪个策略组、直连或拒绝)。规则是按顺序匹配的,一旦匹配成功,后续规则将不再生效。
二、策略组 (Proxy Group) 详解
策略组是 Clash 分流体系的基石,它允许你将多个代理节点或逻辑合并,并提供多种选择策略。
1. 策略组类型
Clash 提供了多种内置的策略组类型,每种类型都有其独特的流量分配逻辑:
select(手动选择):最常用也是最灵活的类型。它会列出组内所有可用的代理节点和子策略组,允许用户在 Clash 客户端界面手动选择一个作为当前使用的代理。
“`yaml- name: 🚀 节点选择
type: select
proxies:- ♻️ 自动选择
- 香港节点 A
- 台湾节点 B
-
… 其他节点
“`
- name: 🚀 节点选择
url-test(自动测速):根据预设的 URL(通常是一个低延迟的网站,如http://www.gstatic.com/generate_204或https://www.google.com/generate_204)自动测试组内所有代理节点的延迟,并自动选择延迟最低的节点。适用于追求速度的用户。
“`yaml- name: ♻️ 自动选择
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300 # 每300秒(5分钟)测试一次
tolerance: 50 # 容忍延迟波动,避免频繁切换
proxies:- 香港节点 A
- 台湾节点 B
- 日本节点 C
“`
- name: ♻️ 自动选择
fallback(故障转移):按顺序测试组内代理节点的可用性。如果第一个节点不可用,则切换到下一个,直到找到可用的节点。适用于追求稳定性的用户,即使某个节点挂掉也能自动切换。
“`yaml- name: 🌍 负载均衡
type: fallback
url: http://www.gstatic.com/generate_204
interval: 300
proxies:- 美国节点 X
- 德国节点 Y
- 英国节点 Z
“`
- name: 🌍 负载均衡
load-balance(负载均衡):实验性功能,尝试将流量平均分配到组内所有节点。在实际使用中效果可能不如url-test或fallback直观。
“`yaml- name: 负载均衡测试
type: load-balance
url: http://www.gstatic.com/generate_204
interval: 300
proxies:- 节点 M
- 节点 N
“`
- name: 负载均衡测试
relay(链式代理):将流量按顺序通过多个代理节点。常用于多重代理,增加匿名性或解决某些特殊网络环境问题。
“`yaml- name: 链式代理
type: relay
proxies:- 节点 A (入口)
- 节点 B (中间)
- 节点 C (出口)
“`
- name: 链式代理
2. 策略组的嵌套
策略组可以嵌套,这是一个非常强大的特性。例如,你可以创建一个 select 策略组,其中包含多个 url-test 策略组,这样你可以在不同地域的“最优节点”之间进行手动切换。
“`yaml
proxy-groups:
– name: 🚀 顶级策略
type: select
proxies:
– ♻️ 智能优选 # 这是一个url-test组
– 🇭🇰 香港专线 # 这是一个url-test组
– 🇨🇳 国内直连 # 这是一个直接连接的组或特殊处理组
– DIRECT
– REJECT
-
name: ♻️ 智能优选
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
proxies:- 香港节点 A
- 台湾节点 B
- 日本节点 C
-
name: 🇭🇰 香港专线
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
proxies:- 香港节点 D
- 香港节点 E
“`
三、规则 (Rule) 设置详解
规则定义了流量如何匹配以及匹配后如何处理。Clash 的规则引擎会按顺序从上到下匹配规则,一旦匹配成功便立即执行,不再检查后续规则。因此,规则的顺序至关重要。
1. 规则类型
Clash 支持多种规则类型:
DOMAIN-SUFFIX: 匹配域名后缀。例如DOMAIN-SUFFIX,google.com,🚀 节点选择会匹配所有以google.com结尾的域名(如www.google.com,mail.google.com)。DOMAIN-KEYWORD: 匹配域名中包含特定关键字的域名。例如DOMAIN-KEYWORD,google,🚀 节点选择会匹配任何包含google的域名。DOMAIN: 精确匹配域名。例如DOMAIN,www.google.com,🚀 节点选择只匹配www.google.com。FULL: (Clash Premium) 精确匹配域名(同DOMAIN),但可能包含端口信息。IP-CIDR/IP-CIDR6: 匹配 IP 地址或 IP 段。例如IP-CIDR,192.168.1.0/24,DIRECT。通常用于路由内部或国内流量。GEOIP: 基于 IP 地址的地理位置匹配。例如GEOIP,CN,DIRECT会匹配所有中国大陆的 IP 地址并直连。PROCESS-NAME: (Clash Premium) 匹配发起连接的进程名。例如PROCESS-NAME,telegram.exe,🚀 节点选择。MATCH: 兜底规则,匹配所有未被前面规则匹配到的流量。此规则必须放在所有规则的最后,且通常指向一个默认的策略组(如🚀 节点选择)或DIRECT/REJECT。RULE-SET: (Clash Premium) 引用外部规则集文件,便于管理大量规则。
2. 规则的动作 (Policy)
每条规则的最后一个参数是其动作,可以是:
- 代理节点名:直接指定一个代理节点来处理流量。
- 策略组名:将流量导入到指定的策略组,由该策略组决定如何进一步处理。
DIRECT:直连,不经过任何代理。REJECT:拒绝连接。常用于广告拦截或恶意网站屏蔽。
3. 规则的编写顺序
规则的顺序至关重要,遵循“特殊优先于一般,精确优先于模糊”的原则:
- 拒绝 (REJECT) 规则:如广告、恶意网站,应放在最前面。
DOMAIN-SUFFIX,ad.com,REJECT - 直连 (DIRECT) 规则:如国内网站、局域网,应在代理规则之前。
GEOIP,CN,DIRECT
IP-CIDR,192.168.0.0/16,DIRECT - 精确匹配规则:
DOMAIN,DOMAIN-KEYWORD等。
DOMAIN,cdn.cloudflare.com,DIRECT(如果 CDN 直连更快) - 模糊匹配规则:
DOMAIN-SUFFIX。
DOMAIN-SUFFIX,google.com,🚀 节点选择
DOMAIN-SUFFIX,youtube.com,🚀 节点选择 - 兜底规则 (MATCH):必须放在最后。
MATCH,🚀 节点选择(所有未匹配的流量都走这个策略组)
4. 规则示例
“`yaml
rules:
# 1. 拒绝规则 (最优先)
– DOMAIN-SUFFIX,ad.doubleclick.net,REJECT
– DOMAIN-SUFFIX,googlesyndication.com,REJECT
# 2. 直连规则 (优先于代理)
– GEOIP,CN,DIRECT # 中国大陆IP直连
– IP-CIDR,127.0.0.1/8,DIRECT # 本地环回地址直连
– IP-CIDR,192.168.0.0/16,DIRECT # 局域网直连
– DOMAIN-SUFFIX,cn,DIRECT # 所有.cn域名直连
# 3. 代理规则
– DOMAIN-SUFFIX,google.com,🚀 节点选择
– DOMAIN-SUFFIX,youtube.com,🚀 节点选择
– DOMAIN-SUFFIX,twitter.com,🚀 节点选择
– DOMAIN-KEYWORD,telegram,🚀 节点选择
– PROCESS-NAME,clash.exe,DIRECT # Clash自身流量直连 (Premium)
# 4. 兜底规则 (最后)
– MATCH,🚀 节点选择 # 所有未匹配的流量都走“节点选择”策略组
“`
四、配置文件结构概览
一个典型的 Clash 配置文件(YAML 格式)大致结构如下:
“`yaml
port: 7890
socks-port: 7891
allow-lan: false
mode: rule # rule / global / direct
log-level: info
external-controller: 127.0.0.1:9090
proxies:
# 在这里定义你的所有代理节点
– name: 香港节点 A
type: ss
server: example.com
port: 443
cipher: aes-256-gcm
password: “password”
# … 其他代理节点
proxy-groups:
# 在这里定义你的所有策略组
– name: 🚀 节点选择
type: select
proxies:
– ♻️ 自动选择
– 香港节点 A
– DIRECT
– name: ♻️ 自动选择
type: url-test
url: http://www.gstatic.com/generate_204
interval: 300
proxies:
– 香港节点 A
– 台湾节点 B
rules:
# 在这里定义你的所有规则
– GEOIP,CN,DIRECT
– DOMAIN-SUFFIX,google.com,🚀 节点选择
– MATCH,🚀 节点选择
“`
五、高级技巧与注意事项
- 规则集 (Rule Provider):对于复杂的分流需求,将规则集中管理并从外部 URL 导入是更好的选择。Clash Premium 支持
rule-providers,这大大简化了规则的维护。 - 订阅转换:许多机场(代理服务提供商)提供的订阅链接可能不直接兼容 Clash,或其生成的配置不尽如人意。使用在线订阅转换工具(如
SubConverter等)可以自定义生成的 Clash 配置,包括预设策略组和规则。 - 日志调试:当分流不符合预期时,检查 Clash 的日志。日志会显示流量命中了哪条规则,走了哪个代理,这对于调试非常有用。
DIRECT和REJECT的优先级:务必将DIRECT和REJECT相关的规则放在代理规则之前,以确保它们能及时生效。- 避免循环引用:在策略组嵌套时,确保不要创建循环引用,否则会导致配置错误。
总结
Clash 的策略组与规则系统为用户提供了无与伦比的流量控制能力。通过理解不同策略组的特性、掌握规则的编写顺序和类型,并结合实际需求进行灵活配置,你可以构建出高效、稳定且智能的网络分流方案。希望本文能助你成为 Clash 分流的真正高手!