Clash 原版、Meta 与 mihomo 内核版本差异对照
梳理 Clash 原版内核、Clash.Meta 与 mihomo 的演进关系,对比协议支持、规则类型、TUN 实现与配置字段差异,帮助判断现有配置能否直接沿用。
先看结论:Meta 与 mihomo 属于同一条演进路线
迁移时,先确认客户端实际运行的内核,再检查订阅格式。Clash.Meta 后来更名为 mihomo,不是两个互不相关的配置体系。大部分基础 Clash YAML 配置可以作为迁移起点;反过来,把使用 mihomo 扩展字段的配置交给旧版 Clash,并不能保证可用。
内核负责解析配置、匹配规则和建立代理连接;客户端负责界面、订阅管理、系统授权等操作。同一个客户端名称下,不同发行版本也可能打包不同内核。因此,“安装了 Clash”不足以判断某个协议是否受支持。
名称、维护状态与配置兼容范围
| 名称 | 定位与状态 | 迁移时重点检查 |
|---|---|---|
| Clash 原版开源内核 | 原始开源实现,原项目已停止维护 | 基础协议、基础规则;不要预期支持后续新增协议 |
| Clash Premium | 历史上的闭源增强发行版本,已停止维护 | TUN、规则提供器以及脚本等历史功能的迁移方式 |
| Clash.Meta | 基于 Clash 演进的分支,是 mihomo 的旧名称 | 旧版本是否支持配置里使用的新字段 |
| mihomo | 延续 Meta 路线,持续扩展协议、规则与网络能力 | 具体版本、系统平台以及客户端的覆写行为 |
怎样确认当前运行的内核
- 打开客户端的“关于”“内核”或启动日志页面。菜单名称由客户端决定,并不存在所有手机通用的固定路径。
- 记录内核名称、完整版本号、设备系统与客户端版本,不要只记录应用商店显示的版本。
- 桌面环境若能直接运行内核,可执行
mihomo -v查看版本。这个命令查询的是指定可执行文件,不代表手机应用内置的版本。
旧配置备注里的“Meta 专用”通常说明它依赖增强能力,并不表示必须寻找名为 Meta 的旧安装包。判断标准应当是目标 mihomo 版本是否支持所用字段,而不是名称是否一致。
协议差异:节点导入成功不等于能够连接
协议是客户端与代理服务器之间的通信约定。原版 Clash 常见配置包括 Shadowsocks、VMess、Trojan、SOCKS5 和 HTTP 代理。mihomo 在这条基础上扩展了 VLESS、Hysteria2、TUIC、WireGuard 等支持,但具体能力仍与内核版本和平台有关。
新协议还要核对传输参数
- VLESS 与 Reality:VLESS 是协议,Reality 是相关 TLS 安全机制。只看到
type: vless还不够,还要检查服务端要求的传输方式、servername、Reality 公钥等参数。 - Hysteria2 与 TUIC:两者都涉及基于 UDP 的传输。网络屏蔽 UDP 时,换成支持协议的内核也不能解决底层连通性问题。
- Shadowsocks:除了协议名称,还要核对
cipher加密方法。较新的方法不能仅凭“都是 SS 节点”就假定旧内核支持。
遇到“不支持的代理类型”时,先看配置中的 type 和内核版本。遇到握手失败或超时,则继续检查服务器地址、端口、设备时间、认证参数和网络条件。不要把所有连接失败都归为内核不兼容,也不要用关闭证书验证来代替定位问题。
规则差异:基础语法相近,扩展规则要逐项核对
规则按从上往下的顺序匹配,命中后交给对应策略处理。DOMAIN 匹配指定域名,DOMAIN-SUFFIX 匹配域名及其子域,IP-CIDR 匹配地址段,MATCH 用于最后兜底。这些基础思路在不同分支之间相对稳定。
规则提供器不是单纯的规则链接
rule-providers 用来声明外部规则集合,再由 RULE-SET 引用。历史 Premium 与 mihomo 都有相关能力,但不能因此推断所有原版开源构建都能读取。迁移时要同时检查提供器类型、文件格式和内容类型。
behavior: domain表示域名类规则集合;ipcidr表示地址段集合;classical则包含带规则类型的条目。- 传统 YAML 规则集合常用
payload列表。纯文本格式与 mihomo 的 MRS 二进制格式,需要目标内核具备对应支持,不能只改文件扩展名。 - 进程类规则依赖系统提供的进程信息。在 Android 上,应用分流还可能由客户端通过 VpnService 的应用列表实现,并不等同于桌面端的进程规则。
从 Premium 迁移时,尤其要单独检查 script。旧版脚本配置不能视为 mihomo 的通用兼容接口;更稳妥的方式是梳理脚本实际完成的条件判断,再按目标版本支持的规则、逻辑规则或子规则改写,并逐条测试。
TUN 与手机 VPN:内核能力和系统接管要分开看
TUN 是把网络数据交给虚拟网络接口处理的一种方式。它可以让不读取系统代理设置的应用流量进入代理内核。历史上,TUN 是 Clash Premium 与 Meta 等增强路线的重要能力,不能据此认为原版开源 Clash 的每个构建都自带相同实现。
Android 客户端通常利用 VpnService,也就是系统提供的 VPN 接口,获得接管流量的权限。是否弹出 VPN 授权、哪些应用进入通道、后台是否持续运行,既受客户端实现影响,也受系统限制影响。换内核并不会自动完成这些授权。
mihomo TUN 配置片段如何理解
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
这是常见桌面场景的字段示意,不是手机端必须照抄的完整配置。auto-route 负责自动配置相关路由,auto-detect-interface 用于自动识别出站接口,stack 选择网络栈实现。权限、路由处理与可用选项仍要以目标系统和内核版本为准。
配置迁移:先跑通基础文件,再恢复 DNS 与覆写
YAML 是一种用缩进表达结构的配置格式。文件能被解析,只说明结构基本可读;部分未知字段可能被忽略,并不意味着预期功能已经生效。迁移验收要同时看启动日志、连接记录和实际规则命中情况。
第一步:准备可回退的配置
- 保留原订阅地址、当前配置副本和客户端覆写内容。订阅地址属于敏感信息,截图与日志分享前应隐藏认证信息。
- 在新客户端新增一份配置,不直接覆盖旧客户端正在使用的文件。
- 确认订阅服务返回的是 Clash 或 mihomo 可识别的 YAML,而不是其他客户端格式或仅包含分享链接的文本。
第二步:用基础片段隔离问题
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
proxies: []
proxy-groups:
- name: MANUAL
type: select
proxies:
- DIRECT
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,MANUAL
这份示例只用于检查配置加载、端口与规则链路,全部流量最终直连,不提供代理出口。mixed-port: 7890 表示同一监听端口接受 HTTP 与 SOCKS 代理连接。手机上的其他应用是否经过该端口,仍取决于 VPN 接管或应用自身的代理设置。
配置加载正常后,再通过客户端的配置合并、覆写功能,或在本地测试副本中加入真实节点和策略组。策略组名称要与规则引用完全一致。例如规则写了 PROXY,配置却只有 MANUAL,就需要统一名称,不能靠内核自动猜测。
第三步:恢复 DNS,避免一次改动过多
- 先保留订阅原有的
dns设置,确认基本连接正常,再决定是否覆写。 - 若使用
enhanced-mode: fake-ip,要理解它会返回供内核映射使用的虚拟地址。常见的198.18.0.1/16地址范围不是远端服务器的真实公网地址。 nameserver、proxy-server-nameserver等字段用途不同。代理服务器域名的解析路径若依赖尚未建立的代理,可能形成循环依赖。- 变更 Fake-IP 模式后,必要时清理客户端 DNS 缓存并重启测试应用,避免旧缓存掩盖实际结果。
迁移验收:按报错层级排查
| 现象 | 优先检查 | 下一步 |
|---|---|---|
| 配置无法启动 | YAML 缩进、节点类型、策略名称和内核版本 | 根据日志行号定位,再用最小配置复测 |
| 端口监听失败 | 7890 是否已被另一实例占用 | 停止重复实例,或同步修改监听端口与应用代理设置 |
| 延迟测试成功但应用打不开 | 测试 URL 与实际目标不同、规则出口、DNS、UDP | 查看该应用的连接记录,核对命中的规则与节点 |
| 浏览器可用,其他应用失败 | 是否只配置了浏览器代理、VPN 应用排除列表 | 检查系统 VPN 状态与客户端应用分流设置 |
在能直接运行内核的桌面环境,可用 mihomo -t -f config.yaml 检查指定文件。通过检查并不代表服务器可达,也不代表客户端最终运行的就是这个文件。手机端还要核对“当前启用配置”,以及订阅更新后覆写是否仍然生效。
最后至少做三项测试:打开一个应直连的站点、打开一个应走代理的目标、锁屏后重新联网。分别确认规则命中、出口选择和后台连接。需要支持新协议或增强规则时,重点选择内核版本清楚、更新记录明确的客户端;只使用基础配置,也应保留原配置副本,逐步迁移而不是一次替换所有网络设置。