内核解读 预计阅读 13 分钟

mihomo 内核新增了什么?与原版 Clash 内核的功能差异全览

从协议支持、规则类型、TUN 实现到 GEO 数据管理,逐项梳理 mihomo(Clash Meta)相对原版内核的扩展,说明哪些配置字段只有 mihomo 认得。

先分清原版 Clash、Clash Meta 与 mihomo

这里所说的“原版 Clash”,通常指 Dreamacro 维护的 Clash 开源内核。它负责读取 YAML 配置、建立代理连接、执行规则匹配,并通过 HTTP、SOCKS5 或 mixed-port 向本机应用提供代理服务。原版项目停止更新后,社区分支 Clash Meta 继续扩展协议、规则、DNS 与透明代理能力,之后项目名称改为 mihomo。

因此,Clash Meta 与 mihomo 不是两套需要二选一的内核。前者是旧名称,后者是当前名称。部分客户端界面、订阅转换器和旧配置仍会显示“Meta”,判断时应查看实际内核版本,而不是只看客户端名称。

内核与图形客户端也要分开理解。客户端负责托盘菜单、配置下载、系统代理开关和日志展示,真正识别 proxiesrulesdnstun 等字段的是内核。同一份配置在两个客户端里表现不同,常见原因并不是界面,而是它们打包的内核类型或版本不同。

能力对比的基本范围

能力 原版 Clash mihomo
基础规则代理 支持 兼容并扩展
现代代理协议 覆盖较早一代协议 增加 VLESS、Reality、TUIC、Hysteria2 等支持
TUN 透明代理 开源版能力有限,曾与 Premium 实现并存 集成多种协议栈与自动路由能力
逻辑组合规则 以线性规则为主 支持 AND、OR、NOT 与子规则
GEO 数据 基础 GEOIP、GEOSITE 使用方式 增加加载方式、下载地址与自动更新控制
流量嗅探 能力较少 提供独立 sniffer 配置段

协议支持:新增的不只是节点类型

原版 Clash 已能处理 Shadowsocks、VMess、Trojan、Snell、SOCKS5、HTTP 等常见节点。mihomo 在此基础上持续补充协议与传输层实现,较受关注的包括 VLESS、XHTTP、Reality、TUIC、Hysteria、Hysteria2、WireGuard,以及更多 Shadowsocks 插件和传输组合。具体可用字段仍取决于内核版本,订阅里出现新字段时,应先确认客户端打包的 mihomo 是否足够新。

VLESS 与 Reality

原版 Clash 不识别 mihomo 配置中的 VLESS 节点。mihomo 可读取 type: vless,并处理 uuidflownetworktls 等字段。使用 Reality 时,还可能包含 reality-optspublic-keyshort-id。这些字段直接交给原版内核,通常会在配置校验阶段提示代理类型或字段不受支持。

proxies:
  - name: vless-reality-example
    type: vless
    server: example.net
    port: 443
    uuid: 00000000-0000-0000-0000-000000000000
    network: tcp
    tls: true
    udp: true
    servername: www.example.com
    reality-opts:
      public-key: example-public-key
      short-id: "01234567"
    client-fingerprint: chrome

示例只用于展示字段层级,地址、UUID、公钥和短 ID 必须来自实际服务配置。Reality 相关参数需要成组匹配,不能只把普通 VLESS 节点的 tls 改为 true

TUIC 与 Hysteria2

TUIC 和 Hysteria2 都以 QUIC、UDP 为基础,但配置字段并不通用。TUIC 常见字段包括 uuidpasswordcongestion-controllerudp-relay-mode;Hysteria2 常见字段包括 passwordobfsobfs-password 和带宽参数。节点提供方给出的协议类型必须与内核配置中的 type 一致。

全局 TLS 指纹

mihomo 支持通过 global-client-fingerprint 设置全局客户端指纹,也允许部分代理节点单独填写 client-fingerprint。常见值包括 chromefirefoxsafariiosrandom。节点级字段通常比全局字段更具体,迁移配置时应避免同时写入互相冲突的值。

global-client-fingerprint: chrome
unified-delay: true
tcp-concurrent: true

unified-delay 用于统一延迟计算方式,使测试结果更接近完整连接过程;tcp-concurrent 会并发尝试解析结果中的多个 IP,以较快成功的连接继续工作。这些都是 mihomo 常见的顶层扩展字段,原版 Clash 配置不应依赖它们。

规则系统:从逐条匹配扩展到逻辑组合

两类内核都遵循“从上到下,首次命中即停止”的基本规则顺序。原版常用规则包括 DOMAINDOMAIN-SUFFIXDOMAIN-KEYWORDIP-CIDRGEOIPPROCESS-NAMERULE-SET 与最终的 MATCH。mihomo 保留这些写法,同时增加了更多网络属性和逻辑组合能力。

AND、OR 与 NOT

逻辑规则适合表达“同时满足多个条件”或“排除某个条件”。例如,只让 UDP 且目标端口为 443 的流量进入指定策略组,可以把网络类型和端口条件组合起来。逻辑规则的括号与逗号层级较严格,建议先用内核校验命令检查,而不是直接覆盖正在使用的配置。

rules:
  - AND,((NETWORK,UDP),(DST-PORT,443)),QUIC策略
  - OR,((DOMAIN-SUFFIX,example.com),(DOMAIN-SUFFIX,example.net)),代理
  - NOT,((GEOIP,CN)),非国内流量
  - MATCH,最终选择

逻辑组合的价值不是减少规则数量,而是避免把一个条件拆成多组重复列表。规则越复杂,越需要把高频、明确的域名规则放在前面,把大范围 GEOIP、规则集和 MATCH 放在后面。

端口、网络与进程规则

mihomo 可按源端口、目标端口、入站类型、网络协议和进程路径进一步分流。常见字段包括 SRC-PORTDST-PORTIN-TYPENETWORKPROCESS-NAMEPROCESS-PATH。例如 DNS 通常使用 53 端口,HTTPS 通常使用 443 端口,本地 mixed-port 则常配置为 7890。

规则集与子规则

rule-providers 仍是维护大量域名和 IP 规则的主要方式。mihomo 支持 domainipcidrclassical 等行为类型,并可使用 YAML 文本或 MRS 等载荷格式。规则提供器的 behavior 必须和文件内容对应:纯域名集合不应标记为 ipcidr,包含完整规则语法的列表则应使用 classical

rule-providers:
  private-domains:
    type: http
    behavior: domain
    format: yaml
    path: ./ruleset/private-domains.yaml
    url: https://example.net/rules/private-domains.yaml
    interval: 86400

rules:
  - RULE-SET,private-domains,DIRECT
  - MATCH,代理

interval: 86400 表示每 86400 秒,也就是 24 小时检查一次更新。远程规则首次下载失败时,内核无法凭空生成内容;应检查 URL 可访问性、文件格式、写入目录权限和日志中的 HTTP 状态码。

TUN 模式:接管范围与协议栈更完整

系统代理只影响主动读取代理设置的应用。浏览器通常可以使用系统代理,但游戏、命令行工具、部分商店应用和直接创建 UDP 套接字的软件可能绕过它。TUN 模式会创建虚拟网卡,把符合路由条件的 IP 流量交给内核,因此接管范围更广。

原版开源 Clash 与旧 Premium 内核曾存在不同的 TUN 能力边界。mihomo 将 TUN、DNS 劫持、自动路由和流量嗅探放进持续维护的同一套配置体系,并提供 systemgvisormixed 等协议栈选项。不同平台可用情况仍受操作系统和客户端权限影响。

tun:
  enable: true
  stack: mixed
  dns-hijack:
    - any:53
    - tcp://any:53
  auto-route: true
  auto-redirect: true
  auto-detect-interface: true
  strict-route: true

三种 stack 怎么选

auto-route 自动写入路由,使流量进入 TUN;auto-detect-interface 用于识别当前出口网卡;strict-route 会更严格地限制绕过路径。Windows、macOS 与 Linux 的路由实现不同,开启后若局域网打印机或 NAS 无法访问,应先检查私有网段是否被正确直连,而不是立即修改代理节点。

流量嗅探补上域名信息

TUN 接管到的连接有时只包含目标 IP,缺少原始域名。mihomo 的 sniffer 可从 TLS ClientHello、HTTP Host 或 QUIC 握手中提取域名,再交给域名规则匹配。这能减少“规则写了域名但连接只命中 IP”的情况。

sniffer:
  enable: true
  sniff:
    HTTP:
      ports:
        - 80
        - 8080-8880
    TLS:
      ports:
        - 443
        - 8443
    QUIC:
      ports:
        - 443
  skip-domain:
    - Mijia Cloud

嗅探不是 DNS 解析的替代品,也不能从所有加密连接中恢复完整域名。配置时应限制端口范围,并用 skip-domain 排除已知不适合改写目标信息的服务。排障时可先关闭嗅探对比结果,确认问题究竟来自节点、DNS、规则还是域名覆盖。

DNS 与 GEO 数据:控制项明显增加

原版 Clash 已提供 nameserverfallbackfallback-filterenhanced-modefake-ip-filter。mihomo 延续这些字段,并增加 default-nameserverproxy-server-nameserverdirect-nameservernameserver-policyrespect-rules 等细分控制。

不同 nameserver 的职责

dns:
  enable: true
  listen: 0.0.0.0:1053
  ipv6: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  default-nameserver:
    - 223.5.5.5
  nameserver:
    - https://dns.alidns.com/dns-query
  proxy-server-nameserver:
    - https://1.1.1.1/dns-query
  nameserver-policy:
    "geosite:cn":
      - https://dns.alidns.com/dns-query

示例把内核 DNS 监听在 1053 端口,而不是直接占用系统常见的 53 端口。TUN 中的 dns-hijack 再把符合条件的 53 端口查询送入内核。若系统上已有本地 DNS 服务,应先确认端口占用,避免两个进程监听同一个地址。

GEOIP、GEOSITE 与 GeoSite.dat

GEOIP 根据目标 IP 所属地区匹配,GEOSITE 根据维护好的域名分类匹配,两者不是同一种数据。域名规则在 DNS 解析前就可能命中,而 GEOIP 通常需要取得目标 IP。将所有流量都交给 GEOIP 判断,既不能替代域名分类,也可能增加解析后的匹配成本。

mihomo 提供 geodata-modegeodata-loadergeox-urlgeo-auto-updategeo-update-interval 等顶层配置,用于控制数据格式、加载方式、下载位置和更新周期。部分版本也支持 GeoIP、GeoSite、MMDB 与 ASN 数据的独立地址。

geodata-mode: true
geo-auto-update: true
geo-update-interval: 24
geox-url:
  geoip: https://example.net/data/geoip.dat
  geosite: https://example.net/data/geosite.dat
  mmdb: https://example.net/data/country.mmdb
  asn: https://example.net/data/ASN.mmdb

geo-update-interval: 24 通常按小时理解,表示每 24 小时检查更新。实际字段支持和数据格式会随 mihomo 版本变化,部署前应以当前内核文档及启动日志为准。下载地址返回 HTML 错误页时,即使 HTTP 状态看似正常,数据加载仍会失败。

哪些字段迁回原版 Clash 会出问题

基础的 portsocks-portmixed-portallow-lanmodelog-levelproxiesproxy-groups 与常规 rules 通常容易兼容。真正造成迁移失败的,往往是 mihomo 扩展节点类型、逻辑规则和顶层增强配置。

字段或写法 mihomo 用途 迁移注意事项
global-client-fingerprint 设置全局 TLS 客户端指纹 原版内核不应依赖此字段
sniffer 从 HTTP、TLS、QUIC 流量识别域名 需要移除相关域名覆盖逻辑
geox-url 指定 GEO 数据下载地址 原版的数据管理方式不同
tcp-concurrent 并发尝试多个解析地址 旧内核可能忽略或拒绝
VLESSTUICHysteria2 现代代理协议 必须更换节点或继续使用 mihomo
ANDORNOT 逻辑组合规则 需要拆成原版可识别的线性规则
listeners 定义多个自有入站监听器 原版通常使用固定端口字段

先校验,再替换运行配置

修改 YAML 后可先在独立目录执行校验。mihomo 常用命令形式如下,其中 -d 指向包含配置与数据文件的工作目录,-f 指定配置文件:

mihomo -t -d ./mihomo-work -f ./config.yaml

校验通过只说明语法、字段和本地文件基本可读取。随后还应检查运行日志中的节点握手、规则提供器下载、DNS 监听和 TUN 路由。建议至少完成四项测试:访问一个应直连的站点、访问一个应代理的站点、执行一次 UDP 请求、关闭系统代理后验证 TUN 是否仍能接管目标应用。

如何判断是否需要 mihomo

如果配置只有 Shadowsocks、VMess、Trojan 和简单域名规则,系统代理也能覆盖所有应用,那么更换内核带来的可见变化可能不大。配置是否稳定,仍主要取决于节点参数、规则顺序和 DNS 路径,而不是内核名称本身。

以下场景更适合使用 mihomo:订阅包含 VLESS Reality、TUIC 或 Hysteria2;需要用 TUN 接管游戏和命令行程序;希望通过进程、入站或逻辑条件分流;需要独立管理节点域名 DNS;使用 GEOSITE、ASN、MRS 规则集或自动 GEO 数据更新;需要在透明代理场景中通过嗅探恢复域名。

  1. 先在客户端的「设置」→「内核」查看实际内核名称和版本。
  2. 导出当前配置,搜索 type: vlesstype: tuictype: hysteria2sniffer:geox-url:
  3. 执行配置校验,处理未知字段、缩进错误和缺少数据文件等问题。
  4. 打开日志,将级别暂时设为 info;只有排查复杂连接时再短时间使用 debug
  5. 逐项启用 TUN、DNS 劫持和嗅探,不要一次改动全部网络路径。
Clash 客户端下载 查看各平台可用版本