Clash分流规则:原理、配置与常见问题解答

Clash 分流规则:原理、配置与常见问题解答

Clash 作为一款流行的代理工具,以其强大的分流功能著称。分流规则是 Clash 的核心,它决定了哪些流量走代理,哪些流量直连,哪些流量被阻止。理解分流规则的原理、配置方法以及常见问题的解决,对于充分利用 Clash 的功能至关重要。

一、Clash 分流规则原理

Clash 分流规则的核心在于匹配策略

1. 匹配 (Matching)

Clash 接收到网络请求后,会根据预先定义的规则对请求的各个属性进行匹配。这些属性包括:

  • 域名 (DOMAIN):请求的目标域名,例如 google.com
  • 域名后缀 (DOMAIN-SUFFIX):域名的后缀部分,例如 .com.org.cn
  • 域名关键字 (DOMAIN-KEYWORD):域名中包含的关键字,例如 googleyoutube
  • 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

这个配置的含义是:

  1. 如果请求的域名后缀是 google.com,则使用 PROXY 策略。
  2. 如果请求的域名包含关键字 google,则使用 PROXY 策略。
  3. 如果请求的 IP 地址属于中国大陆地区,则使用 DIRECT 策略。
  4. 如果以上规则都不匹配,则使用 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 规则可能比较繁琐,可以使用一些在线规则生成器来简化配置过程。这些工具通常提供图形化界面,可以方便地选择规则类型、填写参数,并生成最终的配置文件。

一些常用的规则生成器包括:

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,实现更安全、更自由、更个性化的网络访问。

THE END