
快连OpenWrt固件如何无损升级并保留节点配置?
问题定义:为什么要“无损”升级
OpenWrt 的迭代节奏快,安全补丁与驱动优化几乎每月都有。对把kuailian(QuickLink)封装进固件、靠路由器 7×24 提供代理服务的用户来说,重新刷机意味着节点、分流规则、DNS 策略全部归零,手动补回至少半小时。无损升级的核心诉求只有一句话:刷完新固件,旧配置原样复活,且重启后业务 IP 不断流。
经验性观察:家用场景下,完整备份-升级-还原三步走,可把断网时间压到 90 秒内;若跳过备份验证,升级失败回滚时,需额外 15 分钟重配节点,得不偿失。
前置条件与兼容性清单
硬件
- 已刷入快连OpenWrt固件(截至当前的最新版本)且剩余 ROM ≥ 30 %;
- RAM ≥ 256 MB,确保升级时可同时挂载 overlay-backup 临时目录;
- USB 口或剩余空间 ≥ 100 MB,用于存放备份 tar。
软件
- kuailian 核心组件 ≥ v7.3.0,确保节点列表采用 JSON 单文件格式,便于整体迁移;
- 已安装官方仓库的
sysupgrade与luci-app-attendedsysupgrade; - SSH 可登录,或本地串口可用,作为“最后一道门”。
升级思路:双保险策略
OpenWrt 官方提供 sysupgrade -F -b /tmp/backup-$(date +%F).tar 指令,可打包整个 overlay 分区(含快连节点配置、分流脚本、自定义防火墙规则)。但 overlay 里混杂了内核模块与临时日志,直接回刷可能把旧驱动写回新系统,出现“版本漂移”。因此采用A/B 双保险:
- 保险 A:用
sysupgrade -b做全量 tar,兜底用; - 保险 B:单独导出kuailian 配置目录(
/etc/quicklink/)与防火墙自定义片段,升级后优先还原 B,若系统异常再退回到 A。
操作路径:CLI 极简五步
以下命令均在路由器本地 SSH 执行,桌面端仅需一个 SCP 工具(Windows 可用 WinSCP,macOS 直接终端 scp)。
Step 1 创建快照点
说明:zstd 压缩率比 gzip 高 15 % 左右,百兆配置可压到 20 MB 内;外接 U 盘挂载在 /mnt/sda1,路径因设备而异。
Step 2 单独备份快连配置
节点列表、分流策略、Kill-Switch 白名单均位于 /etc/quicklink/;ipset 用于流媒体解锁,还原后需重新注入。
Step 3 拉取新固件
若使用 LuCI 在线编译,可直接在“固件定制”页面勾选“保留配置”并下载,但经验性观察:在线编译偶尔缺驱动,本地 CLI 更稳。
Step 4 执行无损升级
-F 强制跳过版本校验,-c 自动把当前 /etc 目录以 tar 形式写进新固件的 overlay。官方文档提示:若空间不足,-c 会失败,因此先确认 df -h / 可用 ≥ 50 MB。
Step 5 验证节点是否复活
路由器重启后 30 秒,SSH 登录:
若能看到“香港 01|Tokyo 03”等别名,说明配置已还原;若列表为空,则手动还原 Step 2 的 tar:
LuCI 图形界面分支路径
部分用户更习惯 Web 操作,可在浏览器进入:
- 系统 → 备份/升级 → 生成备份(下载 tar 到本地);
- “刷写新固件”栏上传 bin,取消“保留配置”复选框(因我们要手动还原,避免冲突);
- 刷完后重新上传第 1 步的 tar,在“上传备份档案”区域执行还原;
- 重启快连插件:服务 → QuickLink → 重载配置。
注意:LuCI 还原会把整个 tar 覆盖回 overlay,若新旧内核模块不一致,可能触发 kmod 版本警告;CLI 的“保险 B”方式更轻量。
例外与副作用:何时不该用保留配置
大版本跳变
OpenWrt 22 → 24 这类主版本升级,防火墙语法、swconfig → DSA 接口模型均发生断裂,保留配置极易导致 LAN 失联。此时应:
- 仅备份kuailian 与自定义脚本;
- 刷机时不保留配置,让新固件生成干净结构;
- 事后用 sdiff 逐行对比还原。
overlay 膨胀 > 80 %
经验性观察:当 overlay 占用超过 80 %,sysupgrade -c 会在压缩阶段失败,路由器直接重启却未刷入新固件,陷入“半砖”。此时应先清理:
验证与回退:可复现的检查表
| 检查项 | 通过阈值 | CLI 命令 |
|---|---|---|
| 节点列表长度 | ≥ 升级前 95 % | quicklink-cli node list | wc -l |
| DNS over HTTPS3 解析 | < 200 ms | kdig -d @127.0.0.1 +https google.com |
| Kill-Switch 生效 | 掉线后 3 s 内断网 | ip link set wan down && ping -c 10 1.1.1.1 |
| 家庭组在线设备 | = 升级前数量 | cat /tmp/quicklink/family.json | jq '.clients|length' |
若任一项低于阈值,执行回退:重新刷回旧固件,再用保险 A 的 overlay tar 完整覆盖,即可回到升级前状态。
与第三方 Bot 协同:自动备份到 Telegram
路由器内安装 curl 后,可把 Step 2 的 quicklink-cfg.tar 每日推送到频道,作为异地备份。示例脚本(token 与 chat_id 请替换为真实值):
提示:为最小化权限,可新建频道并设置为“仅管理员”,避免配置外泄。
适用/不适用场景清单
- 适用:家庭 NAS、工作室旁路由、高校宿舍单线路,配置变更频率低,升级周期 ≥ 3 个月;
- 不适用:数据中心多租户网关、合规要求“刷机必清零”场景、overlay 已报警“只读”的 NAND 老化设备。
最佳实践 7 条(速查表)
- 升级前 24 h 不改动节点列表,确保备份一致性;
- 永远准备“保险 A+B”两份备份,U 盘 + Telegram 异地;
- 大版本升级先读 Release Notes,确认防火墙语法变更;
- overlay 占用 > 70 % 时,先清理再升级,避免 tar 失败;
- 升级后 5 分钟内完成四项验证(见上表),发现问题立即回退;
- 家庭组账号开启“设备指纹”,防止升级后 MAC 变更导致 429 限速;
- 把本文命令写成
upgrade.sh,放在/root,下次直接跑脚本,减少手敲错误。
FAQ(结构化数据)
升级后节点列表为空,但备份文件存在,如何快速还原?
SSH 登录后执行 tar -C / -xf /mnt/sda1/quicklink-cfg.tar && /etc/init.d/quicklink restart,30 秒内可见节点。
sysupgrade 提示“Image checksum mismatch”怎么办?
加上 -F 强制跳过校验;若仍失败,重下固件,确认型号对应 x86/64 或 armvirt。
能否直接保留 overlay 而跳过手动还原?
小版本(如 r24000 → r24100)可勾选“保留配置”,但大版本或内核号变化时,建议手动还原,防止 kmod 冲突。
家庭组设备上限 6 台,升级后计数归零,会触发 429 吗?
不会。设备指纹文件同时备份,还原后服务器仍识别原设备;若未备份,需重新绑定,可能短暂触发限速。
U 盘断电导致备份 tar 损坏,如何校验完整性?
备份时加 zstd -19 --rm 并生成 .sha256 文件;升级前用 sha256sum -c 验证,失败即重新备份。
收尾:下一步行动
无损升级并非黑科技,而是“备份-验证-回退”三板斧的纪律化。把本文脚本与检查表落地成你的 SOP,下次快连OpenWrt固件更新,就能在喝一杯咖啡的时间里完成升级,节点不掉、设备不断、家人无感。立即打开 SSH,把 upgrade.sh 写进路由器,下一次安全补丁发布时,你会感谢今天提前准备的自己。