什么是规则分流?
在传统的网络代理工具中,我们通常只能选择"全局代理"或"直连"。然而,现代网络环境极其复杂:访问 Google 需要代理,访问百度需要直连以保证速度,而某些公司内网服务则必须通过特定的私有路径。这种根据目标地址、IP、进程名等条件自动选择连接路径的技术,就是规则分流。
Clash 的核心价值就在于其强大且灵活的规则引擎。通过合理的规则配置,你可以实现"无感"上网:网页自动选择最快路径,下载流量走大带宽节点,流媒体流量走特定地区的解锁节点。
Clash 规则的基本构成与匹配逻辑
在 config.yaml 文件的 rules: 块中,每一行都是一条规则。它的基本格式如下:
- 类型,条件,策略[,选项]
例如:- DOMAIN-SUFFIX,google.com,Proxy。这条规则的意思是:如果请求域名的后缀是 google.com,则使用名为 Proxy 的代理组进行处理。
MATCH 规则指定的默认策略。
核心规则类型详解
要写好规则,首先要了解 Clash 支持的规则类型。
1. 域名匹配 (Domain Matching)
- DOMAIN: 精确匹配某个域名。例如
DOMAIN,www.google.com,Proxy。 - DOMAIN-SUFFIX: 匹配域名后缀。这是最常用的类型,例如
DOMAIN-SUFFIX,google.com,Proxy可以同时匹配www.google.com和mail.google.com。 - DOMAIN-KEYWORD: 关键词匹配。只要域名中包含该关键词就匹配。例如
DOMAIN-KEYWORD,google,Proxy。
2. IP 匹配 (IP Matching)
- IP-CIDR: 匹配特定的 IP 段。例如
IP-CIDR,192.168.1.0/24,DIRECT。 - GEOIP: 匹配特定国家/地区的 IP。例如
GEOIP,CN,DIRECT会匹配所有已知的中国 IP。
3. 其他匹配
- SRC-IP-CIDR: 根据请求来源 IP 匹配。常用于局域网分流,让不同设备走不同策略。
- PROCESS-NAME: 根据发出请求的进程名匹配(仅部分内核支持)。
- MATCH: 全匹配规则。通常放在最后,作为兜底策略。例如
- MATCH,FinalProxy。
规则匹配顺序:谁先谁后很重要
由于"首个匹配即停止"的特性,规则的排放顺序直接决定了分流结果。一个典型的错误是将 GEOIP,CN,DIRECT 放在了 DOMAIN-SUFFIX,google.com,Proxy 之前吗?不,那样没问题。但如果你把 MATCH,Proxy 放在了第一行,那么所有流量都会走代理,后面的规则就全部失效了。
推荐的排序逻辑:
- 局域网/直连黑名单:如
localhost、127.0.0.1。 - 精确域名匹配:处理需要特殊照顾的单个域名。
- 域名后缀匹配:处理大部分国外服务。
- IP 分流(包括 GEOIP):处理那些无法通过域名识别的流量。
- 兜底规则 (MATCH):处理所有漏网之鱼。
高级技巧:使用 Rule Providers 实现高效管理
如果你的规则文件长达几千行,管理起来将是噩梦。Clash.Meta 引进了 rule-providers 概念,允许你引用外部的规则文件(Rule Sets)。
rule-providers:
google:
type: http
behavior: domain
url: "https://raw.githubusercontent.com/.../google.yaml"
path: ./ruleset/google.yaml
interval: 86400
rules:
- RULE-SET,google,Proxy
- GEOIP,CN,DIRECT
- MATCH,Final
使用 Rule Providers 的好处:
- 自动更新:你可以引用社区维护的高质量规则库(如 LoyalSoldier 的规则集),Clash 会根据
interval自动下载更新。 - 保持配置整洁:你的主配置文件只需要定义几个大的策略组和引用几条
RULE-SET,非常易于阅读。 - 性能更佳:内核会对这些规则集进行专门的索引优化。
DNS 与规则的微妙关系
许多人疑惑:为什么我写了 GEOIP,CN,DIRECT,但访问某些国内网站还是很慢?
这通常涉及到 DNS 解析。在 Fake-IP 模式下,Clash 会立即返回一个伪造的 IP 给浏览器,然后在内部并行进行 DNS 解析。如果你的 DNS 配置不当,导致解析一个国内域名却返回了一个国外的 IP 地址,那么 GEOIP,CN 规则就会失效。
nameserver 中包含可靠的国内 DNS(如 223.5.5.5),并正确设置 fallback 逻辑。
常见问题与调试方法
1. 规则匹配了但没生效?
检查是否有更靠前的规则已经拦截了该请求。在 Clash 控制面板(如 Yacd 或 MetaCubeX)的"连接"标签页中,你可以实时查看到每一条连接的具体匹配过程,这是调试规则的"金钥匙"。
2. 为什么需要域名分流而非全靠 IP?
现代大型互联网服务(如 CDN)可能在不同国家拥有相同的 IP 段。如果仅靠 IP,可能导致路由不稳定。域名分流在应用层进行判断,更加精准。
3. 规则冲突怎么办?
遵循"越具体越靠前"的原则。例如 DOMAIN,test.google.com,DIRECT 应该放在 DOMAIN-SUFFIX,google.com,Proxy 之前。
实战案例:一个理想的规则配置模板
下面是一个基于最佳实践的规则配置片段,兼顾了性能与精准度:
rules:
# 1. 局域网直连
- DOMAIN-SUFFIX,local,DIRECT
- IP-CIDR,192.168.0.0/16,DIRECT
- IP-CIDR,10.0.0.0/8,DIRECT
- IP-CIDR,172.16.0.0/12,DIRECT
- IP-CIDR,127.0.0.0/8,DIRECT
# 2. 核心服务特殊分流
- DOMAIN-SUFFIX,apple.com,AppleServices # 苹果服务走特定组
- DOMAIN-SUFFIX,netflix.com,Streaming # 奈飞走解锁组
# 3. 使用 Rule Sets 管理大部分分流
- RULE-SET,proxy,Proxy
- RULE-SET,gfw,Proxy
# 4. IP 兜底
- GEOIP,CN,DIRECT
# 5. 全局兜底
- MATCH,FinalProxy
通过这种结构,你的网络请求将各司其职:国内流量通过 GEOIP,CN 规则走 DIRECT(直连),确保低延迟;已知被墙的服务通过 RULE-SET 走 Proxy(代理);而所有未知流量则通过 MATCH 走 FinalProxy 以确保连通性。
规则分流并非一劳永逸,随着网络环境的变化,定期更新规则库和调整自己的策略组是保持流畅上网体验的关键。
希望这篇指南能帮助你构建出更完美的 Clash 配置。记住,真正的自由来自于对每一个请求的精准掌控。
结语:从手动配置到智能路由
当你掌握了规则分流的精髓,Clash 就不再仅仅是一个代理工具,而是一个私人的智能网络调度中心。虽然初期的配置可能需要花费一些精力,但一旦构建完成,它带来的丝滑体验是任何传统 VPN 都无法比拟的。
相比于折腾复杂的 YAML 文件,如果你追求更简单、更现代的使用体验,选择一款内核更新及时、界面友好的客户端同样重要。