Clash 开源生态全景:内核、GUI 客户端与规则项目之间的关系梳理
把内核项目、各平台 GUI 客户端、规则集与转换工具放进同一张关系图,说明谁依赖谁、哪些项目已归档、社区维护现状如何,帮助读者看懂生态再做选型。
生态地图:四类项目如何分层
搜索 Clash 相关资料时,经常会同时看到 Clash、Clash Meta、mihomo、ClashX、Clash Verge、subconverter、geoip 这些名字混在一起出现,新手很容易把它们当成互相竞争的软件去比较。实际上这些项目分属四个不同层级,各自负责不同工作,合起来才构成一套完整的分流代理方案。
第一层是内核,也就是真正处理网络连接、执行代理规则、维护连接池的后台进程,没有图形界面,只接受配置文件和 API 调用。第二层是 GUI 客户端,负责把内核包装成用户可以点击操作的应用,处理订阅拉取、节点切换、系统代理设置、TUN 网卡管理这些交互工作。第三层是规则集与地理数据库,提供域名与 IP 段的分类清单,供内核在分流时匹配使用。第四层是转换与面板工具,负责把不同格式的订阅统一转换成内核可读的配置,或者提供网页版的连接监控面板。
看懂这四层的依赖关系,就能明白为什么同一台电脑上可能同时装了客户端和内核两个进程,也能明白为什么换了一个客户端之后规则集文件却不用重新下载。
| 层级 | 作用 | 典型产物 |
|---|---|---|
| 内核 | 解析配置、执行分流、维持连接 | mihomo 可执行文件 |
| GUI 客户端 | 界面操作、订阅管理、系统集成 | Clash Verge、ClashX、FlClash |
| 规则与地理库 | 域名/IP 分类数据 | geosite.dat、geoip.dat |
| 转换与面板 | 格式转换、可视化监控 | subconverter、metacubexd |
内核演进链:从原版 Clash 到 mihomo
内核这条线是整个生态里变化最大的部分,弄清时间线能帮助判断当前该用哪个版本。
-
原版 Clash
由 Dreamacro 发起的最初版本,用 Go 语言实现,奠定了配置文件格式、代理组、规则分流这套基础模型。这个仓库已经处于归档状态,不再合并新功能,也不会修复新出现的兼容性问题,但它定义的配置语法仍被后续所有分支沿用。
-
Clash Premium
在原版基础上补充了部分闭源特性和更完整的规则语法,曾是一段时间内功能最全的分支,但更新节奏同样早已放缓,协议支持落后于新出现的传输方式。
-
Clash Meta
社区在原版停更后接手维护,补齐了 Vision、Hysteria、TUN 模式等新协议与新特性的支持,一度是更新最活跃的分支,大量 GUI 客户端底层切换到了这个版本。
-
mihomo
Clash Meta 后续更名延续的项目,仓库迁移、命名调整之后仍由原团队和社区持续提交代码,新增协议、修复漏洞、适配新系统版本的工作都在这里进行。当前主流 GUI 客户端底层内核基本都已切换或正在切换到 mihomo。
换句话说,查看一个客户端"用的是什么内核",本质上是在确认它接的是已经停止更新的老分支,还是仍在持续维护的 mihomo。这直接决定了新出现的代理协议能不能用、系统版本升级后是否还能正常触发网络扩展权限。
判断内核是否仍在维护,可以查看其发布记录里最近一次版本发布的时间间隔,以及提交历史是否仍有活跃改动,而不是只看仓库名字是否熟悉。
GUI 客户端谁在维护,谁已停更
GUI 客户端这一层的更新最容易被忽视,因为界面看起来照常能打开,但底层内核可能早已停止更新。以下是几类平台上的典型情况,具体版本以各项目发布页为准。
| 平台 | 客户端 | 维护状态 | 备注 |
|---|---|---|---|
| Windows | Clash for Windows | 已停止更新 | 早期主流选择,仓库已归档 |
| Windows / macOS / Linux | Clash Verge(及社区延续分支) | 持续更新 | 跨平台,底层已切换到 mihomo |
| macOS | ClashX | 更新缓慢 | 纯净版长期停留在旧内核 |
| macOS | ClashX Pro / ClashX Meta | 持续更新 | 接入 Meta 系内核,支持更多协议 |
| Android | Clash Meta for Android | 持续更新 | 官方安卓落地,支持 TUN 模式 |
| 跨平台 | FlClash | 持续更新 | Flutter 编写的多端统一界面 |
iOS 是一个特例:系统策略不允许分发未签名的可执行内核,因此 iOS 端的客户端多数是基于类似内核思路独立实现的应用,通过 App Store 上架,配置语法与 Clash 系兼容但并非直接复用同一份内核代码。选择 iOS 客户端时,应重点看它是否支持标准的订阅链接格式和规则语法,而不是纠结它是否"官方"。
一个实用的自检方法是打开客户端的关于页面或设置页,查找"内核版本"或"core version"字样,再和 mihomo 发布页的最新版本号做对比,差距过大往往说明客户端本身也很久没有更新过依赖。
规则集与转换工具:内核之外的必要拼图
内核只负责"按规则执行",规则从哪里来是另一套项目在解决。常见的规则集项目会把全球常用域名和 IP 段按地区、按服务类型分类打包成 geosite、geoip 格式的数据文件,内核加载后就能在配置里直接引用分类名称,而不需要自己维护成千上万条域名条目。这类项目通常按固定周期更新数据,更新记录里能看到具体新增或调整了哪些分类。
转换工具解决的是另一个问题:不同代理服务商提供的订阅链接格式并不统一,有的是标准协议链接的集合,有的是自定义 JSON。转换服务在中间做格式翻译,把原始订阅转成 Clash 系配置能直接读取的 YAML 结构,同时可以按需插入分组和规则模板。使用转换服务时建议只使用可信来源提供的转换接口,避免把订阅链接提交给来源不明的第三方站点。
面板工具则是给内核的 API 接口套上一层网页界面,用来查看当前连接、延迟测速、切换节点分组,大多数 GUI 客户端内置的"面板"页面本质上就是嵌入了这类开源面板项目的前端代码。
proxy-groups:
- name: 自动选择
type: url-test
proxies:
- 节点A
- 节点B
url: http://www.gstatic.com/generate_204
interval: 300
rule-providers:
reject:
type: http
behavior: domain
url: "规则集下载地址"
path: ./rules/reject.yaml
interval: 86400
上面这段配置片段展示了规则集是如何被内核引用的:内核并不关心规则数据具体如何生成,只按 rule-providers 里指定的地址周期性拉取并加载,这正是分层设计带来的好处——规则集项目可以独立更新,不需要等内核发新版本。
选型建议:按依赖关系倒推该装什么
理解了上面的分层关系后,选型问题就变成了三步排查,而不是在一堆项目名字里凭印象挑选。
- 先确认平台。不同系统能用的客户端范围不同,iOS 走 App Store 独立生态,桌面端和安卓有更多选择余地。
- 再确认内核。优先选择底层内核持续更新的客户端,可以在设置页或项目说明里核对内核版本号与更新时间。
- 最后确认规则来源。如果客户端自带的默认规则集更新缓慢,可以在配置里手动替换为仍在维护的规则集地址,这一步不需要更换客户端本身。
需要额外说明的是,内核归档不代表软件立刻无法使用,已发布的版本仍能运行,只是不会再获得新协议支持和安全修复。对于日常使用而言,更稳妥的做法是选用底层内核仍在活跃维护的客户端,这样遇到新出现的传输协议或者系统更新导致的兼容性问题时,能更快等到修复版本,而不必自己排查内核层面的问题。
更换客户端不会自动迁移订阅和规则文件,升级前建议先导出现有配置备份,再在新客户端里重新导入订阅链接。