跳转至主要内容
晴雨技术笔记

杏川铭心的折腾日记:树莓派、ImmortalWRT 和锐捷

杏川铭心 杏川铭心
最后编辑于 2026年9月4日
  • 本文最后编辑于 1 天内,内容新鲜,请放心阅读。
  • 我之前有一台树莓派 5,不知怎的动了搭建路由器的念头,虽说树莓派 5 本身的接口配置不太适合当路由器,毕竟只有一个网口嘛,但我所有的设备上面也都没有网口,负负得正,折腾一下总没事的。

    另外不出意外的话(那就是可能出意外)从这篇文章开始配图会变多,因为前面几期都是以前折腾过的事情,现在你让我变出截图来肯定也不现实,后面大概都是现场折腾的,所以配图会比较容易

    开学新换了校区,宿舍里有了网口,但遗憾的是,虽然我们的无线校园网采用的是标准的 WPA2 Enterprise 直接输账号密码登录,有线网依然要使用万恶的锐捷;学校虽然也大方地提供了 Linux 版本的认证程序,但可惜的是,这个认证程序只有 x86 和 x64 版本的,而我的树莓派是 arm64 的,用不了……

    锐捷 Linux 版客户端里并没有 arm64 的程序

    安装 ImmortalWrt

    我最终选择了安装 ImmortaalWrt 而不是 OpenWrt,原因也很简单,听说这个改版在国内没那么水土不服。

    ImmortalWrt Firmware Selector 里搜索 Raspberry Pi 5,就弹出了下载选项。我是第一次安装,所以下载了 Factory 镜像。

    下载适用于树莓派 5 的 ImmortalWrt 固件

    然后用 Raspberry Pi Imager 烧写镜像。

    烧写系统

    烧写完成后,插上 SD 卡,开机!然后就没有然后了,是的没错,我忘了我只有一个网口了,我完全没办法连接上我的树莓派,更别提登录 LuCI 后台了。上网查询后才知道,原来在固件下载处可以选择添加一个初次安装时运行的脚本,在这里有三个重要的东西可以设置,默认的 AP 名称和密码,以及默认的 root 密码。

    构建自定义的 ImmortalWrt 镜像,终于可以做到无线直接连接树莓派了

    这次烧写完,在 Wi-Fi 列表里就可以看见一个叫做 ImmortalWrt 的东西了,用上面设置的非常安全的密码 12345678 连接。

    搜索到了 ImmortalWrt 这个接入点

    顺利打开 ImmortalWrt 的后台,万里长征的第一步完成了!

    ImmortalWrt 默认的后台界面。

    修改 LuCI 主题

    打开后台后我的第一反应就是这玩意儿为啥这么丑,跟网上的截图完全不一样。

    同样是上网研究后我才知道 ImmortalWrt 自带的主题就长这样,网上那些截图则都是安装了一个非常热门的主题,叫做 Argon。不过 OpenWrt 现在不用 opkg 了,而是改成了 Alpine 同款的 apk,注意和安卓那个 apk 没关系哈,虽然功能更强,但是包格式不一样了,原来的 ipk 不能再用了;而且跑 apk upgrade 还容易把整个系统弄挂,不知道为什么要放弃 opkg。

    下载 Argon 主题:

    wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-theme-argon-2.4.7-r1.apk
    wget https://github.com/jerrykuku/luci-theme-argon/releases/download/v2.4.7/luci-app-argon-config-2.4.7-r1.apk

    一开始我的想法是用 scp 上传,毕竟树莓派本身还处于断网的状态嘛,然后发现 ImmortalWrt 系统里面没有 sftp-server。然后又尝试后台直接上传安装,发现安装过程需要联网。

    算了算了,先用这个丑丑的界面吧,等解决了锐捷认证的问题我们再回来改主题。虽然我有一种不好的预感……

    安装 MiniEAP

    路由器上的锐捷认证曾经是用的 MentoHUST 项目,后来被人接手过一次,但还是停更了。现在的 MiniEAP 是基于新版本的 MentoHUST 改出来的,还算新,但不知道好不好用。

    但不管怎么说,这个东西是需要编译的,而且需要 Docker,因此我们来安装一个 Ubuntu 虚拟机。

    用 Parallels Desktop 安装 Ubuntu 虚拟机。很快我就会知道我浪费了 3.3 GB 的数据……

    我是树莓派 5,平台是 bcm27xx/bcm2712,所以使用 immortalwrt/sdk:bcm27xx-bcm2712-25.12-SNAPSHOT 这个镜像。

    docker run -it --name immortalwrt immortalwrt/sdk:bcm27xx-bcm2712-25.12-SNAPSHOT bash

    然后卡吧一声撞墙上了,原来镜像只有 amd64 版本的,我这个 M4 的 MacBook Air 还用不了……于是乎我拿出了我的 Surface,这么做倒是有个意料之外的好处,现在我可以让 Surface 连树莓派的网络,然后用 Mac 查资料。

    学校有大佬做了适配的 MiniEAP 改版,所以我就直接拿来用了。

    git clone https://github.com/undefined443/openwrt-minieap-sysu.git package/minieap
    

    然后把 MiniEAP 编译成模块即可。网上说要改成以模块编译,不过我测试下来默认配置似乎就是模块,不用改,直接编译就行了。

    顺利编译出 minieap 软件包

    编译出了一个 minieap-0.94.0.apk 的文件,可以看见不是 ipk。复制到宿主机上:

    docker cp immortalwrt:/home/build/immortalwrt/bin/packages/aarch64_cortex-a76/base/minieap-0.94.0.apk .

    然后由于我的 VMware Tools 在 Linux 上日常抽风,因此还需要找个方法复制到物理机上面。我这里直接用了 scp。虽然大概率也可以在虚拟机里直接操作奈何这样太卡(。・ω・。)

    然后我把软件包拷到了 U 盘上,这样我就可以继续在 Mac 上面截图我的步骤了,不然在 Surface 上截图过于蛋疼,毕竟这篇文章我是在 Mac 上一边操作一边写出来的。

    果然不出意外的话意外就出现了,和刚刚的主题包一样,后台上传时因为没有网,无法验证包的签名(虽然大概率也没有),所以还是要想个办法在树莓派上直接运行安装命令。另外 opkg 是没有这一步的,两个包应该都能直接安装上,可恶的 apk 毁我童年

    幸运的是 ImmortalWrt 仍然会自动挂载 U 盘,于是我把 U 盘插上树莓派,从 /mnt/sda1 里顺利安装了 minieap 的包。

    然后我一直上不了网,于是我在系统里左看看右看看,成功把系统玩坏了,我也不知道怎么坏的,总之它坏了,好吧,准备第二次尝试。

    第二次尝试

    这次我学聪明了,既然知道了可以用 U 盘安装,那么我就顺便把主题包也复制到 U 盘上。

    一口气安装 U 盘上所有的软件包。是的我很肯定这里面没有混进哪怕一个安卓的安装包,因为我不用安卓()

    以及我深深地意识到 ImmortalWrt 对我来说是个新东西,不能顺着自己的思路直接瞎搞一通,于是乖乖的到网上找了个教程。

    首先教程让我配置 DHCP,OK,配置了 DHCP,还是上不了网。

    然后教程又让我配置 DNS,我一看,果不其然,我没有勾选使用全部服务器,之前的错误好像就是找不到域名对应的地址;赶紧勾上,结果还是没网,挠挠头继续往下看教程。然后教程就变成了用路由器给所有设备魔法,得,不是我要的内容,换一篇吧。

    看了好几篇教程也没看出个头绪,很明显默认配置应该是好的,不需要我多改;我又回去看我找到的第一篇 MiniEAP 教程,里面有几个截图,我对着截图改了我自己的配置(现在想来应该就是这个时候把系统改炸了),还是没用。

    最后的原因却是因为没有让 MiniEAP 调用 rjv3 模块进行锐捷认证,也就是说之前我一直在尝试使用标准的 802.1x 协议认证,怪不得连不上网。加上 –module rjv3 后认证成功,顺利上网!

    可是这就完了吗?

    出于某种原因,我的两台设备,一台 Mac,一台 Surface,在首次连接到树莓派后就再也未能重新连接上。得,又要重刷系统了;好在 ImmortalWrt 镜像不算大,也就 372 MB,不然多来几次我那张 SD 卡要发出尖锐暴鸣了。

    第三次尝试

    在之前的操作里我注意到一个细节,就是其他设备能连接路由器,但是路由器上不了网时,通过 DHCP 获取的 IP 是正常的。而后续其他设备连接路由器有问题,而路由器本身能上网时,通过 DHCP 获取的 IP 不正常,感觉就好像压根没连到路由器上,连的还是校园网。而且虽然通过手动修改 IP 的方式可以重新连接上路由器,但是这样下来设备还是上不了网。之前不是怀疑我的某个操作有问题嘛,这个操作是什么呢,就是添加 WAN 口,可是不这么做路由器本身又上不了网,一时间我所有的思路都被卡死了,完全不知道问题出在哪。

    然后我一些残留的鸟哥私房菜里面的记忆浮出了水面,于是我幡然醒悟,终于知道错在哪了。

    那么 ImmortalWrt 默认会创建一个 br-lan,这个 br-lan 里面是包括你所有的网卡的,因为我用的是一块树莓派,也就是一个 eth0、一个 phy0-ap0,可能充其量还有个 lo,然后把这个 br-lan 分配给 LAN。

    这个时候路由器上是没有 WAN 的,也就是没有 DHCP 客户端(至少我最后用的是一个 DHCP 客户端)来真正连接到互联网。为了联网,我就需要分配一个网卡给 WAN。

    然后我非常 NB 地把这个 br-lan 直接给了 WAN。

    于是乎,由于一张网卡并不能同时又当 LAN 又当 WAN,所以我这么操作完后,就变成了一个普通设备上网,根本就没有多余的网卡用来当路由器;这也解释了为什么当我最后连接设备的时候,获取的 IP 看上去还像是校园网的 IP 而不是路由器的;因为这张网卡最后拿到的 IP 就是校园网的,也自然而然的会给我们的设备分配校园网的 IP。当然这么分配完是用不了的,不然我也不用研究这个问题了。

    解决方法也很简单,把 eth0 分给 WAN,phy0-ap0 分给 LAN,这样就正常了。

    为 WAN 和 LAN 分配不同的网卡。
    是的没错我知道这些东西全是本地地址,但是我还是要打码

    修复一些小问题

    首先是 MiniEAP 可视化后台界面的问题。虽然说 MiniEAP 本身跑起来了,不过它的一个相关项目 luci-app-minieap 我并没有成功跑起来,原因居然是有一个叫做 luci-compat 的包现在不预装了,导致 Lua API 里面少了 luci.cbi 这个模块。装上之后就好了,于是顺利用上可视化界面。

    然后就是分区大小,因为很多路由器的硬盘都很小,ImmortalWrt(当然也包括上游 OpenWrt)默认的 rootfs 分区都小的可怜,好像只有 300MB 左右,可是我的 SD 卡可是有整整 32GB,这要是浪费了多可惜。很不幸,我烧写系统选用的是 EXT4 而非 SquashFS 版的,因此无法联机扩容,只能先把树莓派关机,把 SD 卡拔下来,然后插到另一台设备上去扩容。

    这里我要狠狠吐槽一下 EXT4,作为一个 2008 年出来的文件系统,居然不支持在线扩容,人家 NTFS 支持这东西都多久了。虽说理论上,只要分区结构调整好,用 resize2fs 是可以在线完成扩容的,但很可惜,它失败了,差点把我文件系统干炸了,好在简单的 e2fsck 就能把 resize2fs 的烂摊子收拾干净。然后我老老实实地卸载了文件系统,扩容,把卡插回去,有惊无险,顺利启动。

    至此这台树莓派就被我折腾的差不多了,当然喽因为我们校园网本身是限速的,所以从性能的角度来说意义不是很大,但是管他呢。我也是有软路由的人了

    • 特别提醒:

      评论看到就会回,但是不保证速度,有的时候站长忘记看的话就会出现审核好几天也没有动静的情况……

      有垃圾评论检查,如果评论之后直接消失、没反应说明被识别为垃圾评论了。

      如果等不及的话,可以加群!

    杏川铭心
    杏川铭心

    群号:1101838302,欢迎友好交流 :P 曾用名Frank419(现在也是我在很多地方的用户名),网站站长。

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注