Clash 的规则革命:定义现代代理的控制中枢
以声明式规则与策略组终结单点代理时代,为中文互联网刻下通用的网络分流架构标准
第一幕 · 时代困局:单点管道的荒蛮泥潭与调度之渴
2017 至 2018 年间,中文互联网的抗审查对抗进入了高烈度的新阶段。随着 Shadowsocks 原作者退场以及 VMess 等新型加密协议的爆发,可用节点的类型与数量急剧增多。
普通用户的连接诉求发生了质的飞跃:人们不再仅仅满足于“有一条线路能艰难连通海外”,而是往往同时持有来自不同地区、不同延迟且可用性时常波动的数条乃至数十条线路。
然而,当时的软件生态却严重滞后。老旧的 PAC(代理自动配置)脚本与粗糙的 IP 规则早已无法支撑复杂的多节点调度。
用户若想流畅看视频、查阅海外学术论文或玩外服游戏,必须在不同的客户端界面间频繁手动切换本地监听端口与系统设置。一旦当前选中的单一节点发生丢包故障,整个网络连接瞬间中断。
更残酷的是,开发者的命令行终端、无系统代理感知的游戏与底层服务,依然被困在无差别的直连或全局代理两难中。
当时少数商业软件在苹果闭源生态展现了规则分流的雏形,但在开源跨平台的主流世界中,始终缺少一个轻量、统一、能将多协议聚合调度且代码透明的现代引擎。
第二幕 · 创世破晓与 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]
第六幕 · 时代余响与永恒基石:最后的道别与不可磨灭的范式
整整五年时间,中文互联网的抗审查与网络分流生态,几乎都在 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]