mihomo(Clash Meta)内核特性与原版 Clash 的区别
mihomo 内核相对原版 Clash 多了什么:新协议支持、规则增强、性能差异与迁移时的注意事项。一篇讲清两个内核的关系与取舍。
两个内核是什么关系
原版 Clash 由 Dreamacro 用 Go 语言编写,以 GPL-3.0 协议开源。2023 年 11 月,作者归档并删除了仓库,项目停止维护,版本号永远停在 v1.18.0。开源版提供 HTTP 与 SOCKS 入站、Shadowsocks / ShadowsocksR / VMess / Trojan / Snell 出站,以及一套基础分流规则;TUN 模式和脚本规则只出现在闭源的 Premium 版里,没有随开源版发布。
mihomo 是社区在原版代码上继续开发的分支,最初叫 Clash.Meta,2023 年底更名为 mihomo,由 MetaCubeX 组织维护,同样以 GPL-3.0 开源,保持持续迭代。两者的关系可以概括成一句话:原版是停更的基线,mihomo 是接过的接力棒。
落到客户端上:本站下载页收录的 Clash Verge Rev、Clash Nyanpasu、FlClash、ClashX Meta 等客户端全部内置 mihomo;而 Clash for Windows 内置的是基于原版的闭源 Premium 内核,已随客户端一起停止更新。选客户端时,内核新旧是比界面更要紧的分水岭。
协议支持:出站类型差了一代
原版开源 Clash 支持的出站协议清单在 2023 年之后再没变化:Shadowsocks、ShadowsocksR、VMess、Trojan、Snell、SOCKS5、HTTP。mihomo 在此之上补上了近三年新出现的协议:
- VLESS,含 XTLS Vision 流控与 Reality 传输伪装;
- Hysteria 与 Hysteria2,基于 QUIC 的拥塞控制协议;
- TUIC,QUIC 系的另一种实现;
- WireGuard,可直接对接标准 WireGuard 服务端;
- SSH、AnyTLS 等较新的出站类型。
| 出站协议 | 原版 Clash | mihomo |
|---|---|---|
| Shadowsocks / ShadowsocksR | 支持 | 支持 |
| VMess | 支持 | 支持 |
| Trojan | 支持 | 支持 |
| Snell | 支持 | 支持 |
| VLESS(Reality / XTLS Vision) | 不支持 | 支持 |
| Hysteria / Hysteria2 | 不支持 | 支持 |
| TUIC | 不支持 | 支持 |
| WireGuard | 不支持 | 支持 |
实际影响很直接:订阅里出现带 reality 参数的 vless:// 节点、或 hysteria2:// 开头的节点时,原版内核无法解析,这批节点会在列表里整批消失;同一份订阅导入 mihomo 客户端后可以全部识别。现在新发的机场订阅大多按 mihomo 格式生成,这是换内核最常见的触发原因。
规则系统:从静态清单到规则集
原版 Clash 的规则是写在配置里的一条条静态条目,类型有 DOMAIN、DOMAIN-SUFFIX、DOMAIN-KEYWORD、GEOIP、IP-CIDR、MATCH 等。想更新一份广告拦截清单,只能整份替换配置文件。
mihomo 把规则系统扩成了三层:
- RULE-SET 规则集:通过 rule-providers 引用远程或本地的规则文件,behavior 分 domain、ipcidr、classical 三种,配合 interval 字段定时自动更新,不用再手动替换配置;
- GEOSITE 站点分类:开启 geodata-mode 后,可用 GEOSITE 规则按站点分类库匹配,粒度比按国家划分的 GEOIP 细得多;
- 逻辑规则与子规则:AND、OR、NOT 可以把多个条件组合成一条规则,SUB-RULES 让命中某条件的流量进入第二套规则链再做一次分流。
一段典型的 mihomo 规则配置长这样:
rule-providers:
adblock:
type: http
behavior: domain
url: "https://example.org/rules/adblock.yaml"
path: ./ruleset/adblock.yaml
interval: 86400
rules:
- RULE-SET,adblock,REJECT
- GEOSITE,category-ads-all,REJECT
- AND,((NETWORK,UDP),(DST-PORT,443)),REJECT
- MATCH,PROXY
另外 mihomo 内置了 sniffer 嗅探器:对只有目标 IP 的连接嗅探 TLS SNI 或 HTTP Host,把域名还原出来再重新走一遍规则匹配,解决应用直连 IP 绕过域名规则的老问题。原版内核没有对应能力。
性能与资源占用
两个内核同为 Go 编写,单连接转发性能在同一量级,日常浏览网页感知不到差别。差异体现在长期维护带来的细节上:mihomo 提供 tcp-concurrent 并发拨号、unified-delay 统一延迟测试口径,以及更细的内存回收调优,并且持续修复新版 Windows 与 macOS 上的兼容问题。
代价是功能变多之后内存基线略高。尤其挂载多个 behavior 为 classical 的规则集时,占用会明显上升;domain 与 ipcidr 行为的规则集内部做了索引优化,占用低得多。规则集选型时优先用前两种,是控制内存的有效手段。
原版内核自 2023 年起没有任何修复与更新。在新系统上遇到的兼容问题没有官方出路,唯一的解法是换用仍在维护的内核。TUN 模式也是同理:原版开源代码里根本没有 TUN,mihomo 内置了 TUN 并提供 system、gvisor、mixed 三种栈可选,这也是很多用户迁移的直接动机。
迁移到 mihomo 要改什么
配置结构大体兼容:port、mixed-port、proxies、proxy-groups、rules 的写法两边一致,多数旧配置可以直接跑起来。需要动手改的有几处:
- DNS 增强模式:新版 mihomo 移除了 redir-host,只保留 fake-ip,旧配置里的 enhanced-mode: redir-host 要改成 fake-ip;
- 节点字段:proxies 里的 interface-name 与 routing-mark 已被移除,写了会在启动时报警告甚至被拒绝,直接删掉即可;
- 地理数据库:mihomo 默认使用自己的 geoip 数据文件,支持 geo-update-interval 自动更新;要用 GEOSITE 规则需另行开启 geodata-mode;
- 客户端私有字段:Clash for Windows 配置里的 cfw-* 字段属于客户端私有,换客户端时不需要带走。
订阅方向是单向顺畅的:新协议节点(VLESS Reality、Hysteria2)只会出现在 mihomo 格式的订阅里;而旧的 Clash 订阅在 mihomo 上基本原样可用。也就是说,换内核不会弄丢现有订阅,只会解锁更多节点。
迁移前先备份
换内核或换客户端之前,备份旧配置目录,尤其是自己改过的规则、覆盖配置与本地规则文件。新客户端首次导入后再逐项核对 DNS 与规则段。
怎么确认自己跑的是哪个内核
三处可以查证:
- 客户端界面:打开设置或关于页查看内核版本。停在 2023 年的 v1.18.0 是原版;版本号带 Meta 或 mihomo 字样、且日期持续更新的是 mihomo。
- 外部控制器:浏览器访问 http://127.0.0.1:9090/version,返回的 JSON 里 meta 字段为 true 即 mihomo,例如
{"version":"v1.19.0","meta":true}。 - 命令行:直接执行内核文件加 -v 参数,输出以 Mihomo Meta 开头的就是 mihomo。
结论:新装机直接选内置 mihomo 的客户端,本站下载页收录的现役客户端都满足这一点。旧机器上的原版内核可以留作对照,但新协议、新规则语法、新系统适配都只在 mihomo 一侧更新。