Clash 开源生态梳理:内核、客户端与规则集的关系

Clash 相关的仓库数量多、名字又彼此接近,把内核、图形客户端和规则集混为一谈是常见的起点。这篇按三层结构拆开讲:每一层由谁维护、什么时候停更、配置里的字段到底由哪一层解析,最后给出一份判断某个仓库是否还值得关注的检查清单。

三层结构:内核、客户端与规则集

Clash 生态里的项目可以归成三层:内核负责解析配置、建立连接、执行分流,是唯一真正处理流量的部分;客户端提供窗口、托盘、订阅管理与进程守护,本身不解析规则;规则集与数据文件只是名单,由内核在运行时读取。三层之间通过两种文件交互——一份 YAML 配置,和一批规则数据。

分层的意义在于定位问题。订阅更新失败、连接建立不了、某些域名走错分支,这三类故障分别落在客户端、内核、规则集上。先判断故障属于哪一层,再去对应的仓库找答案,比在客户端里反复点开关有效得多。

先记住一条对应关系

配置能不能跑起来由内核决定,界面好不好用由客户端决定。同一份配置在 A 客户端正常、在 B 客户端报错,先对比两者内置的内核名称与版本,而不是怀疑配置写错了。

内核主线:原版 ClashClash Premium 与 mihomo

原版内核与它的维护终点

原版内核指 Dreamacro/clash,Go 编写。现在通用的 proxiesproxy-groupsrules 这套 YAML 结构就是它定下来的,所有客户端读取的配置格式都源自这里。2023 年 11 月前后,原版内核停止更新,仓库转为只读,同一时期 Clash for Windows 也从 GitHub 下线。

它的能力边界需要记清楚:不支持 rule-providersproxy-providerstun,出站协议以 Shadowsocks、VMess、Trojan、Snell 为主,规则类型集中在 DOMAIN、DOMAIN-SUFFIX、IP-CIDR、GEOIP、MATCH。配置里只要出现 tun: 字段,原版内核会直接报错退出。

Clash Premium:闭源二进制,随主线一起下线

Clash Premium 是原作者发布的闭源免费内核,补上了 tunscriptrule-providersproxy-providers 四项能力,一度是 macOS 上 TUN 模式的主要选择。它的分发随原版主线一起停止,现在提到它只剩历史价值:教程里如果写「请使用 Premium 内核」,那份文档大概率停在 2023 年之前。

Clash.Meta 与 mihomo:当前的事实主线

MetaCubeX 维护的 Clash.Meta 以原版为基底补齐协议与配置能力,2024 年初更名为 mihomo,仓库地址为 MetaCubeX/mihomo,可执行文件名与默认配置目录同步改为 mihomo。目前仍在更新的客户端,内置内核基本都是它或它的下游。

相对原版,mihomo 的增量集中在四块:

  • 出站协议:VLESS、Hysteria、Hysteria2、TUIC、WireGuard、SSH、ShadowTLS;
  • 配置能力:sub-rule、逻辑规则(AND / OR / NOT)、listenerssnifferfind-process-modegeox-url
  • 规则集格式:除 YAML 与 text 外,支持体积更小、加载更快的 mrs 二进制格式;
  • 数据文件:除 geoip.dat 外可用 geoip.metadb,支持按 ASN 匹配。

兼容方向是单向的:原版能跑的配置基本可以直接放到 mihomo 上运行,反过来不成立。迁移时先用 mihomo -t -f config.yaml 校验一遍,哪些字段超纲一目了然。

内核能力对照(按配置字段)
配置项原版 ClashClash Premiummihomo
proxies / proxy-groups / rules支持支持支持
rule-providers / proxy-providers不支持支持支持
tun(虚拟网卡)不支持支持支持
script(JavaScript 覆写)不支持支持支持
VLESS / Hysteria2 / TUIC不支持不支持支持
逻辑规则 / sub-rule / listeners不支持不支持支持
mrs 规则集格式不支持不支持支持

客户端层:谁在维护,谁停在 2023 年

客户端不定义配置格式,只决定三件事:内置哪个内核、配置文件放在哪、界面上暴露哪些开关。所以选客户端的第一件事是看内核来源,第二件才是界面习惯。

常见客户端与内置内核
客户端平台内置内核状态
Clash Verge RevWindows / macOS / Linuxmihomo活跃
FlClashWindows / macOS / Linux / Androidmihomo活跃
Clash NyanpasuWindows / macOS / Linuxmihomo维护中
ClashMetaForAndroidAndroidmihomo活跃
OpenClashOpenWrtmihomo活跃
Clash for Windows 0.20.39Windows原版内核2023 年 11 月停更
ClashX / ClashX PromacOS原版内核 / Premium停更
Clash for AndroidAndroid原版内核停更

Clash Verge 原仓库停更后由社区接手为 Clash Verge Rev,内核换成 mihomo,订阅管理与 profile 的组织方式延续下来。桌面端如果还在用 Clash for Windows,换到基于 mihomo 的客户端是改动最小的一步:YAML 本身不用动,把配置重新导入一次即可。

iOS 是另一条路径

iOS 上没有直接复用 Clash 内核的客户端。App Store 上的 Stash 一类应用是自己实现规则引擎,只读取 Clash 风格的 YAML。「iOS 能导入 Clash 配置」说的是格式兼容,不是内核相同。判断方式很直接:tunscriptrule-providers 这些字段在 iOS 上支持到什么程度,以各 App 自己的文档为准,不能拿桌面端的经验直接套。

配置目录:内核默认值与客户端托管

内核单独启动时,原版默认读取 ~/.config/clash/,Windows 下展开为 %USERPROFILE%\.config\clash\;mihomo 改为 ~/.config/mihomo/。带界面的客户端通常接管这件事,例如 Clash Verge Rev 把 profile 与规则缓存放在自己的应用数据目录(Windows 下为 %APPDATA%\io.github.clash-verge-rev.clash-verge-rev\),覆盖安装不会清掉订阅。排查问题时,先确认内核实际读的是哪份文件,比反复检查 YAML 更有效。

规则集与数据文件:更新最频繁的一层

规则集是纯名单,不含任何网络实现。内核通过 rule-providers 拉取名单并用 RULE-SET 引用,或者通过 GEOSITEGEOIP 读取编译好的 dat 文件。这一层更新最频繁,也最容易被误当成内核的一部分。

常用的几个仓库:

  • Loyalsoldier/clash-rules:按 domain 与 ipcidr 分组的 rule-provider,release 分支提供 reject.txtdirect.txtproxy.txtgfw.txtcncidr.txt 等文件,可以直接写进 rule-providers
  • blackmatrix7/ios_rule_script:按服务拆分的规则集,路径形如 rule/Clash/<服务名>/<服务名>.yaml,流媒体与 AI 服务的细分名单基本都能找到;
  • MetaCubeX/meta-rules-dat:为 mihomo 编译的 geosite.datgeoip.datgeoip.metadbcountry.mmdb,同时提供 mrs 格式的单条规则集,上游数据来自 v2fly 的 domain-list-community;
  • ACL4SSR/ACL4SSR:以 ACL4SSR_Online.ini 为代表的规则模板,通常配合订阅转换工具使用;
  • tindy2013/subconverter:把非 Clash 格式的订阅链接转换成 Clash YAML,只做格式转换,不参与运行。
rule-providers:
  reject:
    type: http
    behavior: domain
    format: yaml
    url: "https://raw.githubusercontent.com/Loyalsoldier/clash-rules/release/reject.txt"
    path: ./ruleset/reject.yaml
    interval: 86400
  cn-domain:
    type: http
    behavior: domain
    format: mrs
    url: "https://github.com/MetaCubeX/meta-rules-dat/raw/meta/geo/geosite/cn.mrs"
    path: ./ruleset/cn.mrs
    interval: 86400

rules:
  - RULE-SET,reject,REJECT
  - RULE-SET,cn-domain,DIRECT
  - GEOSITE,geolocation-!cn,PROXY
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

这段配置里,format: mrs 只有 mihomo 能读;interval: 86400 的单位是秒,即每 24 小时检查一次名单更新。rules 段按从具体到宽泛的顺序排列,命中即停,最后一条 MATCH 兜底,这也是判断一份配置是否完整的最低要求。

GEOSITE / GEOIP 与 RULE-SET 的取舍

  • GEOSITEGEOIP 读本地 dat 文件,匹配在内存中完成,速度快,代价是整包体积大、更新粒度是整份数据库;
  • RULE-SET 按 provider 拉取单个名单,粒度细、可替换,代价是每个 provider 一次 HTTP 请求与一份本地缓存;
  • mihomo 里 geodata-mode: true 时 GEOIP 规则读 geoip.dat,默认走 country.mmdb;配合 geox-url 可以把数据源指向镜像地址,避免下载失败。

规则集与内核是两条更新线

规则集仓库停更不会让内核报错,只会让新域名走错分支;内核升级也不会自动替换你写死的规则集地址。与其依赖订阅每次自动更新,不如每季度看一眼所引用仓库的最近提交时间。

配置兼容性:一份可执行的检查顺序

  1. 先看内核名与版本。客户端设置里显示 mihomoClash.Meta 的属于 Meta 分支;只写 Clash、更新时间停在 2023 年的,是原版内核。
  2. 再查高阶字段。配置里出现 tunrule-providersproxy-providersscriptlistenerssub-rule 中任意一项,原版内核就会直接报错退出。
  3. 用内核自带的校验参数跑一遍:mihomo -t -f config.yaml 只解析不启动,原版内核同样支持 -t
  4. 读日志里的第一条错误。unsupported proxy type 指向协议,unsupported rule type 指向规则,两者都是内核版本问题,改配置写法没有用。
  5. 最后看端口。确认 mixed-port(常见写法 7890)与 external-controller(常见写法 127.0.0.1:9090)没有被占用;能打开面板说明内核已经正常启动,剩下的问题都在规则层。

别用「能导入订阅」判断兼容性

导入只验证 YAML 语法能不能解析。tun、协议类型、规则类型这些字段是否被内核识别,要等内核真正启动才会暴露出来。

该关注哪个仓库

按使用场景对应到具体仓库:

  • 桌面端日常使用:关注客户端自己的 release 节奏,内核更新跟着客户端走;需要单独升级时,在客户端的设置里找到内核版本区块手动更新。
  • 需要 TUN、VLESS、Hysteria2 或逻辑规则:以 MetaCubeX/mihomo 仓库与它的官方文档为准,配置字段以文档为准,不要以旧教程为准。
  • 路由器:OpenWrt 用 OpenClash,或通过 SSH 部署 ShellClash,两者内置的都是 mihomo。
  • 分流准确性:Loyalsoldier/clash-rules 负责按需拉取的名单,MetaCubeX/meta-rules-dat 负责 dat 与 mrs 数据,这两个仓库的提交时间决定了新域名能不能被正确分流。
  • 订阅格式转换:subconverter 或 Sub-Store,只做格式转换,不参与运行。

判断一个 Clash 相关仓库是否还值得关注,看三点就够了:最近一次提交时间、README 里写明的内核依赖、issue 区是否还有维护者回复。三层结构里任何一层停更,影响范围都只落在这一层——内核停更影响协议与配置字段,客户端停更影响系统集成与界面,规则集停更影响分流准确度。把这三件事分开看,就不会因为某个客户端下线而怀疑整份配置作废。

下载Clash