最近家里网络不给力,加上树莓派吃了很久的灰,就给它刷了个 OpenWrt 当旁路网关用。
OpenWrt (from open wireless router) is an open-source project for embedded operating systems based on Linux, primarily used on embedded devices to route network traffic.
OpenWrt 是基于 Linux 的开源的嵌入式操作系统,主要用在嵌入式设备上用于路由网络流量。
文档
如何给树莓派安装 OpenWrt,网上已经有大佬做好了(向大佬致敬),教程和文档都清晰明了,以下是链接:
- coolsnowwolf/lede,Lean 大的 OpenWrt 源码,喜欢折腾的朋友可以按照 README 编译自己的固件,没实力也不想折腾的话可以直接第二步找 SuLingGG。
- SuLingGG/OpenWrt-Rpi,成品 OpenWrt 固件,树莓派 1B-4B 全部有对应固件,按下边 3 篇贴子操作即可:
- 固件下载,讲怎么下载固件,这是下载地址
- 旁路由设置指南,讲怎么进行初始化配置
- SD 卡分区扩容指南,如果 SD 卡比较大,可以在安装完成后进行括容,以利用剩余空间
个人安装记录
从 SuLingGG 提供的固件列表中选择 Lean 的版本下载,并使用 ecther 烧录到 SD 卡(使用 Raspberry Pi Imager 会报错)。
上电启动树莓派,等待 2-3 分钟系统安装完成后,通过无线方式连接到热点 OpenWrt,在浏览器中输入:192.168.1.1,用户名:root,密码:password。(如果访问有问题,可以检查下 wifi 的配置,调成 dhcp 应该就可以访问了)
登录成功后,更改 LAN (网络 -> 接口 -> LAN)的 IPv4地址为主路由同一网段地址。譬如,主路由地址为 192.168.0.1,则 LAN 的地址应为 192.168.0.x,又或者主路由的地址为 192.168.31.1,则 LAN 的地址应为 192.168.31.x。配置好后点击“保存&应用”,这时主机跟 OpenWrt 的连接会断开,需要在浏览器中重新访问更改后的 ip(即 192.168.0.x)。
重新连接好之后,需要再进行其它配置,网关:主路由的 ip;广播:主路由同网段,最后一段改为 255;DNS:主路由的 ip;页面底部:忽略此接口/不在此接口提供 DHCP 服务。配置好后点击“保存&应用”。
如果不需要括容,就可以直接进行下一步了。对不同的 img,括容方式不同。ext4 需要 Linux 的 Gparted 工具。我安装的是 Squashfs,要做的操作如下:
在“系统 - 磁盘管理”中找到 SD 卡设备(/dev/mmcblk0),点击“修改”
在分区信息中可以看出 SD 卡中有 xxG 的空闲空间,点击右侧“新建”按钮新建分区
分区新建完成,点击“格式化”
选择 ext4 分区作为新分区的文件系统
分区已成功格式化为 ext4 格式
进入 OpenWrt 的 TTYD 或 SSH,进行迁移文件操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
# 将刚刚新建的 /dev/mmcblk0p3 分区挂载至 /mnt root@OpenWrt:/# mount /dev/mmcblk0p3 /mnt # 查看分区挂载情况 root@OpenWrt:/# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 760.8M 0 loop /overlay mmcblk0 179:0 0 14.9G 0 disk ├─mmcblk0p1 179:1 0 64M 0 part /boot ├─mmcblk0p2 179:2 0 960M 0 part /rom └─mmcblk0p3 179:3 0 13.8G 0 part /mnt # 将 /overlay 分区下的所有文件拷贝至刚刚建立好的分区内 root@OpenWrt:/# cp -f -a /overlay/. /mnt # 查看是否拷贝成功 root@OpenWrt:/# ls -a /mnt . .. .fs_state lost+found upper work root@OpenWrt:/# ls -a /overlay . .. .fs_state upper work # 同步文件 root@OpenWrt:/# sync # 卸载 /dev/mmcblk0p3 分区 root@OpenWrt:/# umount /mnt
前往“系统 - 挂载点”,点击“生成配置”
在“挂载点”中我们可以看到刚刚创建好的 ext4 分区 /dev/mmcblk0p3,点击右方“修改”
在接下来的界面中,“启用此挂载点”并选择“作为外部 overlay 使用”,点击“保存&应用”
在“系统 - 挂载点”页面下,确认挂载点已启用 (打钩),并确认挂载点为 /overlay,点击下方“保存&应用”,之后重启 OpenWrt
验证分区扩容成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
root@OpenWrt:/# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 760.8M 0 loop /mnt/loop0 mmcblk0 179:0 0 14.9G 0 disk ├─mmcblk0p1 179:1 0 64M 0 part /boot ├─mmcblk0p2 179:2 0 960M 0 part /rom └─mmcblk0p3 179:3 0 13.8G 0 part /overlay root@OpenWrt:/# mount | grep overlay /dev/mmcblk0p3 on /overlay type ext4 (rw,relatime) overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work) overlayfs:/overlay on /opt/docker type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work) root@OpenWrt:/# df -h | grep overlay /dev/mmcblk0p3 13.5G 42.2M 12.8G 0% /overlay overlayfs:/overlay 13.5G 42.2M 12.8G 0% / overlayfs:/overlay 13.5G 42.2M 12.8G 0% /opt/docker
树莓派关闭 wifi 后通过网线接入主路由的 LAN。
客户端的配置:IP 获取方式改为 “静态(或手动)”,DNS:填写为树莓派 Lan 口 IP,网关/路由器:填写为树莓派 Lan 口 IP。
以上就是树莓派安装 OpenWrt 的过程,致此旁路网关已经可以工作了。
如果不想直接在树莓派中装 OpenWrt,SuLingGG 还提供了在 Docker 中运行 OpenWrt 的方式:在Docker 中运行 OpenWrt 旁路网关。
下边我的安装中还有额外的两步用来配置网络共享:
SD 卡比较大又括容了的话,其实可以利用括容后的空间提供 Samba 服务。首先,在“网络存储 -> 网络共享 -> 编辑模版”中用 # 号注释掉
invalid users = root
使 root 用户可以用于 Samba 服务访问。其次,在命令行中输入smbpasswd -a root
设定密码并把 root 用户添加到 Samba 中,之后就可以在不同设备上访问 Samba 服务了。Openwrt 下 Samba 服务涉及如下配置文件:- /etc/samba/smb.conf.template:存放公共配置(模版)
- /etc/config/samba:UCI 配置
- /etc/samba/smb.conf:Samba 服务运行时加载的文件,由前两个文件组合而成
阿里云盘 WebDAV 服务,主要使用场景为配合支持 WebDAV 协议的客户端 App 如 Infuse、nPlayer 等实现在电视上直接观看云盘视频内容, 支持上传文件,但受限于 WebDAV 协议不支持文件秒传。使用方式推荐 docker:
1 2 3 4 5 6
docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8080:8080 \ -v /etc/aliyundrive-webdav/:/etc/aliyundrive-webdav/ \ -e REFRESH_TOKEN='your refresh token' \ -e WEBDAV_AUTH_USER=admin \ -e WEBDAV_AUTH_PASSWORD=admin \ messense/aliyundrive-webdav
refresh token 在登录阿里云盘后,打开开发者工具:storage -> local storage -> token 中找出 refresh_token。