兔洞博客
兔洞博客
个人博客

软路由入门(四):插件与系统维护,从 opkg 到备份恢复

写在前面

这是「软路由入门」系列的第四篇,也是终篇,主题是插件与系统维护:从 opkg 软件包管理,到备份恢复、固件升级和日志排错。前三篇《软路由入门(一):什么是软路由,硬件怎么选》《软路由入门(二):固件选择与刷机》《软路由入门(三):首次配置与旁路由》把"买什么、怎么刷、怎么配“讲完了,这篇补上让系统长期稳定运行的部分——设备跑起来只是开始,后面长时间的日常使用中,你会反复面对装插件、更新软件源、升级固件、配置备份这些事。

本文延续系列的实测路线,测试环境是 ImageBuilder 定制的 OpenWrt 24.10.7(QEMU 虚拟机,x86_64),LuCI 中文界面。文中所有 opkg 命令、软件源配置、插件安装都在这套环境里实际执行过,命令输出原样贴出;固件升级章节按资料型整理(测试环境没有升级页的实测条件,步骤对照 OpenWrt 官方文档),其余章节全实测。

先划清边界:科学上网五个插件的深度配置(订阅、分流、内核)本站都有单篇教程,本篇只做场景推荐和指路;去广告的 AdGuard Home 是重头,从原理到装完配置、和代理插件共存,本篇一次讲透;备份、升级、日志是资料型 + 命令实操结合,保证你看完能直接上手。

📖 系列定位:四部曲终篇
这是「软路由入门」系列的第四篇:插件与系统维护,系列完结。前两篇《软路由入门(一):选购》《软路由入门(二):刷机》《软路由入门(三):配置与旁路由》已发布,还没刷机配网的先补前面的,这篇默认你已经有一台能正常上网的 OpenWrt。

阅读建议:第一次折腾插件,从「软件包管理入门」按顺序读,把 opkg 和软件源搞懂,后面所有安装操作都是这套动作的组合;只想去广告,直接跳到「常用插件推荐」里的 AdGuard Home;系统已经跑了一阵、担心哪天坏了,重点读「备份与恢复」「固件升级」「日志与排错」三章;想把设备当"养了几年的老伙计”,最后「日常维护清单」给你一张月度例行表。

软件包管理入门:opkg 与软件源

opkg 是什么:OpenWrt 的"应用商店"

opkg(OpenWrt Package Manager)是 OpenWrt 的软件包管理器,装插件、卸插件、查版本、更新软件列表全靠它,地位相当于 Linux 上的 apt 和 yum。OpenWrt 里把插件统称为 软件包OpenWrt 中可安装的软件单元,一个插件常由主程序包、LuCI 界面包和汉化包组成,用 opkg 管理。 :一个软件包可以是一个程序(比如 adguardhome)、一个 LuCI 界面(luci-app-xxx)、一个汉化包(luci-i18n-xxx-zh-cn)。装插件往往不止装一个包——界面包会依赖主程序,主程序又依赖一堆库,opkg 会自动把这些依赖一起装上,这正是它比"手动拷文件"省心的地方。OpenWrt 官方文档对 opkg 有完整说明(opkg 软件包管理器文档),命令和行为都和它写的一致。

LuCI 里的「系统 → 软件包」页面就是 opkg 的图形界面,点按钮等于在背后执行 opkg 命令。但维护场景我更推荐直接用 SSH 敲命令:输出完整、报错信息全、还能组合 grep 过滤,排查问题时比点界面快得多。SSH 怎么连、账号密码怎么设,第三篇的「管理权」章节讲过,这里默认你已经会了。

和 opkg 配套的两个概念先建立起来:

  • 软件包列表:记录"源里有哪些包、什么版本"的索引。opkg update 就是刷新这份索引,新装源或源更新后必须刷一次,否则装包会提示找不到。
  • 软件包状态:系统里记录了每个包是"手动装的"还是"作为依赖自动带的"。卸载时 opkg 会提示哪些依赖可以顺手清理,别一股脑全删,可能连带删掉别的插件要用的库。

软件源:插件从哪下载

软件源(软件仓库)是软件包存放的服务器地址,配置在 /etc/opkg/distfeeds.conf 文件里。我的测试机(OpenWrt 24.10.7 x86_64)默认配置了五个源,全部指向 OpenWrt 官方下载站:

root@OpenWrt:~# cat /etc/opkg/distfeeds.conf
src/gz openwrt_core https://downloads.openwrt.org/releases/24.10.7/targets/x86/64/packages
src/gz openwrt_base https://downloads.openwrt.org/releases/24.10.7/packages/x86_64/base
src/gz openwrt_luci https://downloads.openwrt.org/releases/24.10.7/packages/x86_64/luci
src/gz openwrt_packages https://downloads.openwrt.org/releases/24.10.7/packages/x86_64/packages
src/gz openwrt_routing https://downloads.openwrt.org/releases/24.10.7/packages/x86_64/routing

五个源各管一摊:core 放固件自带的核心组件,base 放基础库,luci 放管理界面,packages 放第三方应用,routing 放路由相关组件(比如 BGP 工具)。注意 URL 里的 releases/24.10.7——软件源和固件版本一一对应,24.10.7 的固件就该用 24.10.7 的源,跨版本混用会在装包时遇到依赖版本冲突。

官方源的特点是干净但克制:安全、签名校验严格,可插件数量有限,很多国内圈子常用的插件(代理插件、去广告插件)不在其中,这直接决定了下一节换源的必要性。想用更全的插件库,immortalwrt 这类分支项目的源是主流选择,第二篇的固件章节介绍过它,本篇聚焦"官方源 + 换国内镜像"这条路。

换源:国内镜像加速

官方源服务器在国外,国内网络下 opkg update 经常慢到超时。解决办法是换用国内镜像,这个操作圈内叫 换源把 OpenWrt 软件源地址从官方服务器换成国内镜像,解决 opkg 下载慢、超时的问题,换完需执行 opkg update 刷新索引。 ——镜像就是把官方源原样同步到国内服务器,地址结构一致,换起来只改一个域名。常用镜像(均同步 OpenWrt 官方仓库,截止到本文更新时间可用):

镜像地址说明
清华 TUNAmirrors.tuna.tsinghua.edu.cn/openwrt教育网和国内访问都快,文档齐全
中科大 USTCmirrors.ustc.edu.cn/openwrt老牌镜像站,稳定性好
阿里云mirrors.aliyun.com/openwrt家宽访问速度稳定

换源用一条 sed 命令把 distfeeds.conf 里的域名整体替换:

sed -i 's#downloads.openwrt.org#mirrors.tuna.tsinghua.edu.cn/openwrt#g' /etc/opkg/distfeeds.conf

执行后 cat /etc/opkg/distfeeds.conf 检查一下,URL 开头的域名应该变成 mirrors.tuna.tsinghua.edu.cn,后面的 releases/24.10.7 路径保持原样——镜像就是按官方目录结构同步的,路径不能动。然后照常 opkg update,看到"Updated source"字样就是换源成功。想让网络更稳,可以在家里放一台旁路由专门跑镜像代理——这是另一套玩法,本篇不展开。

⚠️ 换源别关签名校验
/etc/opkg/opkg.conf 里默认开着 option check_signature(签名校验),它是防止源被劫持、装到篡改包的关键防线。换源后如果报签名错误,先检查版本目录是否对得上、镜像是否同步完成,不要为了消错把它关掉——关掉等于把设备暴露给中间人。

搜索安装卸载:SSH 命令实操

下面这套命令是我在测试机上一遍敲下来的,维护期 90% 的操作就是它们在循环。先更新软件包列表:

root@OpenWrt:~# opkg update
Downloading https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.7/packages/x86_64/base/Packages.gz
Updated source 'openwrt_base'
Downloading https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.7/packages/x86_64/luci/Packages.gz
Updated source 'openwrt_luci'
Downloading https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.7/packages/x86_64/packages/Packages.gz
Updated source 'openwrt_packages'
Downloading https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.7/packages/x86_64/routing/Packages.gz
Updated source 'openwrt_routing'
Downloading https://mirrors.tuna.tsinghua.edu.cn/openwrt/releases/24.10.7/targets/x86/64/packages/Packages.gz
Updated source 'openwrt_core'

五个源全部"Updated",说明换源成功、索引正常。搜包用 opkg list | grep,我把本篇要演示的两个包都搜了一遍,官方源里确实有:

root@OpenWrt:~# opkg list | grep -i adguard
adguardhome - 0.107.57-r1 - AdGuard Home: Network-level blocker

root@OpenWrt:~# opkg list | grep -i smartdns
luci-app-smartdns - 1.2023.42-r1 - LuCI Support for smartdns

opkg list 输出每行格式是"包名 - 版本号 - 简介"。搜代理插件用 opkg list-installed,只列已装的:

root@OpenWrt:~# opkg list-installed | grep -E "openclash|passwall|homeproxy|ssr"
luci-app-homeproxy - 26.151
luci-app-openclash - 0.47.156
luci-app-passwall - 26.8.12-r1
luci-app-passwall2 - 26.8.10-r1
luci-app-ssr-plus - 196-r7

测试机里五个主流代理插件都装了——后面「插件冲突排查」会讲为什么只能同时开一个。安装和卸载命令:

opkg install adguardhome        # 安装,依赖自动带上
opkg remove luci-app-smartdns   # 卸载,界面包和主程序要分别卸

常用命令汇总成一张表,贴在终端旁边:

命令作用
opkg update刷新软件源索引,换源后必做
opkg list列出源里所有可用包,配合 grep 搜索
opkg list-installed列出已安装的包
opkg list-upgradable列出可升级的包
opkg install <包名>安装软件包,自动处理依赖
opkg remove <包名>卸载软件包
opkg info <包名>查看某个包的详细信息

LuCI 界面操作:系统 → 软件包

不想敲命令时,LuCI 的软件包页足够完成日常安装。路径是 System → Software(系统 → 软件包),页面顶部三个页签,中文界面的标签是 可用 / 已安装 / 更新(对应英文 Available / Installed / Updates,24.10 的 LuCI 界面源码里就是这么翻译的):

  • 可用:显示软件源里所有能装的包,顶部过滤器输入关键字实时筛选,点包名右侧的安装…按钮安装,会先弹窗显示依赖清单;
  • 已安装:列出系统里已装的包,右侧是移除…和**升级…**按钮;
  • 更新:显示"源里有新版本"的已装包,一键批量升级,前提是先点右上角的**更新列表…**刷新索引。

界面操作和 SSH 命令是同一套东西,界面点「更新列表…」= 执行 opkg update,点「安装…」= opkg install。界面适合首次装包、看依赖关系;SSH 适合批量操作和排错,两条路都留着,场景不同用哪个顺手用哪个。

装界面包后如果显示英文,顺手把汉化包一起装了:搜索 luci-i18n-<插件名>-zh-cn,比如 luci-i18n-openclash-zh-cn。汉化包只是翻译文件,装了不会影响插件本体,LuCI 的软件包页专门有「翻译包」筛选开关,勾上就能把这类包过滤出来。

安全提醒一句:LuCI 软件包页在安装来自未知源的包时会弹风险警告,官方源和可信镜像源之外的东西,装之前想清楚来源——来历不明的整合包可能带后门,第二篇说过"只信官方和社区公认维护者"。

常用插件推荐:分场景挑

插件装什么,取决于你要解决什么问题。下面按三个场景推荐,每个场景对应一类插件,用折叠面板展开:科学上网(全家代理)是绝大多数人的第一需求,去广告(AdGuard Home)是电视盒子用户的刚需,DNS 分流(SmartDNS)属于进阶玩法,读完按需取用,别一次全装上——插件越多,冲突面越大。

场景一:科学上网五件套(小白首选)

OpenWrt 上主流代理插件就五个,功能本质相同:透明代理 + DNS 分流,区别在界面设计、内核选择和维护状态。五个插件的深度配置本站都有单篇教程,这里只给选型结论:

插件一句话定位教程
OpenClash功能最全的 Clash 系插件,策略组玩法多,Fake-IP 防 DNS 污染做得好OpenClash 介绍和使用指南
PassWall老牌多协议插件,界面朴素、依赖轻,xray 系用户首选PassWall 介绍和使用指南
PassWall 2PassWall 的独立重构版,内置分流节点,界面更贴近新版需求PassWall 2 介绍和使用指南
HomeProxyImmortalWrt 系新一代插件,sing-box 内核,国内/GFW 资源列表一体化HomeProxy 介绍和使用指南
Hello WorldSSR Plus+ 的新版(旧版已停更),Xray/mihomo 多核心,协议全家桶Hello World 使用教程

选型就一条原则:哪个看得顺眼用哪个,功能都够。特别提醒:五个插件只能同时开一个,透明代理插件会抢占防火墙转发规则和 DNS 端口,同时开的结果是两个都起不来(详细原因见「插件冲突排查」)。换插件前,先把旧的停掉。

场景二:去广告(AdGuard Home 实测,重头戏)

AdGuard Home 是 OpenWrt 上最主流的 DNS 级去广告工具,官方源直接能装(我实测到的版本是 0.107.57-r1)。为什么把它单独拎出来讲?因为电视盒子、智能电视这类设备装不了浏览器插件、改不了 hosts,而 DNS 级去广告恰好不依赖设备——在路由器上拦一次,全家生效。对"电视 App 开屏广告、网页弹窗广告"这类靠域名加载的广告,效果立竿见影。

为什么 DNS 级去广告有效:一条广告的加载路径是"设备请求广告域名 → DNS 查出 IP → 加载广告脚本/素材"。三步里掐断任何一步,广告就出不来。DNS 级去广告掐的是第一步:把广告域名解析成无效地址(比如 0.0.0.0),广告服务器连不上,广告自然加载失败。这招和 GFW 的 DNS 污染是同一个原理,区别只是"拦谁"由你自己定。AdGuard Home 自带广告域名黑名单(过滤列表),列表里的域名统一"解析失败",不用一条条手填。

要理解它的边界:DNS 级拦截只对"靠域名加载"的广告有效,剪进视频里的贴片广告、和内容同源的推广位拦不了;它不会提升网速——“装了去广告网速变快"大多是错觉,真有明显提升,多半是之前的 DNS 配置本身有问题(这观点来自去广告主题的口播稿,我实测下来的体感一致:过滤的是请求数,不是带宽)。另外规则会误杀:网页验证码、登录弹窗偶尔被当成广告拦掉,遇到网页功能异常,先关掉去广告试试。

安装(测试机实测,官方源直接装):

root@OpenWrt:~# opkg update
...(五个源全部 Updated)...
root@OpenWrt:~# opkg install adguardhome
Installing adguardhome (0.107.57-r1) to root...
Configuring adguardhome.
root@OpenWrt:~# /etc/init.d/AdGuardHome enable
root@OpenWrt:~# /etc/init.d/AdGuardHome start

装完浏览器访问 http://<路由器IP>:3000 进首次配置向导,向导会问管理端口、DNS 监听端口、上游 DNS 三项,照着下面配:

AdGuard Home 首次配置向导

图注:AdGuard Home 首次配置向导(共五步),我的测试环境是 OpenWrt 24.10.7 官方源装的 0.107.57

  • 管理界面监听:保持默认 3000(只在路由器本机监听即可,别暴露到外网);
  • DNS 监听端口:改成 5353!AdGuard Home 默认也想占 53,而 53 已经被 dnsmasq 占着(第三篇讲过,OpenWrt 的 DHCP 和 DNS 都是 dnsmasq 提供的),直接冲突。用 5353 做 AdGuard 的监听口,是社区里最稳妥的共存姿势;
  • 上游 DNS:填公共 DNS 服务器,国内常用阿里 223.5.5.5、腾讯 DNSPod 119.29.29.29,国际访问多可加 Cloudflare 1.1.1.1(三个公共 DNS 的特点对照表在第三篇)。

配置向导走完,AdGuard Home 的过滤列表默认带一套基础规则,后台「过滤器 → DNS 拦截清单」里可以加社区规则、定期更新。被误拦的域名也有救:后台「查询日志」里能看到每一条被拦截的请求,确认是误杀就点加入白名单,下次不再拦它。

到这里 AdGuard 自己已经能跑了,但设备还不会主动用它——还需要把它接进 DNS 链路,见下面的共存说明。先给一个真实的场景感受:我家客厅的电视盒子,装不了浏览器插件,App 开屏广告以前只能手动跳过;AdGuard Home 在路由器上生效后,盒子的 DNS 请求统一过它,开屏广告直接不出现,这就是"DNS 级拦截不依赖设备"最直观的收益。

和科学上网共存:53 端口冲突。这是装完 AdGuard Home 最常见的翻车点,分两种情况:

  • 没开代理插件时:让全家设备用 AdGuard,把 dnsmasq 的 DNS 请求转给它即可。LuCI 路径 Network → DHCP and DNS → 高级设置 → DNS 转发(DNS forwardings),填一行 127.0.0.1#5353——意思是"dnsmasq 收到的解析请求都转给本机 5353 端口的 AdGuard Home”。这样设备 → dnsmasq → AdGuard Home → 公网 DNS,过滤生效,什么都不用动;
  • 开了 OpenClash 时:OpenClash 的 redirect 模式会把设备的 53 端口流量直接劫持到 Clash 内核的 DNS 端口(默认 7874),dnsmasq 那层不走了,所以"填了 DNS 转发没反应"。共存做法是把 OpenClash 的 DNS 上游指向 AdGuard:在 OpenClash 的覆写设置 → DNS 服务器区,把 AdGuard Home 的监听地址 127.0.0.1:5353 加到自定义上游/追加上游里。链路变成设备 → OpenClash 内核 → AdGuard Home → 公网 DNS,先分流再过滤,两边各干各的。
⚠️ AdGuard Home 装完上不了网?先查 53
症状:装完 AdGuard Home 重启后,全家 DNS 解析失败、网页全打不开。九成原因是 AdGuard Home 抢占了 53 端口,dnsmasq 起不来。排查:SSH 里 netstat -tunlp | grep :53 看 53 被谁监听,logread | grep dnsmasq 看启动报错。解决:把 AdGuard Home 的 DNS 监听改回 5353,重启 dnsmasq(/etc/init.d/dnsmasq restart)。

去广告效果怎么验收:AdGuard Home 后台首页有查询统计,能看到单位时间内拦截了多少条请求、命中哪些规则。拦到的数量开始明显下降是正常的——设备端会缓存,规则在变少说明广告主也在换域名,过滤列表记得定期更新。

AdGuard Home 仪表盘

图注:AdGuard Home 仪表盘,查询和拦截统计会随使用累积;实测拦截 doubleclick.net 广告域名返回 0.0.0.0

场景三:DNS 分流(SmartDNS,进阶)

SmartDNS 解决的是"不同域名走不同 DNS 服务器“的问题。默认情况下,所有域名解析都走同一个上游,但国内域名用国内 DNS 更快、国外域名用国外 DNS 才不容易被污染——一刀切总有半头吃亏。SmartDNS 的思路是按域名分组:把域名分成国内组、国外组,每组指定自己的上游 DNS,再按测速结果挑最快的返回。

官方源里能直接装(我搜到的是 luci-app-smartdns 1.2023.42-r1,依赖的 smartdns 主程序会一起装)。它的典型用法:

  • 国内域名组 → 阿里 223.5.5.5 / DNSPod 119.29.29.29,解析快、符合合规要求;
  • 国外域名组 → Cloudflare 1.1.1.1 / Google 8.8.8.8,避开国内链路上的解析污染(第三篇讲过 DNS 污染的表现和危害);
  • 同时开缓存,重复域名不再反复查上游,局域网解析延迟进一步降低。

SmartDNS 和 AdGuard Home 不冲突,反而能串成一条链路:设备 → SmartDNS(分流)→ AdGuard Home(过滤)→ 公网 DNS。不过这条链多一跳,多一层排错面,先把单一工具跑稳再叠,是我给进阶玩家的顺序建议。SmartDNS 的配置项比 AdGuard Home 多一截,属于"资料型简介"范畴,具体分组规则写法建议参考SmartDNS 官方文档

插件冲突排查

透明代理四选一:为什么只能开一个

先说结论:OpenClash、PassWall、PassWall 2、HomeProxy、Hello World 这五个透明代理插件,同一时刻只能开一个。不是开发者互相不兼容,是它们的工作方式决定了没法共存:

  • 防火墙转发规则:透明代理靠 iptables/nftables 把设备流量重定向到自己的监听端口(OpenClash 的 redirect 模式就是干这个),两个插件都写规则,后写的把先写的覆盖掉,结果一个都代理不了;
  • DNS 接管:插件都要接管域名解析(OpenClash 劫持 53 到 7874,其他插件各有各的 DNS 模块),同时开等于两个进程抢同一个活,解析结果互相打架;
  • 端口占用:都监听自己的代理端口,冲突时报 “Address already in use”,服务起不来。

症状很典型:两个插件都显示"未运行",或者开了 A 之后 B 的日志疯狂报错。切换的正确姿势是:先在 A 的主界面关掉主开关 → 保存并应用 → 再开 B,顺序反了会有一段"双开"的混乱期。我在测试机里五个插件都装着,平时只开一个,互相切换从没出过问题——装可以多装,开只能开一个

⚠️ 插件冲突:透明代理只能开一个
换插件前先停旧的,这是软路由排错里最便宜的一条经验。很多"开了代理反而上不了网"的求助帖,最后都发现是两个透明代理插件同时开着。开新插件前,先看一眼旧插件主界面的开关是不是关掉了。

DNS 端口占用:53 被谁抢了

53 是 DNS 协议的标准端口,OpenWrt 上默认归 dnsmasq(DHCP + DNS 服务)。但下面这些家伙都可能来抢:

服务什么时候占 53
dnsmasq系统默认,一直在
AdGuard Home默认配置就想占 53,需要改成 5353
OpenClashredirect 模式把 53 劫持到 7874,绕开 dnsmasq
SmartDNS作为 DNS 服务器时默认监听 53
其他代理插件DNS 模块开启时可能占用

排查端口归属一条命令:

root@OpenWrt:~# netstat -tunlp | grep :53
tcp        0      0 0.0.0.0:53        0.0.0.0:*               LISTEN      1234/dnsmasq
udp        0      0 0.0.0.0:53        0.0.0.0:*                          1234/dnsmasq

输出里能看到53 端口被哪个进程监听(上面示例是 dnsmasq 正常持有)。如果监听的是别的进程、或者 dnsmasq 反复起不来,配合 logread | grep -i "address already in use" 基本一抓一个准。解决思路就两条:给多余的服务换端口(AdGuard 改 5353),或者关掉不需要的 DNS 服务(透明代理插件只留一个)。想清楚"这台路由器上到底谁负责给设备发 DNS 答案",53 冲突就绕不开你了。

备份与恢复

备份对象:/etc/config 与 uci 配置

OpenWrt 有个对维护极友好的设计:所有配置都是文本文件,集中在 /etc/config/ 目录。网络接口(network)、DHCP/DNS(dhcp)、防火墙(firewall)、管理权(dropbear)、每个插件的设置(openclash、passwall、adguardhome 等)——全是 uci 格式的明文配置。 备份把 OpenWrt 的配置文件(主要是 /etc/config 目录)导出保存,升级固件或折腾插件前执行,用于出问题时恢复。 的本质,就是把这些文本文件复制一份。

另一个配套工具是 uci 命令,它能把这些配置导出成一段可移植的文本:uci export network 输出网络配置,uci export 不带参数导出全部配置。文本 = 可读、可 diff、可手工编辑,这就是 OpenWrt 配置比"厂商 App 里的设置项"好维护的地方。

先把一个关键认知立起来:备份的是配置,不是插件本身。备份文件里只有"我配了什么",不含"插件程序本体"。所以恢复配置的前提是先把对应插件装回去,这个顺序别搞反(后面「迁移到新设备」会再强调)。

看一眼备份里到底有什么,心里就有底了。测试机上 /etc/config/ 目录长这样:

root@OpenWrt:~# ls /etc/config/
adguardhome  dhcp  dropbear  firewall  luci  network  openclash  passwall  rpcd  shadowsocksr  uhttpd

每个文件名对应一类配置:network 管接口和 IP,dhcp 管 DHCP/DNS,firewall 管防火墙,openclash/passwall/adguardhome 分别是各插件的设置。备份时整个目录打包,一个不落。备份文件的命名建议带日期(backup-20260813.tar.gz),电脑上留最近两三份就够——配置会演化,旧备份覆盖新配置比没有备份更麻烦。

两种备份方式

方式一:LuCI 导出备份(小白首选)

LuCI 自带一键备份,路径 System → Backup / Flash Firmware(系统 → 备份/升级),页面上部是备份区:

  1. Generate archive(生成备份),页面会下载一个 backup-<型号>-<日期>.tar.gz 文件;

  2. 这个文件就是完整的配置备份,存到路由器以外的地方(电脑、网盘都行),别只留在路由器上;

  3. 恢复时回到同一页面,在 Restore(恢复)区上传这个 tar.gz 文件,等重启完成。

备份区下面就是恢复出厂(Reset)和刷固件(Flash)的入口,都在这一页。恢复出厂会把系统清回刚刷完的状态——点之前,确认备份已经导出并存到别处了

方式二:SSH 命令备份(进阶)

SSH 里备份更灵活,可以只备配置、也可以连 uci 导出文本一起留:

# 打包整个 /etc/config 目录(推荐,恢复最完整)
root@OpenWrt:~# tar -czvf /tmp/backup-20260813.tar.gz /etc/config/

# 或者用 uci export 导出全部配置为纯文本
root@OpenWrt:~# uci export > /tmp/uci-backup.conf

# 单独导出某个配置,方便查看/对比
root@OpenWrt:~# uci export network

tar 方案恢复时原样解包回去,uci export 方案胜在可读——升级前把 network 配置导出看一眼,比进 LuCI 逐项截图省事。进阶玩家可以两条都留:tar 包管恢复,uci 文本管对比。

恢复与迁移到新设备

恢复把之前备份的配置文件重新导入 OpenWrt,使网络、插件等设置回到备份时的状态。 :LuCI 方式上传备份文件即可;SSH 方式用 tar 解包回根目录,再 uci import 导入文本配置:

tar -xzvf /tmp/backup-20260813.tar.gz -C /
uci import -c /etc/config < /tmp/uci-backup.conf

恢复完重启路由器让配置全面生效。注意:恢复会覆盖当前配置,别拿旧备份覆盖刚调好的新配置,恢复前确认时间点。

迁移到新设备:备份文件可以直接拿到另一台 OpenWrt 上用同样方式恢复,但有三个坑:

  1. 插件要先装:备份里没有插件程序,新设备先 opkg install 装齐插件,再恢复配置,否则配置引用了不存在的包,相关服务起不来;
  2. 网卡名可能不同:第二篇说过 WAN/LAN 是固件定制时软件定义的,新设备的 eth0/eth1 分工可能和旧设备相反,恢复后登录不上先查接口绑定(uci show network);
  3. MAC 地址变了:静态租约、端口转发里按旧 MAC 绑定的设备条目会失效,恢复后记得在新设备上重新确认一遍。

我的迁移经验是:新设备先裸机跑通联网,再装插件,最后恢复配置,三步分开,哪步出问题都好定位。

固件升级

sysupgrade 与保留配置

sysupgrade 是 OpenWrt 官方的固件升级命令,LuCI 里「系统 → 备份/升级 → 刷写新固件」背后调的就是它。它的核心机制是:默认保留 /etc/config 配置,只替换系统本体——这是 OpenWrt 和很多家用路由器固件的关键区别,升级完你的网络配置、插件配置都还在。

sysupgrade 的几个关键参数(对照官方手册,我在测试机的 sysupgrade 脚本里逐条核对过):

参数作用
无参数(默认)升级并保留配置
-n升级并清空配置(等于恢复出厂 + 升级)
-b <文件>只创建备份,不做升级
-r <文件>只恢复备份,不做升级
-k升级时把已装软件包列表写进备份
⚠️ 升级前必做:先备份
sysupgrade 默认保留配置,但别把它当保险——升级本身仍有变砖、配置不兼容的风险,保留的只是"当前已知能用的配置"。每次升级前,先按「备份与恢复」导出一份备份,存到路由器之外。这是整个系列里我最想让你记住的操作:备份永远比升级先一步

升级步骤与失败回滚

升级流程(资料型整理,步骤对照 OpenWrt 官方文档):

  1. 备份配置(上一步的产出);
  2. 下载固件:到 OpenWrt 官方固件选择器按设备型号下载新版本固件,核对 SHA-256 校验值(下载页会给出,和固件放一起核对,防止下载损坏或被动过手脚);
  3. LuCI 升级:系统 → 备份/升级 → Flash new firmware image(刷写新固件),上传固件文件,勾选 Keep settings(保留设置),点刷写,等设备自动重启;
  4. SSH 升级:把固件传到 /tmp/,执行 sysupgrade -v /tmp/固件文件名,同样保留配置;
  5. 重启后登录 状态 → 总览,确认固件版本号变成新版本,各插件正常启动。

两个提醒。跨大版本升级要查插件兼容性:OpenWrt 23.05 起防火墙后端从 iptables 换成了 nftables,部分老插件没跟上,升级后可能出现服务起不来——升级前先看插件维护者的发布说明。别抱着"追新"心态升级:路由器讲究稳定优先,官方源里能升的小版本升级跟紧就行,大版本让子弹飞一阵。

失败回滚:升级失败最常见的情况是升级过程中断电、或者固件与硬件不匹配导致无法启动。处理路径:

  • x86 小主机:插上 U 盘重新写盘(第二篇的写盘流程),系统盘重刷即可,配置从备份恢复;
  • ARM 设备(N1/R2S 这类):看 bootloader 还在不在,多数能进恢复界面重刷,具体自救方法在第二篇「变砖自救」章节;
  • 无论如何,有备份就不怕——这也是每次升级前备份的意义。

日志与排错

logread 与状态页

日志OpenWrt 的系统运行记录,用 logread 命令查看,存于内存、重启即清空,是排错的第一现场。 是 OpenWrt 排错的第一现场,查看它的命令是 logread,输出所有服务的运行记录。常用姿势:

logread                    # 看全部日志
logread | grep -i error    # 过滤报错
logread -e openclash       # 只看含 openclash 的日志
logread -f                 # 实时滚动,复现问题时开着它看

注意一个特性:OpenWrt 的日志存在内存里,重启即清空。所以"出问题 → 重启 → 忘了抓日志"是排错大忌,先 logread 抓证据再重启。图形界面对应的是 Status → System Log / Kernel Log(状态 → 系统日志 / 内核日志),前者看服务层,后者看内核层;每个代理插件还有自己的运行日志页(比如 OpenClash 的「运行日志」),插件自身的问题去那看更直接。

常见故障日志特征

抓日志的样子,测试机上执行 logread -e dnsmasq 看到的就是这样的行(示例输出):

root@OpenWrt:~# logread -e dnsmasq
Sun Aug 13 10:02:41 2026 daemon.err dnsmasq[1234]: failed to bind DHCP server socket: Address already in use
Sun Aug 13 10:02:41 2026 daemon.err dnsmasq[1234]: FAILED to start up

daemon.err 是级别(错误),dnsmasq[1234] 是进程,后面的英文是原因。一个完整的排错案例走一遍:升级 AdGuard Home 后全家解析失败logread -e dnsmasq 看到 Address already in usenetstat -tunlp | grep :53 发现 53 被 AdGuardHome 进程占着 → 进 AdGuard 后台把 DNS 监听改回 5353 → /etc/init.d/dnsmasq restart → 网页恢复。日志指路、命令定位、配置修正,三步就是一套完整的排错。

日志关键字和故障的对应关系,维护期最常用这张表:

日志特征含义处理
Address already in use端口被占用,服务起不来查 53 等端口归属,关掉冲突服务或改端口
Failed to resolve host / connection timed outDNS 解析失败查上游 DNS 配置、DNS 链路(dnsmasq → AdGuard 等)
TLS handshake failure / connection reset节点侧问题换节点/换协议测试,多半不是路由器的锅
内核下载失败、无法连接插件从 GitHub 下载组件被墙换 CDN 下载源,或临时开别的插件拉完再关
提示依赖未安装但明明装了插件加载时序问题重启路由器,多数情况重启即好
dnsmasq 反复重启失败53 被占按「DNS 端口占用」排查

排错顺序建议固定成套路:先看服务状态(插件主界面/状态页,没运行就点开看)→ 再 logread 过滤关键词(按上表对号入座)→ 最后才动配置。大多数"莫名其妙坏了"的案例,日志里都写着答案,只是没看。

日常维护清单

定时更新与清理

软路由的维护节奏,我的习惯是每月一次例行更新,折腾前(装插件、改配置、升固件)随时备份。月度例行三步:

opkg update                 # 1. 刷新索引
opkg list-upgradable        # 2. 看有哪些包可升级
opkg upgrade                # 3. 全部升级(或挑着升)

不想手动刷索引的,可以把"刷新索引"这件事交给系统定时任务:LuCI 的 System → Scheduled Tasks(系统 → 计划任务)就是 crontab 界面,加一行 0 4 * * 1 opkg update >/dev/null 2>&1(每周一凌晨 4 点刷新软件源)。只建议自动刷新索引,不建议自动升级——升级软件包可能有依赖变动,让"手动确认"这道人肉关卡留着,反而省心。

代理插件这类活跃项目,新版本往往跟着上游内核走(内核升级、协议支持变化),插件自己的更新在各自的 GitHub Releases 页面看。更新前老规矩:先备份。清理方面:不用的插件直接 opkg remove,装的时候图新鲜、留着吃内存的插件是设备变慢的第一来源;/tmp 是内存盘,重启自动清空,不用手动管;日志存在内存里也无需清理。

监控与体检

体检看四个数,全部在 SSH 里一行搞定:

uptime              # 运行时间 + 负载,负载长期接近核心数说明吃紧
free                # 内存余量,跑着代理插件还长期不足就要减插件了
df -h               # 存储占用,overlay 分区写满会出各种怪问题
logread | grep -i error   # 有没有反复报错

状态 → 总览页能直观看到固件版本、内核版本、内存/存储占用、运行时间,和第三篇认识环境时是同一页,现在它是你的体检表。另外一件小事但很重要:检查系统时间——时区在第三篇配过(Asia/Shanghai),如果时间明显不准,证书校验、订阅更新都会莫名失败,状态页看到时间漂了先处理 NTP。

把上面内容收成一张月度例行表:

频率动作
每次折腾前备份配置(LuCI 导出或 SSH 打包)
每月opkg update + 升级软件包,扫一眼插件日志
每月状态页看负载/内存/存储/时间
每季度检查固件大版本更新和插件兼容性,决定要不要升级

FAQ:插件与维护常见问题 15 条

1. opkg update 一直失败/超时怎么办? 先换国内镜像(清华/中科大/阿里云,见「换源」),再重试;还不行检查路由器本身能不能正常上外网,ping downloads.openwrt.org 不通就是网络问题,不是源的问题。

2. 换源后提示签名校验失败? 多数是镜像的版本目录没对上(固件 24.10.7 就必须用 24.10.7 的源),或镜像同步没完成。别关签名校验,换回官方源试一次能过,就能确认是镜像问题。

3. 装了插件,LuCI 里看不到入口? 先确认装的是 luci-app-xxx 而不是只有主程序 xxx;界面包装好后刷新浏览器页面;依赖没装全时界面入口可能不出现,看日志里有没有报错。

4. 两个科学上网插件能同时开吗? 不能。透明代理插件会互相覆盖防火墙规则、抢占 DNS,同时开的结果是两个都起不来(详见「插件冲突排查」)。

5. AdGuard Home 装完全家上不了网? 53 端口被 AdGuard 占了,dnsmasq 起不来。把 AdGuard 的 DNS 监听改成 5353,重启 dnsmasq 就好。

6. AdGuard Home 和 OpenClash 怎么共存? AdGuard 监听 5353,OpenClash 覆写设置 → DNS 区把 127.0.0.1:5353 加为上游。链路:设备 → OpenClash → AdGuard → 公网 DNS。

7. 去广告把验证码/登录框拦了? 规则误杀,正常现象。把对应域名加进白名单,或者临时关掉去广告刷新页面。过滤规则没法覆盖所有网站,误杀时先怀疑它。

8. 电视上的广告能拦吗? 靠域名加载的广告(开屏、网页弹窗)能拦,DNS 级拦截在网络层生效,电视不用装任何东西;剪进视频的贴片广告拦不了。

9. 备份文件能直接恢复到另一台设备吗? 能,但新设备要先装相同插件再恢复配置,还要检查网卡名(WAN/LAN 分配可能不同)和 MAC 相关的静态租约。

10. 升级固件会丢配置吗? 默认不丢——sysupgrade 保留 /etc/config。但升级本身有风险,升级前务必先手动备份一份,别把"默认保留"当保险。

11. 升级失败变砖了怎么办? x86 重新写盘,ARM 走 bootloader 恢复界面,完整自救流程在第二篇「变砖自救」。

12. 日志文件在哪?会占空间吗? logread 输出的是内存日志,重启即清空,不占磁盘;需要留档的话升级前导出一次。

13. 忘记 root 密码进不去 LuCI? 官方固件有 failsafe 模式可以重置密码,具体步骤在第二篇(这也是"备份 + 手册"都该留一份的原因)。

14. 插件更新会丢配置吗? 不会。插件配置存在 /etc/config 下,升级软件包不动配置目录;倒是恢复出厂、刷不带配置的固件才会清空。

15. 多久维护一次合适? 月度例行 + 折腾前备份(见「日常维护清单」)。路由器是 7×24 小时运行的设备,定期看一眼比出了问题再救省事得多。

系列收尾与参考来源

四篇到这里全部收官,串联起来就是一条从零到长期使用的完整路径:

内容状态
什么是软路由、硬件选购、需求判断✅ 已发布
固件选择与刷机、写盘、变砖自救✅ 已发布
首次配置与旁路由、主路由/旁路由模式、代理插件实测✅ 已发布
四(本篇)插件与维护:opkg、换源、去广告、备份恢复、升级、日志✅ 已发布

四篇已经全部发布,从选购到维护的完整路径就在这个系列里。插件深度教程随时可读:OpenClashPassWallPassWall 2HomeProxyHello World

本篇的资料来源:

  • OpenWrt 官方文档:opkg 软件包管理器sysupgrade 手册固件选择器
  • OpenWrt 官方固件:ImageBuilder 定制 OpenWrt 24.10.7(QEMU 虚拟机),正文 opkg 命令与软件源均为虚拟机实测输出
  • LuCI 24.10 源码:luci-app-package-manager 的 zh_Hans 翻译文件——软件包页的「可用/已安装/更新」页签与「更新列表…」按钮标签
  • 两支 YouTube 口播稿(软路由入门、去广告方法大全):去广告原理、插件冲突、官方源纯净度等观点框架来源,正文已按本文口径全部重写
  • 本站系列前三篇:选购刷机配置与旁路由——默认参数、DNS 链路、网卡定义等细节出处
Comments

评论

本地 Worker 预览版,后续可切换到 Cloudflare D1。

正在加载评论...

连接本地评论服务中...

OpenWrt 软路由 插件管理 备份恢复
工具与软件