Clash分流规则:原理、配置与常见问题解答
Clash 分流规则:原理、配置与常见问题解答
Clash 作为一款流行的代理工具,以其强大的分流功能著称。分流规则是 Clash 的核心,它决定了哪些流量走代理,哪些流量直连,哪些流量被阻止。理解分流规则的原理、配置方法以及常见问题的解决,对于充分利用 Clash 的功能至关重要。
一、Clash 分流规则原理
Clash 分流规则的核心在于匹配与策略。
1. 匹配 (Matching)
Clash 接收到网络请求后,会根据预先定义的规则对请求的各个属性进行匹配。这些属性包括:
- 域名 (DOMAIN):请求的目标域名,例如
google.com
。 - 域名后缀 (DOMAIN-SUFFIX):域名的后缀部分,例如
.com
、.org
、.cn
。 - 域名关键字 (DOMAIN-KEYWORD):域名中包含的关键字,例如
google
、youtube
。 - IP 地址 (IP-CIDR):请求的目标 IP 地址或 IP 地址段,例如
192.168.1.0/24
。 - GEOIP:根据 IP 地址判断所属国家或地区。
- 进程名称 (PROCESS-NAME):发起网络请求的进程名称(仅部分平台支持,如 macOS)。
- 用户代理 (USER-AGENT):HTTP 请求头中的 User-Agent 字段,用于标识客户端类型。
- URL 正则表达式 (URL-REGEX):使用正则表达式匹配完整的 URL。
- 源端口 (SRC-PORT):发起请求的源端口。
- 目标端口(PORT): 网络请求的目标端口号
- 网络类型 (NETWORK):流量的网络类型, 例如TCP或UDP.
2. 策略 (Policy)
当请求的属性与某条规则匹配成功后,Clash 会执行该规则对应的策略。常见的策略包括:
- DIRECT:直接连接,不经过代理。
- PROXY:使用预先定义的代理服务器。
- REJECT:拒绝连接,阻止请求。
- 其他自定义策略组:可以指定一个策略组,该策略组可能包含多个代理服务器,Clash 会根据策略组的类型(如负载均衡、自动选择)选择一个具体的代理服务器。
3. 规则优先级
Clash 的规则是有优先级的。通常情况下,规则列表是从上到下进行匹配的。一旦某个请求匹配到了一条规则,Clash 就会执行该规则对应的策略,不再继续向下匹配。
因此,规则的顺序非常重要。一般来说,更具体的规则应该放在前面,更通用的规则放在后面。例如,针对特定域名的规则应该放在针对域名后缀的规则前面。
4. 规则类型
Clash 支持多种规则类型,每种类型都有其特定的匹配方式。以下是常见的规则类型及其说明:
规则类型 | 匹配方式 | 示例 |
---|---|---|
DOMAIN |
精确匹配域名 | DOMAIN,google.com,PROXY |
DOMAIN-SUFFIX |
匹配域名后缀 | DOMAIN-SUFFIX,google.com,PROXY |
DOMAIN-KEYWORD |
匹配域名中包含的关键字 | DOMAIN-KEYWORD,google,PROXY |
IP-CIDR |
匹配 IP 地址或 IP 地址段 | IP-CIDR,192.168.1.0/24,DIRECT |
GEOIP |
匹配 IP 地址所属的国家或地区(需要 GeoIP 数据库) | GEOIP,CN,DIRECT |
PROCESS-NAME |
匹配进程名称 (仅部分平台支持,如 macOS) | PROCESS-NAME,com.apple.Safari,PROXY (macOS) |
USER-AGENT |
匹配 HTTP 请求头中的 User-Agent 字段 | USER-AGENT,curl*,PROXY |
URL-REGEX |
使用正则表达式匹配完整的 URL | URL-REGEX,^https?://(www.)?example.com,PROXY |
SRC-PORT |
匹配发起请求的源端口 | SRC-PORT,8080,DIRECT |
PORT |
匹配网络请求的目标端口号 | PORT,443,PROXY |
NETWORK |
匹配流量的网络类型 | NETWORK,UDP,PROXY |
MATCH |
最终匹配规则,通常放在最后,用于处理未匹配到任何规则的请求。 | MATCH,PROXY |
二、Clash 分流规则配置
Clash 的分流规则通常配置在 rules
字段中。以下是一个示例配置:
yaml
rules:
- DOMAIN-SUFFIX,google.com,PROXY
- DOMAIN-KEYWORD,google,PROXY
- GEOIP,CN,DIRECT
- MATCH,PROXY
这个配置的含义是:
- 如果请求的域名后缀是
google.com
,则使用PROXY
策略。 - 如果请求的域名包含关键字
google
,则使用PROXY
策略。 - 如果请求的 IP 地址属于中国大陆地区,则使用
DIRECT
策略。 - 如果以上规则都不匹配,则使用
MATCH
规则,即使用PROXY
策略。
1. 常用规则配置示例
-
国内直连,国外代理:
yaml
rules:
- GEOIP,CN,DIRECT
- MATCH,PROXY
* 特定域名走代理:yaml
rules:
- DOMAIN-SUFFIX,example.com,PROXY
- MATCH,DIRECT
* 特定 IP 地址段直连:yaml
rules:
- IP-CIDR,192.168.1.0/24,DIRECT
- MATCH,PROXY
* 广告屏蔽:yaml
rules:
- DOMAIN-SUFFIX,ads.example.com,REJECT
- DOMAIN-KEYWORD,ad,REJECT
- MATCH,PROXY
* 特定应用走代理(macOS):
yaml
rules:
- PROCESS-NAME,com.apple.Safari,PROXY
- MATCH,DIRECT
2. 规则生成器
手动编写 Clash 规则可能比较繁琐,可以使用一些在线规则生成器来简化配置过程。这些工具通常提供图形化界面,可以方便地选择规则类型、填写参数,并生成最终的配置文件。
一些常用的规则生成器包括:
- ACL4SSR
- ConnersHua/Profiles
- 一些机场服务商也会提供自定义规则的功能。
3. 引用外部规则文件
为了方便管理和复用规则,可以将规则单独保存在一个文件中,然后在主配置文件中引用。
-
创建外部规则文件 (例如
myrules.yaml
):yaml
rules:
- DOMAIN-SUFFIX,example.com,PROXY
- IP-CIDR,192.168.1.0/24,DIRECT
* 在主配置文件中引用:```yaml
rule-providers:
myrules:
type: file
path: ./myrules.yaml #相对路径
behavior: domain #或者ipcidr,classical等rules:
- RULE-SET,myrules,PROXY
- MATCH,DIRECT
``
rule-providers定义了一个外部规则源.
type定义了外部规则源的类型,
path`指定了文件的位置.RULE-SET
类型的规则可以引用rule-providers
定义的规则源, 然后指定这些规则使用的策略.
三、Clash 分流规则常见问题解答
1. 规则不生效?
- 检查规则顺序: 确保更具体的规则放在前面,更通用的规则放在后面。
- 检查规则语法: 确保规则的语法正确,没有拼写错误或格式问题。
- 清除 DNS 缓存: 有时 DNS 缓存会导致规则不生效,可以尝试清除 DNS 缓存。
- 重启 Clash: 修改规则后,需要重启 Clash 才能使新的规则生效。
- 检查规则是否被覆盖: 如果使用了多个规则文件或配置,后面的规则可能会覆盖前面的规则。
2. 无法访问特定网站?
- 检查规则是否阻止了该网站: 检查规则中是否有针对该网站的
REJECT
规则。 - 检查代理服务器是否可用: 如果规则指定了代理服务器,确保该代理服务器可用。
- 尝试切换代理服务器: 如果使用了策略组,尝试切换到其他代理服务器。
- 检查 DNS 设置: 错误的 DNS 设置可能导致无法解析域名。
3. 速度慢?
- 检查代理服务器的负载: 代理服务器的负载过高可能导致速度慢。
- 尝试切换代理服务器: 如果使用了策略组,尝试切换到其他代理服务器。
- 优化规则: 过于复杂的规则可能导致性能下降,可以尝试简化规则。
- 使用更快的代理协议: 不同的代理协议(如 Shadowsocks、Vmess、Trojan)性能可能有所不同。
4. GEOIP 规则不准确?
- 更新 GEOIP 数据库: GEOIP 数据库需要定期更新,以确保准确性。
- 使用其他 GEOIP 数据库: 可以尝试使用其他来源的 GEOIP 数据库。
- 检查 IP 地址是否被错误识别: 有些 IP 地址可能被错误地识别为其他国家或地区。
5. 如何测试规则?
- 使用
curl
命令: 可以使用curl
命令测试特定 URL 的访问情况,并查看是否走了代理。 例如:curl -v -x 代理地址:端口 http://www.example.com
- 使用在线工具: 一些在线工具可以检测 IP 地址和 DNS 解析结果,帮助判断是否走了代理。
- 查看 Clash 日志: Clash 的日志会记录请求的匹配规则和使用的策略,可以用于调试。
6. 如何使用策略组?
策略组允许你定义一组代理服务器,并指定选择策略。常见的策略组类型包括:
select
: 手动选择一个代理服务器。url-test
: 自动测试延迟并选择延迟最低的代理服务器。fallback
: 按顺序尝试代理服务器,直到找到可用的代理服务器。load-balance
: 在多个代理服务器之间进行负载均衡。relay
: 链式代理, 将多个代理串联起来.
示例配置:
```yaml
proxy-groups:
- name: MyProxyGroup
type: url-test
proxies:
- Proxy1
- Proxy2
- Proxy3
url: http://www.gstatic.com/generate_204
interval: 300
rules:
- DOMAIN-SUFFIX,example.com,MyProxyGroup
```
四、总结
Clash 分流规则是 Clash 的强大功能之一,通过灵活配置规则,可以实现精细化的流量控制。理解分流规则的原理、配置方法以及常见问题的解决,可以帮助你更好地使用 Clash,实现更安全、更自由、更个性化的网络访问。