Skip to content

OpenWrt 安装 ​

OpenWrt 原生安装包目前仅随测试版(Beta)发布,源码来自 MSM 的 dev 分支。稳定版继续使用 main 分支和原有发布流程,不提供 OpenWrt 包。

将 MSM 直接安装到 OpenWrt 路由器时,使用 Beta 发布页的 msm 原生软件包 + luci-app-msm 插件。msm 包提供程序、UCI 配置和 procd 服务;LuCI 插件在「服务 → MSM」中提供启停配置、状态和 Web 控制台入口。

如果 MSM 运行在另一台服务器,只需要让 OpenWrt 接入它,请阅读 OpenWrt 路由与 DNS 配置。

选择包格式和架构 ​

OpenWrt 24.10 及以前使用 opkg / .ipk;25.12 及以后使用 apk v3 / .apk。衍生固件以实际安装的包管理器为准。OpenWrt 官方安装说明

通过 SSH 在路由器上执行:

sh
cat /etc/openwrt_release
if command -v apk >/dev/null 2>&1; then
    apk --print-arch
else
    opkg print-architecture
fi
df -h
free -m

按包管理器返回的架构选择 msm 文件,不要仅凭 uname -m 猜测。尤其 ARM64 设备虽然都显示 aarch64,软件包架构仍可能不同。

硬件软件包架构对应程序
Intel / AMD 64 位软路由x86_64Linux amd64,兼容基础 x86-64 指令集
ARM64 路由器、开发板aarch64_generic、aarch64_cortex-a53、aarch64_cortex-a72Linux arm64
ARMv7 设备arm_cortex-a7_neon-vfpv4、arm_cortex-a9_vfpv3-d16、arm_cortex-a9_neon、arm_cortex-a15_neon-vfpv4Linux armv7
ARMv6 设备arm_arm1176jzf-s_vfpLinux armv6
LuCI 插件all所有受支持架构通用

没有匹配架构时,不要通过强制架构参数安装其他 CPU 的包。当前发布包不包含 MIPS 或 32 位 x86 版本。

程序使用静态 Go 构建,不依赖 glibc。安装后,数据库和下载的 DNS / 代理内核仍需要额外的持久化空间;小容量闪存设备可以先准备外接存储,再配置数据目录。

下载和校验 ​

在同一个发布版本中下载三个文件:一个匹配架构的 msm 包、一个同格式的 luci-app-msm 包和 SHA256SUMS。发布页的「OpenWrt 原生安装包」表列出了完整文件名。IPK 与 APK 不能混装;APK 是 OpenWrt 的软件包,与 Android 安装包无关。

例如,Beta 标签 beta-1.5.0 的 x86_64 包名是 msm_1.5.0_beta-r1_x86_64.ipk 或 msm-1.5.0_beta-r1_x86_64.apk,LuCI 包名是 luci-app-msm_1.5.0_beta-r3_all.ipk 或 luci-app-msm-1.5.0_beta-r3_all.apk。文件名使用 _beta,避免下载服务器改写特殊字符。IPK 内部版本仍为 1.5.0~beta-r1,APK 内部版本为 1.5.0_beta-r1,以遵循各包管理器的预发布版本排序;下载 URL 的目录仍使用原发布标签。主程序和 LuCI 插件的打包修订号可以不同(例如主程序 r1、界面 r3),请从同一 Beta 发布页配套下载。这里的版本号仅用于说明命名,请以发布页实际文件为准。

在路由器上创建一个空目录,例如 /tmp/msm-install,通过 SCP / SFTP 上传这三个文件。保留下载时的完整文件名,之后在该目录执行校验:

sh
cd /tmp/msm-install
: > selected.sha256
for pkg in ./*.ipk ./*.apk; do
    [ -f "$pkg" ] || continue
    name="${pkg#./}"
    awk -v name="$name" '$2 == name { print; found = 1 } END { if (!found) exit 1 }' SHA256SUMS >> selected.sha256 || exit 1
done
# 应当恰好找到两个包的校验记录,且两个文件都显示 OK。
test "$(wc -l < selected.sha256)" -eq 2 && sha256sum -c selected.sha256

校验成功后,按实际包管理器安装。

opkg 固件(IPK) ​

sh
cd /tmp/msm-install
opkg update
opkg install ./msm_*.ipk ./luci-app-msm_*.ipk

也可以通过 LuCI 的「系统 → 软件包 → 上传软件包」先安装 msm,再安装 luci-app-msm。安装本地文件和查询架构的语法见 opkg 官方文档。

apk 固件(APK) ​

sh
cd /tmp/msm-install
apk update
apk add --allow-untrusted ./msm-*.apk ./luci-app-msm-*.apk

发布的 APK 是独立分发包,未使用 OpenWrt 官方软件源签名,因此在校验 SHA256 后用 --allow-untrusted 安装。这里的包使用 apk v3 格式,不能用于 Alpine 的旧版 apk v2。apk 官方文档

安装失败时先检查架构、剩余空间和固件软件源;不要跳过依赖检查。LuCI 插件需要固件提供的 LuCI 和 rpcd,依赖由包管理器解析安装。

启动和初始化 ​

首次安装默认不启动 MSM。重新登录 LuCI,打开「服务 → MSM」:

  1. 确认 Web 端口,默认 7777。
  2. 确认数据目录,默认 /etc/msm。外接存储应先完成挂载;修改目录不会自动迁移原来的数据。
  3. 勾选启用,点击「保存并应用」。
  4. 点击「打开 MSM 控制台」,完成 首次使用 中的管理员初始化。

也可以通过 SSH 启动:

sh
uci set msm.main.enabled='1'
uci set msm.main.port='7777'
uci commit msm
/etc/init.d/msm enable
/etc/init.d/msm restart

默认 Web 地址是 http://<路由器-LAN-IP>:7777。安装本身不会抢占 DNS 端口 53。 从 Beta 主程序包 r2 起,启动 MSM 托管的 DNS / 代理内核时,会按实际配置检查 TCP / UDP 监听地址和端口。

如果托管服务需要监听 53,MSM 会严格核实占用者是否为 OpenWrt 系统 dnsmasq。核实通过后,先保存原端口设置,再临时将对应 dnsmasq 实例的 DNS 端口设为 0,保留 DHCP 服务。最后一个接管服务停止后会恢复原设置;接管后启动失败也会回滚,仍有其他接管服务运行时则保留接管。接管期间用户自行修改的端口设置不会被覆盖。

其他端口发生冲突时,会显示协议、监听地址和能够识别的占用进程,MSM 不会自动终止占用服务。也可以自行选用空闲端口(例如 1053),再配置 dnsmasq 转发或其他接入方式;这是可选部署方式。

如果 MSM 就运行在这台 OpenWrt 上,不要照抄「MSM 位于另一台主机」的网关静态路由示例;按实际部署配置本机服务。

LuCI 服务面板 ​

在「服务 → MSM」中可以查看运行状态、服务版本、连续运行时间、内存占用与数据分区剩余空间,并直接打开 MSM 控制台。

  • 基础设置:配置服务启用状态、控制台端口与持久化数据目录;保存并应用只提交 MSM 的配置。
  • 服务操作:启动、停止或重启当前 MSM 进程。停止不会修改开机启动设置;尚未启用时,请先启用并保存。
  • 运行日志:读取最近的服务日志(最多 200 行、32 KiB),按级别筛选、搜索关键词或下载日志文件。

更换数据目录不会自动搬迁原有文件。请先准备目标存储与数据,再保存新的路径。DNS 内核、规则和订阅仍在 MSM 控制台中管理。

服务管理和排错 ​

OpenWrt 原生包统一使用 procd 管理:

sh
# 状态、重启、停止
/etc/init.d/msm status
/etc/init.d/msm restart
/etc/init.d/msm stop

# 配置和系统日志
uci show msm
logread -e msm

# procd 进程信息
ubus call service list '{"name":"msm"}'

要持久停用,在 LuCI 取消启用并保存,或执行:

sh
uci set msm.main.enabled='0'
uci commit msm
/etc/init.d/msm stop
/etc/init.d/msm disable

首次创建默认数据目录时,程序日志放在 /tmp/msm/logs,以减少闪存写入;重启设备后这些日志会清空。配置和数据库仍保存在数据目录中。

出现 Web 页面无法访问时,检查服务状态、配置端口是否被占用,以及实际 LAN 地址。修改数据目录后无法启动时,检查目录是否为绝对路径、存储是否已挂载且可写。LuCI 菜单未出现时,重新登录 LuCI 并确认 luci-app-msm 安装成功。

异常退出后系统 DNS 尚未恢复时,先停止 MSM 及其托管的 DNS / 代理服务,再执行恢复命令。自定义数据目录请将 /etc/msm 替换为实际目录:

sh
/etc/init.d/msm stop
msm service recover-dns -c /etc/msm --wait 40s

恢复命令会检查托管进程和 DNS 端口;托管进程仍在运行或其他 DNS 服务占用端口时会报错,不会强行覆盖监听。

更新、备份和卸载 ​

更新前,在 MSM 的 备份恢复 页面导出配置,也可以在停服后复制整个数据目录。下载同一 Beta 版本的新 msm 与 luci-app-msm 包,校验后,在包所在目录执行对应更新命令:

sh
# opkg 固件
/etc/init.d/msm stop && opkg install ./msm_*.ipk ./luci-app-msm_*.ipk

# apk 固件(二选一,按实际包管理器执行)
/etc/init.d/msm stop && apk add --allow-untrusted ./msm-*.apk ./luci-app-msm-*.apk

更新和卸载都必须先停服成功,再通过 && 执行包操作。 停服脚本会读取 UCI 中的数据目录并恢复 DNS,无需为自定义目录改写上述命令。APK 即使遇到恢复钩子失败,也可能继续替换或删除程序,不能依赖钩子阻止包操作。若停止失败,请先解决冲突或使用上文的 recover-dns 命令恢复,不要继续更新或卸载。

升级保留 UCI 配置和应用数据;原先启用的服务在升级后恢复运行。

OpenWrt 软件包安装的 MSM 应通过 opkg / apk 更新,不要再用通用 Linux 安装脚本覆盖程序和服务文件。

卸载命令:

sh
# opkg 固件
/etc/init.d/msm stop && opkg remove luci-app-msm msm

# apk 固件(二选一,按实际包管理器执行)
/etc/init.d/msm stop && apk del luci-app-msm msm

卸载前的停止过程会恢复接管前的 dnsmasq DNS 端口;配置、应用数据和未完成恢复的接管状态会保留,但不能保证包操作失败后程序仍然存在。固件重刷、恢复出厂设置或外接存储变更前,应另外保存备份;自定义数据目录需要自行纳入固件升级备份。

下一步 ​