先判断停更影响的是哪一层
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 |
- 在客户端「设置」→「版本信息」或「关于」里记录两个版本号:界面版本与内核版本,形如 v1.18.0、v1.19.5。
- 打开对应仓库的 releases 页面,核对最新 tag 的日期,确认是否真的停止更新。
- 打开 profile 目录,确认配置来自订阅链接还是本地文件。前者可以重建,后者必须先备份。
只有客户端层停更时,改动最小
保留现有 profile 与规则集,直接换一个仍在维护的界面即可。内核、订阅、规则集都不需要动,迁移时间通常在十分钟以内。
迁移前把配置资产导出
配置资产分三类:订阅链接、本地 profile 文件、客户端里手改过的项(端口、TUN 开关、开机自启、规则覆写)。前两类可以完整导出,第三类只能靠逐项记录。导出动作要在关闭代理的状态下做,避免中途断网导致订阅更新失败。
各平台 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 无法直接读取 |
导出步骤
- 关闭系统代理与 TUN:「设置」→「系统代理」关闭,「设置」→「TUN 模式」关闭。
- 在「订阅」页对目标 profile 执行右键 →「复制订阅链接」,粘贴到本地文本文件保存。
- 本地文件型 profile:把整个 profiles 目录复制到备份盘,包含 providers 子目录。
- 记录端口:混合端口 7890、控制端口 127.0.0.1:9090、DNS 监听 1053。
- 记录规则集来源: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-delay 与 tcp-concurrent 是 mihomo 的字段,原版 Clash 读到会直接报解析错误。迁移时按目标内核版本决定保留还是删除,其余字段两边通用。
内核替换:从原版 Clash 到 mihomo
原版 Clash 内核停在 v1.18.0;Clash.Meta 分支在 2024 年更名为 mihomo,主线推进到 v1.19 系列,TUN 栈、DNS 与规则集格式仍在更新。两者大部分配置字段同名,差异集中在近两年新增的能力上。
| 配置字段 | 原版 Clash v1.18.0 | mihomo v1.19.x | 迁移动作 |
|---|---|---|---|
mixed-port | 支持 | 支持 | 无需改动 |
tun.stack | 支持 system / gvisor | 增加 mixed 取值 | 可保持原值 |
sniffer | 不支持 | 支持 | 可新增,用于还原被 fake-ip 覆盖的域名 |
rule-providers 的 format: mrs | 不支持 | 支持 | 想降低内存占用可换成 mrs |
geodata-mode、geox-url | 不支持 | 支持 | 需要 geo 文件时补上 |
proxy-groups 的 lazy | 不支持 | 支持 | 可选,减少空闲时的健康检查 |
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 两种模式。三项都满足的界面,迁移成本最低,因为订阅和端口习惯都能照搬。
| 平台 | 可选客户端 | 内核 | 配置导入方式 |
|---|---|---|---|
| Windows | Clash Verge Rev、FlClash、Clash Nyanpasu | mihomo | 粘贴订阅链接,或把 yaml 拖进窗口 |
| macOS | Clash Verge Rev、FlClash、Mihomo Party | mihomo | 同上;首次开启 TUN 需在系统设置中批准 |
| Android | FlClash、Clash Meta for Android | mihomo | 应用内粘贴订阅,或从本地文件导入 |
| iOS | App Store 中提供 Network Extension 的客户端,如 Shadowrocket、Stash、Loon | 各自内核 | 多数只接受订阅链接,不解析完整 yaml |
| Linux | Clash Verge Rev(AppImage / deb / rpm)、mihomo + systemd | mihomo | 配置文件直接落到 /etc/mihomo |
iOS 端要注意区域差异:这类客户端在中国区 App Store 不可用,需要切换到其他区域的账号下载。同时它们多数不解析完整 yaml,只接受订阅链接,本地手写的规则要提前整理到订阅侧,否则迁移后会缺规则。
从旧客户端搬配置的顺序
- 先装新客户端,暂时不要卸载旧的,方便随时对照。
- 导入订阅链接,等 profile 生成完成、节点列表出现。
- 对照备份记录逐项改回:混合端口、控制端口、TUN 栈类型、开机自启、系统代理模式。
- 新客户端连通后,再停用旧客户端并卸载其后台服务。Windows 的服务模式、macOS 的特权 helper 都要单独卸载,否则会残留监听端口。
迁移后的验收清单
下面十项按顺序做一遍,能覆盖绝大多数迁移遗留问题。命令里的端口以默认值为准,改过端口就替换成实际值。
- 内核版本:
curl -s http://127.0.0.1:9090/version,返回的 version 字段应与安装的 tag 一致。 - 代理链路:
curl -I -x http://127.0.0.1:7890 https://www.gstatic.com/generate_204,返回HTTP/2 204表示链路通。 - 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 生效。 - 规则命中:打开界面的「连接」页,先访问一个国内站点看是否走 DIRECT,再访问一个境外站点看是否进入代理组。
- TUN 路由:Windows 执行
route print -4检查 TUN 网卡与 198.18.0.0 网段;Linux 执行ip route show table all | grep 198.18。 - 端口占用:Windows 用
netstat -ano | findstr :9090,macOS 与 Linux 用lsof -i :9090,确认只有一个进程监听。 - 订阅更新:手动触发一次更新,日志里不应出现 403、404 或 TLS 握手失败。
- 规则集落地:检查规则集目录下的文件体积不为 0,修改时间是刚刚。
- 开机自启:重启系统一次,确认客户端自动拉起,系统代理状态与重启前一致。
- 回退路径:断开代理节点,确认 DIRECT 规则下的站点仍可访问,说明分流没有全部压到代理组。
常见迁移故障与处理
订阅更新返回 403 或 404
多数是 User-Agent 不匹配。部分服务端按 UA 返回不同格式,新内核的默认 UA 与旧客户端不一致时,面板会直接拒绝。先在客户端的订阅设置里找 UA 下拉项,切到 clash 再试;其次是链接本身过期,回面板重新复制一份。
规则集下载失败
geodata-mode: true 时需要 geoip.dat、geosite.dat 或对应的 mmdb 文件,mihomo 会尝试自动下载到工作目录,网络受限时会失败。手动把文件放进工作目录,或在 geox-url 里换成可访问的地址。
TUN 模式起不来
- Windows:需要先安装服务模式,首次安装会一并释放 wintun.dll;装过旧版服务的,先在设置里卸载再重装。
- macOS:首次开启要在系统设置里批准网络扩展或特权 helper,一旦拒绝过,只能在设置里重置授权后重来。
- Linux:非 root 运行要给二进制加网络能力,
sudo setcap cap_net_admin,cap_net_bind_service+ep /usr/local/bin/mihomo。
启动即退出或配置未生效
先确认 9090 是否被旧进程占用,再检查配置文件的缩进与编码:YAML 用 Tab 缩进会直接解析失败,文件保存为 UTF-8 无 BOM。把日志级别调到 log-level: debug,日志会给出具体行号,比逐行比对配置文件快得多。
迁移的本质是把三样东西搬进新壳子:订阅链接、profile 文件、端口与模式习惯。这三样在手,客户端换几次都不影响日常使用;反过来,只记住界面上的开关位置,下次遇到停更还得从头摸一遍。