Dreamacro

规则与核心

Clash 创始作者 · 2018 — 2023

又名 D大 · 猫咪作者

Clash 的规则革命:定义现代代理的控制中枢

以声明式规则与策略组终结单点代理时代,为中文互联网刻下通用的网络分流架构标准

第一幕 · 时代困局:单点管道的荒蛮泥潭与调度之渴

2017 至 2018 年间,中文互联网的抗审查对抗进入了高烈度的新阶段。随着 Shadowsocks 原作者退场以及 VMess 等新型加密协议的爆发,可用节点的类型与数量急剧增多。

普通用户的连接诉求发生了质的飞跃:人们不再仅仅满足于“有一条线路能艰难连通海外”,而是往往同时持有来自不同地区、不同延迟且可用性时常波动的数条乃至数十条线路。

然而,当时的软件生态却严重滞后。老旧的 PAC(代理自动配置)脚本与粗糙的 IP 规则早已无法支撑复杂的多节点调度。

用户若想流畅看视频、查阅海外学术论文或玩外服游戏,必须在不同的客户端界面间频繁手动切换本地监听端口与系统设置。一旦当前选中的单一节点发生丢包故障,整个网络连接瞬间中断。

更残酷的是,开发者的命令行终端、无系统代理感知的游戏与底层服务,依然被困在无差别的直连或全局代理两难中。

当时少数商业软件在苹果闭源生态展现了规则分流的雏形,但在开源跨平台的主流世界中,始终缺少一个轻量、统一、能将多协议聚合调度且代码透明的现代引擎。

整个中文网络技术社区,正屏息以待一场真正的架构破局。[2][17][18]

第二幕 · 创世破晓与 YAML 革命:Go 语言规则引擎破晓

2018 年 6 月 10 日 22:28(UTC+8),开发者 Dreamacro 推送了仓库的根提交;紧接着在 22:50,伴随着名为“Init: first commit 🎉”的提交,基于 Go 语言的全新项目 Clash 正式面世。

在初代 README 中,Dreamacro 写下了改变中文网络生态历史的立项宣言:

“A rule based proxy in Go.”(用 Go 语言编写的基于规则的代理)。

创世之初,Clash 的配置文件还保留着基于 ini 格式的极简形态,并在文档中直言致敬了先行的分流灵感。

但 ini 扁平松散的键值结构,很快无法承载多协议嵌套与深度策略调度的野心。10 月 2 日,Dreamacro 做出了关键的架构决断,推送了历史性的断代提交:

“Break Change: use yml, which is easier to parse, as the config format”(破坏性变更:改用更易解析的 yml 作为配置格式)。

这一转轨彻底改写了行业规范。Dreamacro 创造性地抽象出了三层解耦架构:出站代理(Proxies)、代理策略组(Proxy Groups)与分流规则(Rules),并统一由层次分明、极具可读性的 YAML 声明式语法驱动。

同时,项目展现出非凡的开源包容度,模块化吸收了 riobard/go-shadowsocks2 与 v2fly/v2ray-core 的精髓,将多协议适配收敛进统一的隧道模型中。[3][4][9][19]

第三幕 · 规则宇宙与弹性自愈:策略组体系的工程交响

Clash 最具统治力的创新,在于构建了一个具备自我愈合能力的“策略组”(Proxy Groups)宇宙。

2018 年 6 月 16 日,Dreamacro 提交了 url-test 策略组支持。核心能够周期性向目标测速地址发送极轻量的 HTTP 请求,毫秒级探测各节点延迟并自动锁定最优线路。

紧接着,7 月 12 日引入 select 手动策略组与路由选择器;9 月 26 日加入 fallback 策略组,为代理链路赋予了主备故障自动倒换的容灾冗余。

2019 年 2 月 15 日,load-balance 策略组加入矩阵,支持按 eTLD+1 域名散列或轮询机制在多出口间分摊负载。

与策略组协同作战的,是一套严密的层级流水线过滤语法:从顶级域名后缀(DOMAIN-SUFFIX)、关键词(DOMAIN-KEYWORD)到地理位置(GEOIP)乃至精准 IP-CIDR 与最终兜底(MATCH)。

流量在进入内核的瞬间,便在毫秒级内被计算并导向最合适的管道。普通用户即便遭遇某条国际海缆波动或单点故障,也再也不会察觉到网页掉线与连接中断。[5][7][8][10][18]

第四幕 · 网络层深水区:Fake-IP 斩断污染与 External Controller 接口解耦

要让代理从“应用层工具”跃迁为“系统级中枢”,必须直面 DNS 污染与建连延迟的深水区。

传统代理模式下,客户端必须先向上游发起 DNS 解析才能判定分流策略,极易遭遇劫持污染且凭空增加一次跨大洋的往返延迟(RTT)。

2019 年 5 月 3 日,Dreamacro 提交了革命性的 Fake-IP 机制。基于 RFC 3089 标准,Clash 大胆地在本地直接为域名分配私有保留 IP(198.18.0.0/16),立刻完成操作系统的本地 TCP 握手。

当数据包真正流入内核隧道后,才由远端节点发起权威解析。这一设计不仅将握手延迟削减至微秒级,更从根源上铲除了本地 DNS 污染的土壤。

与底层网络攻坚同样深谋远虑的,是控制接口的彻底剥离。早在 2018 年 6 月 18 日——立项仅 8 天后,Dreamacro 便在核心中植入了 External Controller。

内核仅专注于底层数据包路由,而将实时流量、日志、连接管理、节点测速与配置重载全面暴露为标准化的 HTTP RESTful 与 WebSocket API。

这一彻底的接口解耦如同投下一枚引信,直接引爆了中文桌面与移动端图形客户端的大爆发:Fndroid 的 Clash for Windows、yichengchen 的 ClashX、Kr328 的 Clash for Android 与 zzzgydi 的 Clash Verge 竞相涌现,一个围绕 Clash 运转的浩瀚生态帝国就此成型。生态开发者更反哺核心代码——例如 Kr328 亲手为 Clash 核心提交 UDP 进程解析修复(Commit 5212aaf),展现了开源协同的深厚合力。[11][6][15][22]

第五幕 · 风暴中心:Premium 演进、防掠夺博弈与 XTLS 架构防线

伴随生态繁荣而来的,是复杂的开源治理与边界博弈。

2019 年 10 月 18 日,为强化自由软件版权保护,Dreamacro 将项目开源许可正式切换为 GPL-3.0。

针对社区出现的不当商业滥用与闭源侵占,Dreamacro 团队做出了防御性调整:在持续维护开源核心的同时,于 2020 年 5 月推出了免费分发的闭源增强版 Clash Premium。

Premium 首次搭载了系统级 TUN 虚拟网卡设备驱动,并引入了动态加载外部规则的 Rule Provider 与可编程的 Script 脚本匹配引擎,实现了免手动设置系统代理的全局透明接管。

然而,在激进的技术浪潮面前,Dreamacro 对架构边界的克制也引发了激烈的社区争鸣。2020 年 9 月 12 日,面对社区在 Issue #896 强烈请求合入 XTLS 流控的呼声,Dreamacro 坚定地捍卫了核心的设计哲学。

在 Dreamacro 看来,Clash 的核心定位是基于规则的分流隧道中枢,传输层必须恪守通用的 TCP/UDP 抽象与透明连接边界;XTLS 在应用层强行穿透套接字并剥离 TLS 密文的特殊直通做法,破坏了核心既有的通用策略组调度、连接池与健康检查体系。

“我们不会为了单一协议的性能直通而打破整个核心的通用分流架构。”面对部分用户的非议,他坚守了架构的纯粹性;而这场工程哲学上的分歧,也间接催生了社区分支 Clash.Meta(Mihomo)在 2022 年独立扬帆起航。[12][13][14][16][21][20]

第六幕 · 时代余响与永恒基石:最后的道别与不可磨灭的范式

整整五年时间,中文互联网的抗审查与网络分流生态,几乎都在 Dreamacro 奠定的规则语言与架构体系之上生长繁衍。

2023 年秋,外部环境的风暴骤然降临,生态内的各个支柱项目相继陷入不可抗力的震荡之中。

2023 年 11 月 2 日 23:50(UTC+8),在第三方客户端仓库变动数小时后,Dreamacro 在官方 Telegram 频道 @clash_news 留下了最后的道别,文字宁静、坦荡而又饱含深情:

“I love you all. The project is officially discontinued. Repo will be deleted soon.”

(“我爱你们所有人。项目已正式终止维护,仓库即将被删除。”)。

2023 年 11 月 3 日,Dreamacro/clash 原始仓库正式从 GitHub 消失,宣告了一个传奇时代的落幕。

核心仓库虽然关闭,但他留下的技术火种早已遍布四野。既有社区分支 Clash.Meta(后更名 Mihomo)迅速接过了维护接力棒,新一代跨平台客户端继续在既有的架构轨道上奔跑。

从声明式 YAML 配置语法,到策略组路由语义,从 Fake-IP 理念到 External Controller API 规范——Dreamacro 在那个激荡年代亲手写下的每一行代码与架构规范,早已化作整个中文代理世界的通用数字宪章。[23][1][20]

代表作品与核心贡献

Clash (Open Source Core)

访问作品

基于 Go 语言的规则隧道核心,定义了现代策略组调度与声明式 YAML 分流语法标准

Clash Premium

访问作品

官方闭源增强版核心,引入了系统级 TUN 虚拟网卡模式、Rule Provider 与动态脚本调度支持

External Controller API

访问作品

基于 HTTP RESTful 与 WebSocket 的标准化外部控制接口,彻底解耦核心转发与前端交互

Mihomo (社区接续项目)

访问作品

由 MetaCubeX 社区在 Clash.Meta 基础上接续演进的现代规则代理核心,继承了 Dreamacro 的架构规范与分流语言

致敬开发者的坚守

代码或许归档,但火种永不熄灭。为推动网络对抗演进与底层工程突破的开拓者献上一份敬意。

单设备 1 小时内限致敬 1 次 · 匿名无感不收集隐私

编年大事记

提交 Clash 创世代码并确立基于规则的轻量设计

Dreamacro 推送根提交与首个功能提交,以“A rule based proxy in Go.”确立立项信条,首发支持基于 ini 语法的规则分流雏形。[3][4]

实现 url-test 自动延迟测速策略组

提交 url-test 代理组支持,通过定时向目标端点测速自动挑选最低延迟节点,奠定自愈网络基础。[5]

创立 External Controller RESTful API 接口

内置基于 HTTP RESTful 与 WebSocket 的外部控制器 API,实现代理内核与图形界面的彻底架构解耦。[6]

引入 select 手动节点策略组与规则路由器

实装 selector 策略组与分流规则路由器,完成出站代理、策略组与规则三层解耦的初步闭环。[7]

引入 fallback 故障自动主备倒换策略组

实装 fallback 策略组,按优先级定期探测并在首选节点不可用时毫秒级无感回落至备用节点。[8]

确立以 YAML 作为标准配置规范

推送破坏性架构升级,正式从 ini 迁移至 YAML 声明式配置,奠定中文代理生态通用的规则描述标准。[9]

引入 load-balance 策略组实现多出口负载均衡

新增负载均衡策略组,支持基于目标域名散列(eTLD+1)或轮询算法在多条代理链路上分摊流量。[10]

首创实装 Fake-IP DNS 解析机制

基于 RFC 3089 在本地分配 198.18.0.0/16 虚构保留私网 IP,彻底消解本地 DNS 污染并将握手延迟降至微秒级。[11][15]

开源许可证全面升级为 GPL-3.0

提交许可证变更,将 Clash 从早期的宽松 MIT 协议升级为具有强传染性的 GPL-3.0,加强开源代码产权保护。[12]

推出 TUN 模式预编译版本开启系统级透明接管

发布首个 TUN 模式预编译二进制标签,利用虚拟网卡设备驱动实现免配置系统代理的全局网络接管。[13]

正式设立 Clash Premium 闭源增强版

为遏制不当商业分发并探索高级网络特性,正式发布免费的 Clash Premium 核心,实装 TUN 设备、Rule Provider 与动态脚本。[14][16]

坚持通用架构边界并拒绝集成 XTLS

面对社区对新兴流控技术的呼声,Dreamacro 在 Issue #896 坚持分流架构纯粹性,拒绝引入深度侵入传输层的 XTLS,间接促成了社区 Meta 分支的诞生。[21][20]

社区开源分支 Clash.Meta 启动

开源社区成员创建 Clash.Meta(后更名为 Mihomo),继续推进开源规则核心演进。[20]

Clash 原始核心仓库被删除

在留下“I love you all. The project is officially discontinued. Repo will be deleted soon.”告别后,核心仓库于北京时间 11 月 3 日被删除。[1][23]

一手来源与考据

小传正文中的关键事实与时间点均基于以下公开一手记录或权威报道:

  1. [1]

    按北京时间记录:CFW 发布仓库于 11 月 2 日被删除,Clash Core 于 11 月 3 日被删除;区分删库与归档,不推断各项目行动之间的因果关系。

    https://github.com/net4people/bbs/issues/303#issuecomment-1792177030
  2. [2]

    记录作者公开项目、开源组织与历史足迹

    https://github.com/dreamacro
  3. [3]

    记录 2018-06-10 22:28:14 项目初始提交对象

    https://github.com/BackupTime/clash/commit/85327183459eb7e0cebe8f6ba12d6ebb56efd2ac
  4. [4]

    记录 2018-06-10 22:50:03 “Init: first commit 🎉”,初代 README 宣言与 ini 配置

    https://github.com/BackupTime/clash/commit/4f192ef575f987f6d30f4c9027f72e142ee248e6
  5. [5]

    记录 url-test 代理组支持引入,开启节点自动化测速调度

    https://github.com/BackupTime/clash/commit/6ffbb7c89ef8831dcbab863c9a803a24379bf3db
  6. [6]

    创世第 8 天引入 RESTful HTTP API 与 WebSocket 控制接口,奠定 GUI 解耦基石

    https://github.com/BackupTime/clash/commit/79e5338113787629817d95937976db832c6efd4c
  7. [7]

    记录 selector 与分流规则路由体系初版实现

    https://github.com/BackupTime/clash/commit/0eef9bbf5d86bbbd2626dfcef7830d4268e8271c
  8. [8]

    记录 fallback 策略组引入,赋予网络高可用容灾能力

    https://github.com/BackupTime/clash/commit/220e4f06080339f26f5529b614107973feb3c256
  9. [9]

    记录从 ini 切换至 YAML 语法的破坏性升级,定义中文代理通用规则语言

    https://github.com/BackupTime/clash/commit/5c7fa6b18bf88504a6133ae2cd2b396256e2aafe
  10. [10]

    记录负载均衡策略组实装,支持多链路流量分散调度

    https://github.com/BackupTime/clash/commit/c295c5e412b46bb0d735390e76ab84e560c9e245
  11. [11]

    基于 RFC 3089 引入 Fake-IP 地址池分配机制,消除本地 DNS 污染

    https://github.com/BackupTime/clash/commit/f352f4479e2e947b17f500b07af59b6571c472aa
  12. [12]

    核心开源许可证由 MIT 升级为 GPL-3.0,加强开源代码产权保护

    https://github.com/BackupTime/clash/commit/e5284cf647717a8087a185d88d15a01096274bc2
  13. [13]

    推出系统级 TUN 虚拟网卡接管,开启无需手动系统代理的透明分流

    https://github.com/BackupTime/clash/commit/6ce7b6ef835726ff0875f63cbbfeddc3975165ee
  14. [14]

    正式设立免费分发的 Premium 核心,引入 Rule Provider 与 Script 动态调度

    https://github.com/BackupTime/clash/commit/3638b077cdc57cfe84227b989cf2788513f05a65
  15. [15]

    详细阐述 Fake-IP 概念来源(RFC 3089)、198.18.0.1/16 保留私网分配与建连流程

    https://github.com/BackupTime/clash/blob/master/docs/zh_CN/configuration/dns.md
  16. [16]

    官方阐述为遏制不当商业分发设立免费 Premium 内核的背景及功能差异

    https://github.com/BackupTime/clash/blob/master/docs/zh_CN/premium/introduction.md
  17. [17]

    记录 Clash 早期的发布时间戳证据

    https://proxy.golang.org/github.com/%21dreamacro/clash/@v/v0.3.2.info
  18. [18]

    记录核心功能说明、GPL-3.0 许可证及上游致谢信息

    https://pkg.go.dev/github.com/Dreamacro/clash@v1.18.0
  19. [19]

    包含适配器层、规则模块与控制器 API 的完整 Go 源码备份

    https://proxy.golang.org/github.com/%21dreamacro/clash/@v/v1.18.0.zip
  20. [20]

    承接 Clash 架构并持续推进现代协议与跨平台支持的开源社区分支

    https://github.com/MetaCubeX/mihomo
  21. [21]

    记录作者关于恪守规则代理通用性、不破坏透明连接池的设计原则阐述

    https://github.com/Dreamacro/clash/issues/896
  22. [22]

    Commit 5212aaf 见证了移动端客户端作者与底层核心作者之间的紧密技术协同

    https://github.com/BackupTime/clash/commit/5212aaf445ecb7aa0482bdded8cb29a8f01b4152
  23. [23]

    记录作者在删除核心仓库前留下的“I love you all”告别留言

    https://t.me/clash_news/149
资料边界与事实声明

本文严格基于 Dreamacro/clash 历史代码提交记录(Git Commit SHA、Tag 时间戳与初版 README)、官方中文技术文档、公开 Release 归档、官方 Telegram 频道(@clash_news)广播及 Go 官方模块归档编写。对于仓库删除的外界背景与维护者的现实个人生活,本站恪守隐私红线与技术中立底线,绝不进行主观臆测或线下探寻;客观记录开源免费版 Core 与闭源增强版 Premium 的功能边界,以及核心与第三方客户端之间的协作脉络。

修订历史:
  • :首版编写,核验 GitHub 主页、Go Proxy 模块存档、Go Packages 记录与源码致谢。
  • :依据 Clash 真实 Git 提交历史全量审计,还原 2018-06-10 创世提交、External Controller 诞生、YAML 语法革命、Fake-IP 与策略组演进,扩充六幕非虚构戏剧纪传。
  • :完成代码库深度对账与已核验定稿:复核 2018-06-10 创世提交、ini 到 YAML 语法革命、External Controller 解耦、Fake-IP、Premium 演进、Kr328 等生态作者联动贡献及 2023-11-03 仓库删除历史事实。

发现人物信息不准确?

写明需要纠正的内容,可附相关链接。资料会在人工核验后更新。