先判断停更影响的是哪一层

Clash 相关项目大致分三层:内核、图形客户端、配置与规则集。内核负责协议解析、DNS 与 TUN 路由;客户端负责界面、订阅管理和系统代理开关;配置层是 profile 文件与规则集文件。三层之间通过 YAML 配置和本地端口通信,只要接口不变,任何一层都可以单独替换。

先定位停更发生在哪一层,再决定要不要动配置。判断依据是 release 标签的发布时间和默认分支最后一次提交时间,与 star 数、下载量无关。

停更层级与处置方式
层级典型信号实际影响处置方式
内核仓库归档,最后一个 release 距今超过 12 个月;原版 Clash 停在 v1.18.0(2023 年 8 月)新协议与 DNS 特性不再合并,规则集新格式无法解析换内核,profile 大部分可复用
客户端9 个月以上没有新 release,issue 长期无人回复界面与订阅管理停在旧版本,TUN 与新系统版本可能不兼容换客户端,订阅与 profile 原样导入
规则集规则仓库 6 个月没有提交域名库与 IP 库逐渐过期,分流准确率下降换规则源,改 rule-providers 的 url
  1. 在客户端「设置」→「版本信息」或「关于」里记录两个版本号:界面版本与内核版本,形如 v1.18.0、v1.19.5。
  2. 打开对应仓库的 releases 页面,核对最新 tag 的日期,确认是否真的停止更新。
  3. 打开 profile 目录,确认配置来自订阅链接还是本地文件。前者可以重建,后者必须先备份。

只有客户端层停更时,改动最小

保留现有 profile 与规则集,直接换一个仍在维护的界面即可。内核、订阅、规则集都不需要动,迁移时间通常在十分钟以内。

迁移前把配置资产导出

配置资产分三类:订阅链接、本地 profile 文件、客户端里手改过的项(端口、TUN 开关、开机自启、规则覆写)。前两类可以完整导出,第三类只能靠逐项记录。导出动作要在关闭代理的状态下做,避免中途断网导致订阅更新失败。

各平台 profile 默认目录

profile 与配置文件位置
平台客户端配置目录内核默认目录
Windows%APPDATA%\io.github.clash-verge-rev.clash-verge-rev\profiles\,旧版 Verge 在 %APPDATA%\clash-verge\%USERPROFILE%\.config\clash\
macOS~/Library/Application Support/io.github.clash-verge-rev.clash-verge-rev/profiles/~/.config/mihomo/
Linux~/.config/io.github.clash-verge-rev.clash-verge-rev/profiles/~/.config/mihomo//etc/mihomo/
Android应用内「配置」菜单的导出项,导出文件通常落在 /sdcard/Download/应用私有目录,不 root 无法直接读取

导出步骤

  1. 关闭系统代理与 TUN:「设置」→「系统代理」关闭,「设置」→「TUN 模式」关闭。
  2. 在「订阅」页对目标 profile 执行右键 →「复制订阅链接」,粘贴到本地文本文件保存。
  3. 本地文件型 profile:把整个 profiles 目录复制到备份盘,包含 providers 子目录。
  4. 记录端口:混合端口 7890、控制端口 127.0.0.1:9090、DNS 监听 1053。
  5. 记录规则集来源:rule-providers 里每一项的 url、interval 与 path。

一份最小可迁移配置

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
external-controller: 127.0.0.1:9090
unified-delay: true
tcp-concurrent: true

dns:
  enable: true
  listen: 127.0.0.1:1053
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  nameserver:
    - https://223.5.5.5/dns-query
    - https://1.1.1.1/dns-query

proxy-providers:
  main:
    type: http
    url: "https://sub.example.com/link/8f3c1a2b?flag=meta"
    interval: 3600
    path: ./providers/main.yaml
    health-check:
      enable: true
      url: https://www.gstatic.com/generate_204
      interval: 300

其中 unified-delaytcp-concurrent 是 mihomo 的字段,原版 Clash 读到会直接报解析错误。迁移时按目标内核版本决定保留还是删除,其余字段两边通用。

内核替换:从原版 Clash 到 mihomo

原版 Clash 内核停在 v1.18.0;Clash.Meta 分支在 2024 年更名为 mihomo,主线推进到 v1.19 系列,TUN 栈、DNS 与规则集格式仍在更新。两者大部分配置字段同名,差异集中在近两年新增的能力上。

字段兼容性对照
配置字段原版 Clash v1.18.0mihomo v1.19.x迁移动作
mixed-port支持支持无需改动
tun.stack支持 system / gvisor增加 mixed 取值可保持原值
sniffer不支持支持可新增,用于还原被 fake-ip 覆盖的域名
rule-providersformat: mrs不支持支持想降低内存占用可换成 mrs
geodata-modegeox-url不支持支持需要 geo 文件时补上
proxy-groupslazy不支持支持可选,减少空闲时的健康检查
sub-rule(1.19 新增)不支持支持旧内核解析会报错

反向兼容基本成立:mihomo 能直接读原版 Clash 的 profile,反过来则会因为多出的字段解析失败。所以迁移方向只有旧内核到 mihomo 这一条,不能反着走。

Linux 下替换内核的命令行

# 停掉旧内核服务
sudo systemctl stop clash

# 下载并安装 mihomo 内核(amd64 示例)
curl -LO https://github.com/MetaCubeX/mihomo/releases/download/v1.19.5/mihomo-linux-amd64-v1.19.5.gz
gunzip mihomo-linux-amd64-v1.19.5.gz
sudo install -m 0755 mihomo-linux-amd64-v1.19.5 /usr/local/bin/mihomo

# 确认替换生效
mihomo -v

# 用旧配置前台试运行,观察是否有字段解析错误
mihomo -d /etc/mihomo -f /etc/mihomo/config.yaml

试运行时保持前台输出,确认日志里没有 parse error 一类的字段报错后再退出,交给 systemd 托管。非 root 用户运行需要额外授予网络能力:

[Unit]
Description=mihomo
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

不要在同一个路径反复覆盖不同内核的二进制文件

旧内核的进程可能仍在后台运行并占用 9090 端口,替换后表现为「配置没生效」。先确认进程已退出,再覆盖二进制文件。

按平台选择替代客户端

选替代客户端看三个硬指标:是否内置内核下载与更新通道、是否支持直接导入 profile 目录、是否同时提供系统代理与 TUN 两种模式。三项都满足的界面,迁移成本最低,因为订阅和端口习惯都能照搬。

各平台可选客户端
平台可选客户端内核配置导入方式
WindowsClash Verge Rev、FlClash、Clash Nyanpasumihomo粘贴订阅链接,或把 yaml 拖进窗口
macOSClash Verge Rev、FlClash、Mihomo Partymihomo同上;首次开启 TUN 需在系统设置中批准
AndroidFlClash、Clash Meta for Androidmihomo应用内粘贴订阅,或从本地文件导入
iOSApp Store 中提供 Network Extension 的客户端,如 Shadowrocket、Stash、Loon各自内核多数只接受订阅链接,不解析完整 yaml
LinuxClash Verge Rev(AppImage / deb / rpm)、mihomo + systemdmihomo配置文件直接落到 /etc/mihomo

iOS 端要注意区域差异:这类客户端在中国区 App Store 不可用,需要切换到其他区域的账号下载。同时它们多数不解析完整 yaml,只接受订阅链接,本地手写的规则要提前整理到订阅侧,否则迁移后会缺规则。

从旧客户端搬配置的顺序

  1. 先装新客户端,暂时不要卸载旧的,方便随时对照。
  2. 导入订阅链接,等 profile 生成完成、节点列表出现。
  3. 对照备份记录逐项改回:混合端口、控制端口、TUN 栈类型、开机自启、系统代理模式。
  4. 新客户端连通后,再停用旧客户端并卸载其后台服务。Windows 的服务模式、macOS 的特权 helper 都要单独卸载,否则会残留监听端口。

迁移后的验收清单

下面十项按顺序做一遍,能覆盖绝大多数迁移遗留问题。命令里的端口以默认值为准,改过端口就替换成实际值。

  1. 内核版本:curl -s http://127.0.0.1:9090/version,返回的 version 字段应与安装的 tag 一致。
  2. 代理链路:curl -I -x http://127.0.0.1:7890 https://www.gstatic.com/generate_204,返回 HTTP/2 204 表示链路通。
  3. DNS 解析:Windows 用 nslookup www.google.com 127.0.0.1,macOS 与 Linux 用 dig @127.0.0.1 -p 1053 www.google.com,返回 198.18.0.0/16 段地址说明 fake-ip 生效。
  4. 规则命中:打开界面的「连接」页,先访问一个国内站点看是否走 DIRECT,再访问一个境外站点看是否进入代理组。
  5. TUN 路由:Windows 执行 route print -4 检查 TUN 网卡与 198.18.0.0 网段;Linux 执行 ip route show table all | grep 198.18
  6. 端口占用:Windows 用 netstat -ano | findstr :9090,macOS 与 Linux 用 lsof -i :9090,确认只有一个进程监听。
  7. 订阅更新:手动触发一次更新,日志里不应出现 403、404 或 TLS 握手失败。
  8. 规则集落地:检查规则集目录下的文件体积不为 0,修改时间是刚刚。
  9. 开机自启:重启系统一次,确认客户端自动拉起,系统代理状态与重启前一致。
  10. 回退路径:断开代理节点,确认 DIRECT 规则下的站点仍可访问,说明分流没有全部压到代理组。

常见迁移故障与处理

订阅更新返回 403 或 404

多数是 User-Agent 不匹配。部分服务端按 UA 返回不同格式,新内核的默认 UA 与旧客户端不一致时,面板会直接拒绝。先在客户端的订阅设置里找 UA 下拉项,切到 clash 再试;其次是链接本身过期,回面板重新复制一份。

规则集下载失败

geodata-mode: true 时需要 geoip.dat、geosite.dat 或对应的 mmdb 文件,mihomo 会尝试自动下载到工作目录,网络受限时会失败。手动把文件放进工作目录,或在 geox-url 里换成可访问的地址。

TUN 模式起不来

启动即退出或配置未生效

先确认 9090 是否被旧进程占用,再检查配置文件的缩进与编码:YAML 用 Tab 缩进会直接解析失败,文件保存为 UTF-8 无 BOM。把日志级别调到 log-level: debug,日志会给出具体行号,比逐行比对配置文件快得多。

迁移的本质是把三样东西搬进新壳子:订阅链接、profile 文件、端口与模式习惯。这三样在手,客户端换几次都不影响日常使用;反过来,只记住界面上的开关位置,下次遇到停更还得从头摸一遍。