Hako v1.19.30 正式开源:把驱动 Clash 的代理内核交给社区

Hako 在今天正式开源了。这个驱动 Clash 的 Apple 平台代理内核,以 GPL-3.0 协议放出了 v1.19.30 的源码与 SDK,仓库上线当天已经拿到 284 个 Star。

Hako 是什么

Hako 是 Clash 背后的代理内核,负责处理连接、DNS 与分流规则这些真正干活的部分。它基于 mihomo(Clash.Meta)的稳定上游 v1.19.30,并针对 Apple NetworkExtension 的内存限制、能效与系统边界做了适配调优,覆盖 iPhone、iPad、Mac 与 Apple TV 五个 Apple 平台 slice。

Clash 团队没有从零写一个内核,而是把久经考验的 mihomo 数据面整体搬进 Apple 的 Packet Tunnel 里:这是一个 hard fork,固定跟随 mihomo 稳定版(从不跟随 Alpha 版本)。按 mihomo 的 GPL 许可要求,非官方分支不能沿用 mihomo 这个名字,所以这个分支叫 Hako。

Hako 官方 Logo

为什么开源是件大事

代理内核处理你设备上的全部流量、DNS 查询与分流规则,这样的基础设施一旦成为黑盒,用户就只能选择相信厂商的承诺。代码公开后,任何人都可以审阅实现、核对构建产物、提交 Issue 或参与改进。

开源的边界也划得很清楚:Hako 只通过 Apple 公开的 NEPacketTunnelFlow 接口收发数据包,不依赖私有 API;状态、流量与日志走 App 私有的本机通道,不开放网络可达的控制器;内核本身不下载、不保存配置地址与凭据,配置始终由客户端管理。

真机数据:50 MiB 红线下的性能

iOS 给 VPN 类应用的内存上限只有约 50 MiB(系统 jetsam 机制,超限即杀进程),这是 iOS 代理工具最常见的崩溃根源。Hako 官方在 iPad Pro (M2) 真机上的实测数据:

  • 公网测速:下行 924 Mbps、上行 545 Mbps、延迟 5 ms,测速时内核内存仅 18.7 MiB
  • 30 分钟持续压力测试:传输 16.49 GB,0 掉线、0 丢包、0 崩溃,内核内存 38.5 MiB
  • 400 条并发连接:内存 39.6 MiB,保持在 50 MiB 预算之内

最容易压垮 iOS 代理内核的场景是「本端猛发上传、对端接收缓慢」,接收缓冲堆积会直接顶破内存红线。Hako 的处理方式是设置接收缓冲上限,把缓冲区满当作降速信号而不是崩溃理由,宁可放慢速度也保住连接。

内核能力与平台差异

Hako 继承了完整的 mihomo 数据面:

  • 协议:Shadowsocks、VMess、VLESS、Trojan、Snell、Hysteria2、TUIC、WireGuard、AnyTLS、SSH 等
  • DNS:隧道内解析,支持 DoH、DoT、DoQ、fake-IP、流量嗅探与按域名选择解析器
  • 分流规则:domain、IP-CIDR、GEOIP、GEOSITE、RULE-SET,以及 AND/OR/NOT 逻辑规则与子规则
  • 策略组:select、url-test、fallback、load-balance,带健康检查与远程 Provider

平台差异需要留意:macOS 支持按进程名、可执行路径和 UID 分流;受 Packet Tunnel 限制,iPhone、iPad 与 Apple TV 无法识别流量来自哪个 App,Hako 的选择是直接跳过按 App 分流功能,而不是伪造一个近似实现。

Clash 应用图标,底层由 Hako 内核驱动

对开发者意味着什么

Hako 以 Hako.xcframework 形式发布,静态链接整个内核,带 Objective-C API 与文档。开发者可以把它链进自己的 App 与 Packet Tunnel 扩展,构建 Clash/mihomo 兼容的 VPN 应用:内核负责搬流量,App 负责 UI、配置与签名。官方明确这是 pre-1.0 版本,API 已有互操作测试,但正式版本标签发布前都应按开发版对待。

内核不内置任何服务器、节点或订阅管理功能,配置与凭据完全留在开发者一侧。如果你在做一个网络工具,又不想自己啃 mihomo 的 Apple 适配,这基本是现成的地基。

上游与许可证

Hako 建立在 MetaCubeX/mihomo、Dreamacro/clash、SagerNet/sing-box、WireGuard 等开源项目的工作之上,官方文档明确表示项目与 MetaCubeX、SagerNet 无隶属或背书关系。许可证为 GPL-3.0:可以查看、使用、修改和再分发,分发衍生版本时须以相同协议继续开源。

仓库地址:TokenPLS/Hako,项目介绍与实测数据见 clash.md