📐 Rule System · 分流引擎

Clash Meta 规则分流机制详解

从静态规则到动态脚本,从本地文件到远程 Provider,深度拆解 Meta 内核的路由决策逻辑,覆盖 Rule Provider、策略组、Script 脚本、DNS 联动等全链路知识。

规则系统基础:Rule-Based Proxy

理解为什么需要规则分流,以及 Meta 如何处理 DIRECT、REJECT 与 Proxy 的优先级

Clash Meta 的核心是一个规则匹配引擎。当网络请求发起时,Meta 会按照配置文件中的规则列表,从上到下依次匹配请求的特征(域名、IP、GEOIP 等),一旦命中某条规则,便采用该规则指定的策略(DIRECT、REJECT 或某个代理组)来处理流量,不再继续匹配后续规则。

为什么需要分流?如果所有流量都走代理,国内网站访问会变慢,且浪费代理流量;如果全部直连,则无法访问受限内容。规则分流的意义就在于智能判断流量的目的地归属,让国内流量直连,国外流量走代理,广告或追踪域名直接拒绝,从而实现最优的网络体验。

三大基本动作:DIRECT(直连)表示流量不经过任何代理,直接由本地网络发出;REJECT(拒绝)则直接丢弃请求,常用于屏蔽广告或恶意域名;PROXY(代理)则将流量送入指定的代理组,由代理节点转发。此外,Meta 还支持 MIXED 等衍生动作,但核心逻辑依然围绕这三者展开。

优先级机制:规则匹配严格遵循配置中的书写顺序。通常我们会将精确匹配(如 DOMAIN)放在前面,模糊匹配(如 DOMAIN-SUFFIX、GEOIP)放在后面,最后使用 MATCH 兜底。Meta 还提供了 no-resolve 选项,避免对 IP 规则进行不必要的 DNS 解析,提升匹配效率。

理解规则匹配的“首次命中即停止”原则至关重要。这意味着如果你将一条宽泛的 GEOIP 规则放在精确域名规则之前,精确域名规则就可能被跳过。因此,编写规则时务必遵循从具体到宽泛的顺序。Meta 的日志功能可以帮助你实时观察每条请求命中了哪条规则,是调试分流的利器。

六大规则类型深度解析

每种规则在 Meta 内核中的工作逻辑、适用场景与编写建议

🔗 DOMAIN

精确匹配完整域名,例如 DOMAIN,example.com,PROXY。适用于需要精确控制的单一域名,匹配速度最快,不会产生误判。

精确匹配高优先级无 DNS 依赖

📁 DOMAIN-SUFFIX

匹配域名后缀及其所有子域名,如 DOMAIN-SUFFIX,google.com,PROXY 会同时匹配 www.google.com 和 mail.google.com。使用频率最高,适合批量处理同一站点的流量。

后缀匹配批量处理推荐

🌍 GEOIP

根据目标 IP 所属国家/地区进行分流,如 GEOIP,CN,DIRECT。依赖 Meta 内置的 GeoIP 数据库,适合将国内流量整体直连,但需注意 CDN 或 DNS 污染可能导致误判。

地理位置需 DNS 解析大规模分流

📡 IP-CIDR

基于 IP 段匹配,如 IP-CIDR,10.0.0.0/8,DIRECT。常用于处理内网 IP、特定服务器 IP 段,或配合 no-resolve 跳过域名请求。精确度高于 GEOIP,但需要维护 IP 列表。

IP 段精确控制可选 no-resolve

📦 RULE-SET

引入独立规则集合,支持本地文件和远程订阅。通过 RULE-SET,myrules,PROXY 调用,可实现规则的热更新与模块化管理。Meta 核心特性之一,极大简化了规则维护。

规则集热更新Provider

⚡ SCRIPT

使用 JavaScript 脚本动态判断流量走向。可以访问请求的完整上下文,实现按请求头、URL 参数、时间等复杂逻辑分流。这是 Meta 区别于传统 Clash 的终极武器。

动态脚本高级用法最大灵活性

Rule Provider:规则订阅与动态更新

告别手动维护规则文件,拥抱远程规则集的自动化生态

Rule Provider 是 Clash Meta 最具变革性的特性之一。它允许你将规则集合从主配置中抽离出来,以独立文件或远程 URL 的形式进行管理。这意味着你不再需要为更新几条广告拦截规则而重载整个配置,Meta 内核会按照设定的间隔自动拉取最新的规则集,实现热更新。

💡 核心优势:规则与配置解耦 —— 主配置文件只保留策略组和少量核心规则,大量分流逻辑交由 Provider 维护。这样不仅配置更清爽,也便于团队协作和社区规则复用。

Behavior 分类:classical、domain、ipcidr

每个 Rule Provider 都需要声明 behavior 字段,它决定了规则集内部的匹配模式:

  • classical:传统模式,规则集内每行就是一条完整的规则(包含类型、匹配内容、策略)。兼容性最好,但文件体积较大。
  • domain:域名模式,规则集内仅包含域名列表,Meta 会自动将其视为 DOMAIN-SUFFIX 处理。适用于纯域名分流,性能更高。
  • ipcidr:IP 段模式,规则集内为 CIDR 列表,自动按 IP-CIDR 匹配。适合处理 IP 黑白名单。

远程规则集与 GitHub 生态

目前社区已经构建了丰富的规则集生态。例如 ACL4SSR 规则体系提供了精细化的国内媒体、游戏、AI 服务等分类规则;MetaCubeX 规则集则专门为 Meta 内核优化,采用 domain 和 ipcidr behavior,加载速度极快。你可以直接在配置中引用这些规则集的原始 GitHub 链接,Meta 会自动下载并缓存到本地。

配置示例:

rule-providers:
  my_rules:
    type: http
    behavior: domain
    url: "https://cdn.jsdelivr.net/gh/MetaCubeX/meta-rules-dat@release/geo-lite.dat"
    path: ./ruleset/myrules.yaml
    interval: 86400

这里的 interval 单位为秒,86400 即每天更新一次。Provider 还支持 proxy 字段,允许通过代理更新规则集,避免因网络问题导致更新失败。

策略组:从手动选择到自动容灾

select、url-test、fallback、load-balance 四种策略的实战解析

🎛️

select

手动选择节点组。用户通过 Dashboard 或客户端界面从候选节点中挑选一个使用,适合需要固定出口的场景。

url-test

自动测速选择最快的节点。每隔一段时间对组内节点进行延迟测试,自动切换到延迟最低的节点,适合流量密集型任务。

🔄

fallback

故障转移策略。按顺序测试节点可用性,当高优先级节点失效时自动切换到下一个可用节点,保障连接不中断。

⚖️

load-balance

负载均衡策略。将流量随机分配到组内多个节点,避免单一节点过载,适合多任务并发下载场景。

这些策略组可以嵌套使用,例如在 select 组内引用另一个 url-test 组,实现“手动优先,自动备用”的复合逻辑。

Script 脚本:动态分流终极武器

用 JavaScript 编写自定义路由逻辑,超越静态规则的极限

Script 规则允许你注入一段 JavaScript 函数,在 Meta 内核匹配到该规则时执行。函数可以访问当前请求的域名、路径、请求头、源 IP 等全部上下文,并返回 "DIRECT""REJECT" 或某个代理组名称。这使得动态分流成为可能——例如“仅在晚上 8 点后将特定网站流量导入高速节点”。

注意:Script 脚本运行在内核沙箱中,无法访问文件系统或网络,确保安全性。同时,过多的 Script 规则可能影响性能,建议仅在必要时使用。

以下是一个简单示例,判断请求是否来自移动端 User-Agent,并分流到不同策略组:

function main(params) {
    const ua = params.request.headers['User-Agent'] || '';
    if (/Mobile|Android|iPhone/.test(ua)) {
        return 'mobile_group';
    }
    return 'desktop_group';
}

在配置文件中引用该脚本:

rules:
  - SCRIPT,script_name,path=./scripts/my_script.js,PROXY

Script 分流的强大之处在于它可以结合时间、随机数、请求参数等动态因素,实现诸如“按时间段切换出口”、“对特定 URL 参数走不同节点”等高级玩法,是 Meta 生态中最具创造性的部分。

规则分流与 DNS 的深度耦合

fake-ip 如何让域名规则更精准,DNS 污染如何影响 GEOIP

📥 构建你的分流规则体系

下载 Clash Meta 客户端,导入规则集,即刻体验智能分流的网络体验。

📦 浏览客户端下载资源
订阅配置教程 Verge 客户端使用 DNS 深入解析