三年前,我曾经写过一篇文章提到给红米 AX5 路由器开启 SSH 的方法。当时浏览热度相当高,其实这个内容在其他 blog 里面也能经常见到,可能是时间比较早的缘故吧。但是开启了之后有什么用呢?这个路由器内存只有 256 MB,内置的是一个极度精简的 OpenWrt 系统,基本上就是“啥也干不了”的状态。于是就萌生了刷机的想法。
参考资料
- 恩山无线论坛 (下方写着:只谈技术、莫论政事!想想就非常搞笑🥸)
- Restent’s Notebook 博客
可能你会问:既然已经有教程了,为什么还要再水一篇?那是因为我发现实操的某些过程和教程不太一样。
准备工具
- Uboot 和 MIBIB 刷写件。网上很多人说要付费购买,其实不用,在 Github 就能免费下载获得。我选择的是
uboot/coolsnowwolf/
里面的文件 (AX5_MIBIB.bin
与AX5_UBoot.bin
)。实测可行。 - OpenWrt 过渡固件(可以理解为精简版)。我使用的是此处的
openwrt-ipq60xx-Redmi_AX5-squashfs-nand-factory.ubi
文件,大小约 13MB。实测可行。 - 能插网线的电脑一台。例如我的是 Macbook,没有网线接口,就需要购买一个 LAN – USB 转换头。注意买的时候看清楚是否是“免驱动即插即用”
- OpenWrt 最终固件。这里有坑,后面再说。
刷机步骤
开启 SSH
已经写过了。
备份、刷入 Uboot
备份就不说了。直接看参考材料。
刷入 Uboot 的方法是:首先要把 AX5_UBoot.bin
这个文件上传到路由器的 /tmp 目录下。然后执行:
mtd write /tmp/AX5_UBoot.bin /dev/mtd7
此时会显示如下信息,并且是瞬间完成。
root@AX5:/tmp# mtd write AX5_UBoot.bin /dev/mtd7
Unlocking /dev/mtd7 …
Writing from AX5_UBoot.bin to /dev/mtd7 …
参考资料上都建议等 20 秒之后再操作,我也等了。
坑:macOS 怎么向路由器传输文件?
macOS 上没有 winSCP 可用,也无法使用 FileZilla 来传文件(不信可以试试,必败)。原因是因为 macOS 上的 scp 默认会调用 sftp,而红米 AX5 路由器上没有 sftp(也不可能去安装一个),因此唯一的办法是给 scp 加上 -O 参数,这样可以避免 scp 调用 sftp:
# 假设路由器的 IP 是 192.168.0.1
scp -O AX5_UBoot.bin [email protected]:/tmp/
进入Uboot界面,刷写过渡件
首先把参考材料上的原文抄过来:
来自 https://www.right.com.cn/forum/thread-8278695-1-1.html
- 进入Uboot后台方法:先把路由器断电,推荐直接拔路由器屁股的电源口而不是插座,然后用牙签或者其他工具按住路由器后面的RESET不要放开,然后插上电源,此时路由器会黄灯闪烁5次变为蓝灯,然后就松开RESET(松开牙签)。
- 准备根网线接到路由器的LAN口和电脑的网口,设置电脑的IP为192.168.1.X(随意不能是1)。从此处开始到结束,网线要一直插着。
- 在浏览器输入 192.168.1.1 进入uboot。
- 然后选文件过渡固件(例如我选的
openwrt-ipq60xx-Redmi_AX5-squashfs-nand-factory.ubi
)- 点击Update firmware等待写入。路由器指示灯开始闪烁,直到不闪烁亮蓝灯为止。
我也是这么操作的,没有遇到问题。首先放一张 uboot 界面图(上面第 3 步)。

然后放一张 Update firmware等待写入的图(上面第 5 步的过程)。

最后放一张过渡固件刷完之后的图(上面第 5 步的结果)。

如果上面第五步操作之后路由器一直不亮蓝灯,则表明过渡固件写入失败,需要重新从第一步(路由器断电)开始操作。
刷入MIBIB
这一步参考材料上写得不是很清楚。归纳起来应该这样:
- 连接路由器的 SSH,IP 是 192.168.1.1,用户名是 root,不用密码。
- 同样用
scp -O
命令,复制AX5_MIBIB.bin
文件到路由器的/tmp
目录下面。 - 执行
mtd write /tmp/AX5_MIBIB.bin /dev/mtd1
。过程和结果与刷入 Uboot 那一步很像,也是瞬时完成,但是等 20 秒左右。
升级 OpenWrt 为最终固件(重大的坑)
操作方法就像参考资料里说的,在 192.168.1.1 的 web 界面上进行升级操作,点击按钮,上传最终固件,点击执行,等待路由器变蓝灯就好了。好像很傻瓜式。但是这里坑最多了。

用什么浏览器?
我在 macOS 上一直用 Safari 浏览器,因为省电。可是在这一步用 Safari 浏览器有可能导致升级失败(路由器一直黄灯)。建议用 Chrome 浏览器。
选哪个固件?
开始直接选择参考资料里面的固件,效果很不理想:
- 有的过于精简,后续想安装 Wireguard 安装不上,因为固件在编译时缺少一些必要的库。(OpenWrt 可不是 Ubuntu,一旦固件在编译时缺少库的话,是无法后续安装的)
- 有的过于臃肿,什么都有,安装完之后有些分区目录居然接近 100%(别忘了红米 AX5 只有 256MB 存储),导致接下去不能安装任何额外东西。
- 有的安装完之后居然不能 SSH 登陆,原因是因为
/etc/shells
只有/bin/ash
,这种情况只能呵呵呵了。 - 大部分固件内核都太老了,新内核固件要付费才能下载(说的就是那个只谈技术、莫论政事的著名论坛)。
我用了 openwrt.ai 这个网站来自行构建固件,免费用户每天可以构建一次。在网页上可以选择需要添加哪些软件包或者删除哪些软件包!
- 红米 AX5 是没有 USB 接口的,因此我去掉了 -kmod-usb 开头的软件包。
- 因为红米 AX5 内存只有 256MB,因此去掉了带 wifi 的软件包。
- 由于我想要后续使用 Wireguard,因此添加了 luci-proto-wireguard、 luci-app-wireguard、 kmod-wireguard、 wireguard-tools 这四个软件包。
构建大约 2 分钟即可完成,固件(kwrt-xx.xx.xxxx-qualcommax-ipq60xx-xx_xx-squashfs-sysupgrade.bin
)大小只有 22MB。
升级需要多久?
大约半分钟到一分钟。如果 1 分钟之后路由器仍然不亮蓝灯,基本可以判断为升级失败,需要重新从 Uboot 界面那一步开始操作。
最终效果
下面放一下最终固件的 web 截图。

SSH 的欢迎界面挺漂亮。

使用 openwrt.ai 构建固件优势明显:因为内核新,很多东西操作起来方便。例如 SSH 自带支持 ed25519,不用额外添加 RSA 了。而且由于可以自己删减软件包,因此很省空间(我用了 7.8 MB 的空间)。
[root@Kwrt:12:09 AM ~] # df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 15.5M 15.5M 0 100% /rom
tmpfs 63.4M 1.3M 62.1M 2% /tmp
/dev/ubi0_2 40.4M 7.8M 30.5M 20% /overlay
overlayfs:/overlay 40.4M 7.8M 30.5M 20% /
tmpfs 512.0K 0 512.0K 0% /dev
至于接下来要用 wireguard 做什么,以后再写了。
我只刷過手機,沒想到路由器也可以刷。這樣國内是否就可以直接用路由器翻牆了?
是的,但是想要用路由器翻牆的話,需要路由器的硬件比較好,因為要翻牆的內容太多了
用wireguard估计是组网了,虽然我感觉zerotier更适合
另外日本宽带普遍有公网ipv4吗
有公网ipv4,但是情况比较特殊,请等我下一篇文章。
盲猜动态公网v4,记得wg配ddns有点坑
不过v6总该是静态的吧,至少我墙国移动几个月没变过了
v4静态的。问题出在别处,我下一篇文章再写。
v6主要是很多公共 wifi 和公司 wifi 没有,不方便。
一直没有使用过软路由之类的,都是路由本身系统,懒得折腾
哈,这不是软路由。软路由是说本来是一台电脑台式机,安装了一些特殊的软件把它变成了具有路由功能的电脑。我这个本来就是路由器,只不过家里有好几个,废物利用了。
(个人观点)
我觉得博主未免有些缺乏谨慎了,个人而言,我对中国的专有软件,比如小米路由器上的操作系统,是完全不信任的。
国产网络设备如光猫,有些被部署了“深度包检测”软件,用作“反诈”(读作“大规模监控”)用途。小米的手机操作系统,MIUI,也被发现上载包括但不限于[用户安装的软件列表]等隐私信息之行为。
况博主或被认为持有不同政见,这便更加危险了。
我个人而言,如要使用这类中国品牌的硬件,必须将其操作系统替换为无中资背景的软件,最好是自由开源软件。
OpenWrt 就是自由开源的软件啊。我安装的固件也是最后自己编译的,不是网上下载的
我所说的[国产专有软件]在这个语境中指的是小米路由器的stock firmware,也就是出厂自带的那个。
OpenWRT当然是自由开源的 😀
“这个路由器内存只有 256 MB”,为何会跟装系统空间有关?
ROM难道不是在闪存里吗?运行时加载ROM中的系统到内存里吗?
我有另一个小米路由器3G,也是Flash是128M,内存256M,装OpenWRT完全版,一点问题都没有。
https://openwrt.org/inbox/toh/xiaomi/xiaomi_ax1800
准确的信息是:Flash 128MiB,RAM 256 MiB。
我成功刷了breeze303的无WIFI带有线NSS的6.6内核固件
https://github.com/breeze303/openwrt-ci
但在系统状态里看,内存只有100多M,而不是256M,这是怎么回事呢?
百思不得其解,内存就是内存,256M怎么会少很多呢?
uboot刷的也是 uboot/coolsnowwolf/ 里面的文件 (AX5_MIBIB.bin 与 AX5_UBoot.bin)
还请大神指点迷津,谢谢。
而且breeze303的固件,缺很多ipsec相关的kernel module,
如kmod-ipsec,kmod-crypto-XXXX
让我没法使用strongswan,很是苦恼。
这是不是意味着我需要按自己的需要重新编译OpenWRT把需要的kmod加进去?
sorry,关于内存的大小我也不太懂。至于固件,不要直接下载别人的,请去 https://openwrt.ai/ 这个网站进行自行编译(速度很快,几分钟),可以添加各种 kmod,也能精简 wifi、usb 等内置的 package。
用那个固件主要是为了支持高通ipq6000芯片的NSS硬件加速,一般的OpenWRT固件是没有NSS硬件加速的。
那个固件项目也是开源的,支持自己编辑配置,编译自己的固件。现在还在研究如何配置一个适合自己的固件。
配置文件里有很多跟高通NSS相关的设置:
CONFIG_DEFAULT_kmod-qca-nss-drv-bridge-mgr=y
CONFIG_DEFAULT_kmod-qca-nss-drv-clmapmgr=y
CONFIG_DEFAULT_kmod-qca-nss-drv-eogremgr=y
CONFIG_DEFAULT_kmod-qca-nss-drv-gre=y
CONFIG_DEFAULT_kmod-qca-nss-drv-igs=y
CONFIG_DEFAULT_kmod-qca-nss-drv-l2tpv2=y
CONFIG_DEFAULT_kmod-qca-nss-drv-lag-mgr=y
CONFIG_DEFAULT_kmod-qca-nss-drv-map-t=y
CONFIG_DEFAULT_kmod-qca-nss-drv-match=y
CONFIG_DEFAULT_kmod-qca-nss-drv-mirror=y
CONFIG_DEFAULT_kmod-qca-nss-drv-pppoe=y
CONFIG_DEFAULT_kmod-qca-nss-drv-pptp=y
CONFIG_DEFAULT_kmod-qca-nss-drv-pvxlanmgr=y
CONFIG_DEFAULT_kmod-qca-nss-drv-qdisc=y
CONFIG_DEFAULT_kmod-qca-nss-drv-tun6rd=y
CONFIG_DEFAULT_kmod-qca-nss-drv-tunipip6=y
CONFIG_DEFAULT_kmod-qca-nss-drv-vlan-mgr=y
CONFIG_DEFAULT_kmod-qca-nss-drv-vxlanmgr=y
CONFIG_DEFAULT_kmod-qca-nss-ecm=y
CONFIG_DEFAULT_kmod-qca-nss-macsec=y
…
你推荐的那个编译网站,固件也是可以支持NCC硬件加速吗?
啊,这个从来没有注意过。我刷 openwrt 的目的是在外面远程回家使用,不需要太强劲的硬件。
我现在用openwrt.ai编译的AX5的固件发现有个问题,会不断地卡死,重启,差不多每半个小时就会这样。看System Log有很多ath11k,WIFI相关的错误。我就想是否是默认的软件包没有去干净WIFI相关的组件。
你提到的去掉了带 wifi 的软件包是否就是下面几个?
ath11k-firmware-ipq6018
ipq-wifi-redmi_ax5
kmod-ath11k-ahb
今天重建了一个固件,去除了ath11k相关的module,去除USB相关的module,加了我需要的strongSwan相关的module,成功刷机,不再反复重启了。看了system log确认NSS硬件加速成功开启,完美。
Sun Feb 16 01:39:34 2025 kern.info kernel: [ 11.450437] **********************************************************
Sun Feb 16 01:39:34 2025 kern.info kernel: [ 11.457244] * NSS Data Plane driver
Sun Feb 16 01:39:34 2025 kern.info kernel: [ 11.463719] **********************************************************
Sun Feb 16 01:39:34 2025 user.notice kernel: [ 12.259648] hotplug: symlinking qca-nss0.bin to /lib/firmware/qca-nss0-retail.bin
Sun Feb 16 01:39:34 2025 kern.info kernel: [ 12.372710] qca-nss 39000000.nss: NSS fw version: NSS.FW.12.2-161-CP.R
Sun Feb 16 01:39:34 2025 kern.info kernel: [ 12.372757] qca-nss 39000000.nss: fw of size 861640 bytes copied to addr: 40000000, nss_id: 0
Sun Feb 16 01:39:34 2025 kern.alert kernel: [ 12.380048] ffffffc0794b68c0: NSS core 0 DDR from 40000000 to 41000000
Sun Feb 16 01:39:34 2025 kern.info kernel: [ 12.414259] qca-nss 39000000.nss: NSS core 0 booted successfully
赞钻研精神。👍。
我刚才去 system log 里面看了一下,确实也看到了 qca-nss 39000000.nss: NSS core 0 booted successfully 这句话,不确定是否 NSS 加速成功。不知除了查看 log 之外,还有没有其他简单的但能明确地检测出有没有 NSS 的方法?比如,有 NSS 和没有 NSS 相比,在表现上会有什么不同?