先区分内核、客户端与 Clash Premium
比较内核前,需要把三个层次拆开。内核负责解析配置、建立代理连接、处理 DNS 与匹配规则;桌面或移动客户端负责配置管理、托盘菜单、订阅更新和权限申请;订阅则提供节点、策略组与规则数据。客户端名字里有 Clash,并不代表它运行原版 Clash,也不代表它支持所有 mihomo 配置。
原版 Clash 开源内核与 Clash Premium 也不是同一套功能集合。Premium 是原项目提供的闭源增强内核,历史上包含 TUN、规则集等增强功能。mihomo 是从 Clash Meta 延续而来的开源内核,保留大量 Clash 风格的 YAML 配置结构,同时继续扩展协议、路由与 DNS 功能。原项目已停止维护,迁移时应按实际二进制版本核对,而不是把旧客户端名称当成功能清单。
| 对象 | 主要职责 | 核对位置 |
|---|---|---|
| 原版 Clash 开源内核 | 传统代理协议、策略组与规则分流 | 内核版本与配置解析日志 |
| Clash Premium | 原版基础能力及历史增强功能 | Premium 构建日期与对应文档 |
| mihomo | 新增协议、规则集扩展、TUN 与 DNS 配置 | 实际运行的 mihomo 版本 |
| 图形客户端 | 导入订阅、启动内核、管理权限与配置覆写 | 客户端设置、启动日志与运行配置 |
用命令确认实际版本
mihomo -v
mihomo -t -d ./mihomo-data -f ./config.yaml
第一条查看当前二进制的版本信息;第二条指定工作目录与配置文件,执行配置测试。这里的文件应当已经存在,测试通过也只说明配置能够解析,不等于节点可用。图形客户端可能使用内置内核,终端里的 mihomo 与客户端启动的文件不一定相同,应同时检查客户端日志。
新增协议:VLESS、REALITY 与 Hysteria2
mihomo 与旧内核最直接的差异,是能否识别订阅中的节点类型及其参数。原版 Clash 的常见协议包括 Shadowsocks、VMess、Trojan、SOCKS 和 HTTP。mihomo 扩展了 VLESS、Hysteria2、TUIC 等协议支持,也支持特定协议组合中的 REALITY。不能仅把 YAML 的 type 改掉,就把旧节点转换为另一种协议;服务端必须提供对应入口。
| 功能 | mihomo 配置要点 | 常见误区 |
|---|---|---|
| VLESS | 核对 UUID、传输方式、TLS 与 flow | 将 VMess 节点的类型直接改成 VLESS |
| REALITY | 核对服务端要求的 SNI、公钥与 short-id | 把 REALITY 当作独立的节点类型 |
| Hysteria2 | 使用 type: hysteria2,核对密码与 TLS 参数 | 复用 Hysteria 第一代的整段配置 |
| TUIC | 核对服务端版本、认证字段与 UDP 连通性 | 只测试 TCP 端口便判断节点正常 |
协议支持与网络条件分别判断
Hysteria2 与 TUIC 基于 QUIC,连接依赖 UDP。局域网、防火墙或运营商线路限制 UDP 时,即使配置测试通过,也可能出现握手超时。VLESS 的可用性则要结合实际传输方式判断,不能把所有 VLESS 节点归为同一种网络行为。协议名称本身也不能保证更低延迟或更高吞吐。
- 提示不支持节点类型:先确认客户端是否真正启动了 mihomo,以及订阅是否面向该内核输出。
- 提示认证失败:核对 UUID、密码、服务端协议版本,避免先修改 DNS。
- 提示 TLS 握手错误:核对系统时间、SNI 与证书要求,不把跳过证书验证当作常规修复。
- QUIC 节点持续超时:换网络对照测试,再检查 UDP 出站与服务器状态。
rule-providers:沿用结构,核对 behavior 与 format
rule-providers 并非 mihomo 独有,Clash Premium 已支持这一机制。迁移时通常可以沿用“声明规则集,再用 RULE-SET 引用”的基本结构。规则集负责描述匹配对象,rules 中的引用负责指定命中后的策略;两者不要混写。
本地 domain 规则集示例
下面片段合并到现有配置使用。它把示例域名规则送往 DIRECT,不依赖节点名称。工作目录内需要有 rules/local-domains.yaml 文件;如果已有 rule-providers 或 rules,应合并内容,不能重复创建同名顶层键。
rule-providers:
local-domains:
type: file
behavior: domain
format: yaml
path: ./rules/local-domains.yaml
rules:
- RULE-SET,local-domains,DIRECT
- MATCH,DIRECT
rules/local-domains.yaml 的文件内容:
payload:
- '+.example.com'
- 'intranet.example.net'
+.example.com 用于匹配该域名及其子域名。这个示例选择直连兜底,只演示引用关系,不是可直接替代现有订阅的代理方案。实际迁移时,应保留自己的代理策略组与末尾兜底规则。
三种 behavior 不可互换
domain:条目是域名或支持的域名匹配表达式,不带DOMAIN-SUFFIX前缀。ipcidr:条目是地址网段,例如192.168.0.0/16,不是完整规则语句。classical:条目是规则表达式,例如DOMAIN-SUFFIX,example.com,通常不在条目末尾写策略名称。
如果把 DOMAIN-SUFFIX,example.com 放进 behavior: domain 的文件,即使 YAML 缩进正确,也属于内容格式不匹配。检查规则集时,应同时查看提供器声明和下载后的文件,而不是只看文件扩展名。
mihomo 的规则集格式扩展
mihomo 支持 YAML、纯文本及 MRS 等规则集格式。MRS 是面向规则集的二进制格式,适用于 domain 与 ipcidr,不用于 classical。旧 Premium 配置不能据此推断可以直接读取 MRS。引入这些格式前,应确认所用 mihomo 版本和规则源说明,避免把较新的配置字段复制进旧内核。
规则仍然从上到下匹配。把 MATCH 放到规则集引用前面,后续规则就没有正常参与匹配的机会。排查分流错误时,优先看连接详情中的命中规则与实际策略,而不是只看策略组当前选中的节点。
TUN 实现:栈选择、路由接管与系统权限
系统代理与 TUN 不是同一入口。系统代理让遵循系统设置的应用向代理端口发起连接;TUN 创建虚拟网络接口,结合路由规则接收 IP 流量。TUN 更适合处理不遵循系统代理的应用,但是否接管某条连接,仍受路由、接口选择、排除项及操作系统权限影响。
原版开源 Clash 与 Premium 的 TUN 功能范围不同,不能概括成“所有 Clash 都有 TUN”。Premium 历史 TUN 方案与 gVisor 栈相关;mihomo 提供 system、gvisor、mixed 等栈选择。具体支持范围应以平台与版本为准,不能直接套用另一内核的 TUN 段。
| stack 值 | 处理方式 | 选择建议 |
|---|---|---|
system | 使用系统网络栈相关实现 | 按客户端默认值先建立可用基线 |
gvisor | 使用用户态网络栈处理流量 | 用于兼容性对照,不预设一定更快 |
mixed | 结合 system 的 TCP 与 gVisor 的 UDP 处理 | 核对当前平台支持后再测试 |
桌面环境的配置片段
mixed-port: 7890
allow-lan: false
mode: rule
tun:
enable: true
stack: mixed
auto-route: true
auto-detect-interface: true
dns-hijack:
- any:53
这里的 7890 是示例混合代理端口,不是所有客户端的固定值。auto-route 用于自动配置路由,auto-detect-interface 帮助选择出站接口;它们不能代替权限申请。Windows 上通常需要客户端服务或提权机制,Linux 上需要适当的网络管理权限,macOS 上则要按客户端实现完成授权。
- 关闭其他 VPN 或另一个代理客户端的 TUN,先减少路由竞争。
- 确认系统代理模式可用,再单独启用 TUN,避免同时引入两组问题。
- 检查日志是否出现虚拟接口创建失败、路由添加失败或权限不足。
- 切换 Wi-Fi、有线网络或休眠恢复后,重新检查出站接口与路由。
DNS 与 Fake-IP:保留机制,重新核对解析路径
Fake-IP 并不是 mihomo 新增的概念。它通过映射地址建立域名与连接之间的关联,帮助内核按域名匹配规则。迁移时真正需要关注的是:DNS 请求有没有进入内核、哪些域名需要返回真实地址,以及代理服务器域名使用哪条解析路径。
将 DNS 与 TUN 分开验证
dns:
enable: true
listen: 127.0.0.1:7874
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
fake-ip-filter:
- '*.lan'
- 'localhost'
nameserver:
- 223.5.5.5
- 119.29.29.29
这是解析行为的演示片段:DNS 监听在本机 7874,Fake-IP 使用 198.18.0.1/16 范围,上游是两个明确的 IPv4 DNS 地址。上游应按实际网络和隐私要求选择,此处并不保证它们适合所有线路。fake-ip-filter 只是排除 Fake-IP 分配,不等于强制直连规则,也不能替代本地 DNS 服务器的配置。
在安装了 dig 的环境中,可以直接查询内核 DNS:
dig @127.0.0.1 -p 7874 example.com A
未命中过滤项时,响应通常会出现配置范围内的映射地址。这是预期机制,不是域名服务器返回了错误公网地址。随后访问该域名,再检查内核连接记录,确认连接能关联到域名并命中预期规则。
加密 DNS 与节点域名解析
- 浏览器独立 DoH:浏览器可能绕过系统 DNS 路径。排查时先统一解析入口,再比较行为。
- TUN 的 DNS 劫持:
any:53面向传统 DNS 流量,不能将它理解为能自动接管所有 DoH、DoT 请求。 - 节点域名解析:mihomo 可用
proxy-server-nameserver指定代理服务器域名的解析器,减少启动时解析路径相互依赖的问题。 - 规则参与 DNS 出站:
respect-rules等设置会改变 DNS 连接的路由行为。需要按当前版本说明配套配置,不能只打开一个开关。
局域网服务访问异常时,应核对本地域名后缀、路由器 DNS 和网段规则。仅添加 *.lan 不会覆盖企业内部使用的所有域名。切换增强模式后还要考虑浏览器、系统与应用缓存;旧缓存中的映射地址可能短时间保留。
从 Clash Premium 迁移到 mihomo 的自查顺序
迁移重点不是重写所有规则,而是找到依赖旧内核的部分。大部分基础字段、传统节点与规则语句可以作为起点,但 Premium 的脚本配置、旧实验字段及特定 TUN 参数不应按原样保留。mihomo 不应被当作 Premium 脚本接口的直接替代品。
- 保存配置与运行环境:保留当前可用 YAML,记录监听端口、所选策略组、系统代理和 TUN 状态。订阅地址应保存在安全位置,不公开分享。
- 核对订阅输出目标:优先使用服务方提供的 mihomo 或 Clash Meta 格式。节点含 VLESS、Hysteria2 时,确认协议参数完整。
- 执行配置测试:运行
mihomo -t,先处理未知协议、字段类型、规则文件路径和策略名称错误。 - 只验证系统代理:关闭 TUN,通过明确端口验证节点与规则。例如实际端口为
7890时,可让支持代理的应用使用127.0.0.1:7890。 - 核对规则集:检查
behavior、format、本地文件内容和规则顺序,确认引用的策略组真实存在。 - 单独启用 DNS 与 TUN:按权限、接口、路由、解析的顺序定位。每次只修改一个变量,保留日志供前后对照。
- 验证客户端覆写:检查最终运行配置。客户端可能对端口、DNS、TUN 或规则做合并,编辑订阅源文件并不一定改变实际运行值。
用可复现条件比较速度
协议扩展不等于自动提速。比较两个内核时,应固定节点、测试目标、网络与时间窗口,并记录单连接下载速度、并发表现和 CPU 占用。延迟测试只反映指定目标的一次请求耗时;它不能替代大文件吞吐,也不能证明所有网站都走了同一条线路。
需要新增协议、持续更新的规则集能力或更细的 DNS 配置时,mihomo 是应重点核对的内核。只需要传统协议与简单系统代理时,选择重点仍是客户端维护状态、当前系统兼容性和配置是否易于管理。可在术语表核对 Fake-IP、策略组与规则集概念,再按配置教程逐步验证。