使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务

转载:本文出处
https://think8848.cnblogs.com和作者: think8848
本文目的:记录近一个月以来折腾BPI-R4的过程,为后面可能的学习提供参考资料,此外也把折腾中踩过的坑发出来,让更多研究BPI-R4的筒子们少踩坑。

一、需求描述

公司的项目基本都会有去客户现场实施的情况,我们的客户现场一般情况下都不具备上网条件,在没有互联网的情况下项目组人员无论使用搜索引擎查找技术方案,还是在公司的同事也对现场提供技术支撑都非常不便。另外在现场通过手机热点使用Linux Mirrors,Docker Repository、Nuget、Maven、NpmJS等资源都速度较慢,而且流量消耗也比较大;平时公司文件服务器上的开发工具、办公软件等软件不易转输到项目现场。
经历无数次各种受限后,我下决心搞个能在客户项目办公期间实现以下功能的装置:

  • 实现高速上网
  • 内置开发所需的各种Mirrors、Repository、Registry服务
  • 提供各类常用开发和办公软件共享
  • 提供Wi-Fi AP(可选)

一站式解决过去的各种不便(而不需要携带多个设备),体积足够小(便于出差时携带)。提高点现场办公的效率,少在现场呆几天时间,这个设备的成本就回来了

带着上述需求确定的硬件需求是:

  • CPU:多核CPU,至少在跑Docker时不拉胯
  • 内存: ≥ 2GB
  • 网络: 支持千兆以太网(最好有一个2.5G网口)
  • 5G: 具备5G模块接口
  • Wi-Fi: 板载Wi-Fi 6功能或具备Wi-Fi 6模块接口
  • 存储: 具备NVMe固态硬盘接口

二、硬件准备

1. BPI-R4开发板

带着需求在T宝上进行搜索,目前发现最符合条件的是BPI-R4,其他或多或少都有一个或几个点没有到位(欢迎熟悉开发板的大佬提供更好的板子)。
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第1张图片


产品图片
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第2张图片


硬件接口图
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第3张图片


硬件规格表

这个板子几乎能满足我全部的需求,同时还具有光口和Wi-Fi7的接口,问题是在我买的时候板子刚刚上市,几乎没有像样的资料(一开始就只有技术规格书,过了差不多大半个月后官方文档才加了不少有用内容),而且Wi-Fi7模块、官方外壳到目前还没有上市,预计在24年一季度末期才会有,建议不愿意/没时间折腾的筒子们二季度视情况购买,到那时板子的资料、固件、外围的配件应该就比较齐全了,上手就能用,不然真是非常的折腾。

免责声明:本文列出了部分我采用的商品链接,本人和这些商家没有任何直接、间接关系,实在是因为我在折腾过程踩坑太多,所以我尽量把我认为不坑或者服务稍好点的供货商放上来,避免筒子们继续踩坑。我觉得产品/商家好不代表大家都觉得好,请自行辨别,本人对所列举的产品和商家不负任何直接或连带责任。

板子的购买地址(板子的生产厂家T宝店):
https://item.taobao.com/item.htm?abbucket=8&id=750678904197&ns=1&spm=a21n57.1.0.0.943b523cPUzb23

主板建议在生产厂家买,我当时是在另一家专门买各类板子的商家店里买的,原因是该商家发货地在上海,我想更快点拿到板子。然而后来一系列的沟通才觉得,应该还是到工厂店买更好,听说在工厂店的订单可以获得厂家更好的技术支持

2. 电源

根据硬件规格表所示,该板使用DC供电,规格为12V/5.2A or 19V 3.2A,我在T宝上找了好久也没有找到合适的电源,后来又问卖我板子的商家,他给推荐了一个电源,并称是兼容管方的电源,售价:50元,到货后我发现他发的是12V2A的电源,质量非常的次,但是确实能正常使用,后来因为这个电源的线又短又硬,实在是难以使用,我只能按照12V2A的规格重新找一个商家,售价:39元,这次没有翻车。商家还送了我一个USB转TTL模块和一个USB读卡器,这两样东西我也没有用过,对于当下手头没有这两样家什的筒子们应该是有用的。
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第4张图片


DC电源图片

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第5张图片


商家送的读卡器

DC电源购买链接:
Banana Pi BPI-R4高性能开源路由器MT7988A Wifi 7香蕉派R4开发板 配件:电源12V2A【图片 价格 品牌 报价】-京东

3. USB转TLL模块

当时在买BPI-R4的时候,商家给我推荐了一个USB转TTL线,是2303芯片的,
 


PL2302模块图片

PL2302模块购买链接:
交易快照

接上之后无法正常驱动,出现以下问题:

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第6张图片

联系商家后,商家提供了解决方案,见下方链接:
解决"PL2303HXA自2012已停产,请联系供货商" USB不识别的问题

为方便起见,我将驱动程序搬运到此处:点此下载PL2302驱动

这个线使用后终于在启动BPI-R4后能看到屏幕输出了,但是却无法使用键盘进行输入,我一开始怀疑是这条线有问题,因此又买了第二个模块。
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第7张图片


CH340模块图片

CH340模块购买链接:
https://item.jd.com/10083021362308.html

CH340驱动下载地址:点此下载CH340驱动

这个模块的优点是链接速度快,使用PL2302模块时不能键盘输入的问题没有了,而且CH340还可以使用跳线设置VCC为3.3v或5v,在接入电脑后有电源指示灯,但缺点也比较明显,裸露的模板,接插不方便,另外它使用很短杜邦线连接BPI-R4,在使用这个模块时必须把板子放到距离电脑USB口很近的地方,无奈之下我又试了一下PL2302,神奇的是我的PL2302连上后板子居然可以接收键盘输入了,好吧,CH340放进抽屉吃灰吧。

结论: 如果只是玩BPI-R4,那还是建议使用上图中PL2302类型的线,确实方便,如果将来还可能调试其他设备,建议使用CH340,功能多且便宜。

4. SD卡

先说结论:非必要不要买大容量的TF卡,一来价格比较贵,高速、可靠、容量大的存储将来还是要靠NVMe硬盘,TF卡差了点意思,过去我ThinkPad上外挂的TF卡经常会出现文件损坏的情况,二来在某些情况下向TF卡烧镜像时总是提示失败,这时候你可能需要低格SD卡,然而SD低格的速度实在是太感人了,你可能吃了两顿饭后,进度才走了50%不到 ,因此墙裂不建议使用大容量TF卡,不要问我是怎么知道的...
 


TF卡图片

实验证明,上图的卡就很好用,8G容量够用了,价格便宜:14.9元,而且耐造,目前已经几十次的烧写镜像,使用没有出过任何问题。

TF卡购买链接:
https://item.jd.com/7250669.html#none

读卡器?上面买DC电源时不是送你读卡器了吗?

5. 5G模块

先说结论:BPI-R4在官方固件代码(OpenWrt-21.02)上可以使用移远通信(Quectel)的RM500U-CNRM500Q-GL,在OpenWrt-23.05主线版本上仅RM500Q-GL可用(主线固件源码里有RM500Q-GL的驱动,其产品ID为800,而RM500U-CN的产品ID为900,因此不被OpenWrt所识别),所以说RM500Q-GL比RM500U-CN好用,原因一:500Q能够同时在OpenWrt-21.02和OpenWrt-23.05上使用,原因二:发热量明显小;据官方资料显示RM520N-GL也可以使用,但我手头没有,没有办法测试
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第8张图片


Quectel RM500Q-GL实物图(图片来自闲鱼)
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第9张图片


Quectel RM500U-CN实物图(图片来自闲鱼)

注意:5G模块上除了“大”型号,如“RM500Q-GL”之外,还有一个“小”型号,如"RM500Q-GL AB","RM500U-CN VCA"之类的,如你所猜,"GL"代表全球都可以使用,"CN"代表在国内使用,再后面的字母代表模块用途,详细介绍情况请自行搜索。我测试的两个模块具体为"RM500Q-GL AB"和"RM500U-CNVCA",其中"RM500G-GL"是闲鱼上淘来的,品相成色很nice,功能正常;"RM500U-CNVCA"是在T宝购买的。
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第10张图片


RM500U-CN效果图(我实际购买的是RM500U-CNVCA)

RM500U-CN购买链接(2024年1月28日 当前缺货):
https://item.taobao.com/item.htm?_u=skb3avd95d&id=703952904554&spm=a1z09.2.0.0.78462e8dVh8xMm

这个店应该是官方店,这个店的客服明显支持比另一个官方店的客服有耐心,服务更好一些。

5G模块必须接上天线和SIM卡才能正常工作,天线产品如下:
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第11张图片


5G/4G通用棒状天线,型号:YECN009AA
 

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第12张图片


天线射频转接线,型号:YM0004AA

此处要说明的是,天线转接线有两种规格,IPEX1代IPEX4代注意:RM500系仅支持IPEX4代转接线,买错了完全无法使用,不要问我是怎么知道的...

天线和转接线的购买链接:
https://item.taobao.com/item.htm?_u=skb3avbb85&id=724585239978&spm=a1z09.2.0.0.78462e8dVh8xMm&skuId=5221174257612

6. Wi-FI模块

先说结论:MT7921MT7922OpenWrt-23.05上确定可用,但是在官方固件源代码确定不可用;不可用的原因是官方源代码所采用的内核版本上mt76mac80211驱动有BUG,根本就不能编译通过,使用OpenWrt-21.02.7中相应的目录替换官方源代码的目录后能编译通过,也能搜到网络,但无法实现Wi-Fi AP或能,甚至也不能作用Wi-Fi Client使用。后经搜索发现是mt76驱动在21.02版本上无法正常使用,OpenWrt官方Github上还有一个专门的mt76项目用来解决这个问题,本着不放弃任何一个细节的原则,我毫不犹豫下载了该代码和官方源代码进行了合并编译,然后不出意外的编译失败了,原因是该mt76代码库中有一个头文件并不在官方固件源代码的内核中...

好吧,世上无难事,只要肯放弃!只要我不坚持搞21.02上使用MT7921了,难题自然就会自动消失了。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第13张图片

不用7921我就下单了一个MT7915,更确切点说是DR7915要特别慎重,因为我没有用起来。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第14张图片

官方声明不支持7天无理由,非批量用户不提供技术支持,大家千万不要怀疑他们公司的执行力,绝对不会给你提供半个字有用的技术支持。发货可能是个看人品的事情,我可能人品不佳,我下单后直到淘宝官方客服介入才终于发了货。发货之前我想知道这个天线接口是IPEX1代还是IPEX4代,客服会客(ai)客(da)气(bu)气(li)的和你说5句话,但绝不会告诉你是1还是4,我只能到货后再自行观察,到货后更坑的来了,我以为这个模块仅仅是正面使用了凸起来的封装,拿到手后发现原来背面也是凸起来的封装啊!杯具啊!!! 根本不能安装在BPI-R4上,这个造型很可能难以安装在很多板子上!

本着买都买了的想法,我还想再抢救一下,在买转接线和转线板之前纠结一番后觉得转子可能看起来更清爽,更好固定一些,经过两次折腾,转接板终于到了,插到BPI-R4上使用官方镜像,额..没有发现PCI-E设备,这一定是OpenWrt-21.02版本过低的原因!马上插上OpenWrt-23.05SD卡,上电...好吧,95%是转接卡太辣鸡了,这么贵的模块应该是不会出问题的,包好,收起来放抽屉。

想着把MT7921再换上去吧,这时就多了一点点小动作,又带来一个大麻烦,我想看看7921商家送的这个天线馈线和5G模块天线馈线是否有区别,就轻轻的把7921的天线拿下来,我真的已经足够轻了,但还是连带着把7921的天线底座一并从PCB板上拉下来了...小结一下:非必要不要抜天气馈线一个没多少钱,多买几根,一个模块可以买几十根馈线。

想着MT7921反正也坏了,而且在官方代码上也跑不起来,OpenWrt-23.05上有MT7922的固件,这次要么试一下7922吧,它应该比7921更香吧,马上闲鱼上看到家附近就有,直接拿货测试。这次发现PCI-E设备了,但是/etc/config/wireless文件里面是空的,使用/sbin/wifi config重新生成也没有用,本着死马当做活马医的态度,再次编译固件,这次除kmod-mt7922-firmware外,还加上了kmod-mt7921e,别问我为什么这么想,我就是觉得这俩长的有点像,兴许会迷惑系统,烧TF卡,再次加电启动,这次终于看到/etc/config/wireless里面有内容了,测试发现无线网络功能是正常的,说一句7922使用是IPEX4代线。

我买的MT7922上还有个Port Number:RZ616,据网上的介绍说是有160MHz带宽,然而我使用的是MT7921的驱动,页面上的配置最高也只有80MHz,Wi-Fi功能对我而言本就不是刚需,我也不想折腾了。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第15张图片

为什么第二次我在闲鱼上买7922,原因是我觉得淘宝上一手的MT7921全新质量太次,反而是闲鱼上从品牌笔记本上拆机的无线网卡质量和做工更好一些,各位自行评估。

7. 散热片
  • 20x20x4的带背胶纯铜散热片看着还不错,大小也正合适,主要是贴上后心理上觉得安全了一些,适用于CPU,NVMe硬盘,无线网卡和5G模块。

购买链接:
商品详情

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第16张图片

  • 5G模块专用散热片

合身、漂亮
购买链接:
https://item.taobao.com/item.htm?_u=vkb3av6638&id=672697533949&spm=a1z09.2.0.0.19852e8dpbPx1k&sku_properties=1627207:3232484

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第17张图片

8. 风扇

也许能用到,也许用不着,6元一个,我看BPI官方也在用这个风扇,就备一个吧
注意:如果在BPI-R4背面安装NVMe硬盘的话,这个风扇的卡子是无法插到对应的位置的,需要使用硬盘的兄弟慎重购买

购买链接:
https://item.taobao.com/item.htm?_u=vkb3av289a&id=619655377629&spm=a1z09.2.0.0.19852e8dpbPx1k&skuId=4978584616607

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第18张图片

到现在为止,BPI-R4折腾之旅可以发车了

三、Banana PI BPI-R4资料和固件

官方资料和固件:

  • 香蕉派 BPI-R4
  • Getting Started with BPI-R4
  • 官方固件代码仓库 BPI-R4-OPENWRT-V21.02

搜索到的几个有用的文章:

  • 这路由很硬?bpi-r4万兆路由到手体验!
  • BPI-R4万兆路由ImmortalWrt固件体验(cpu跑分5w+)
  • bpi-r4固件--基于hanwckf大佬的uboot源码及固件源码

根据上面文章提到的线索,我找到了据称将来要合并到OpenWrt-23.05主线的BPI-R4可用的固件源码,感谢不吝分享知识的大佬们!

  • https://github.com/dangowrt/openwrt/tree/bpi-r4

  • 官方提供的固件源代码是21.02版,该代码提供了RM500U-CNRM520N-GLRM-500Q-GL的支持

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第19张图片

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第20张图片

然而官方源代码对于无线网卡的支持并不好,因此本文我主要演示dangowrt大佬提供的固件源代码,该固件支持RM520N-GLRM500Q-GL

四、编译OpenWrt-23.05

1. 准备编译环境(Ubuntu 22.04.3)

编译OpenWrt-23.05我选用了Ubuntu 22.04.3,编译官方固件源代码使用Ubuntu 22.04会报错,只能选用Ubuntu 20.04
需要说明的是,在编译OpenWrt固件时,一定要选择root账号,否则在编译的过程中会报错。

2. 安装编译依赖项
sudo apt update -y
sudo apt install build-essential clang flex bison g++ gawk \
gcc-multilib g++-multilib gettext git libncurses-dev libssl-dev \
python3-distutils rsync unzip zlib1g-dev file wget swig -y

需要下载的依赖项比较多,建议最好将Ubuntu的apt源设置为清华镜像站或其他国内镜像站
建议在Ubuntu上保留足够的可用磁盘空间,至少应具有64GB可用空间,推荐128G及以上

编译使用的电脑推荐使用主频高、CPU核心数多的台式电脑,使用普通笔记本编译可能浪费您大量的时间。

3. 设置http和git代理
export ALL_PROXY=socks5://192.168.183.1:1080
export http_proxy=http://192.168.183.1:808
export https_proxy=http://192.168.183.1:808
git config --global http.proxy "http://192.168.183.1:808"
git config --global https.proxy "http://192.168.183.1:808"

如果您没有代理服务器,不建议继续以下步骤

4. 下载OpenWrt-23.05源代码
git clone -b bpi-r4 https://github.com/dangowrt/openwrt.git

本文所有的操作均在用户根目录下,例:/home/joseph~/下拉代码结束后进入源代码目录,并且查看代码是否是bpi-r4分支

cd openwrt
git show

5. 下载安装交叉编译依赖项
./scripts/feeds update -a
./scripts/feeds install -a
6. 配置编译项
make menuconfig
6.1 配置项如下:
  • 首页
    • Target System:MediaTek Ralink ARM
    • Subtarget:Filogic 8x0 (MT798X)
    • Target Profile:Bananapi BPi-R4

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第21张图片

  • Base System:
    • block-mount
    • blocked
    • Customize busybox options

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第22张图片

  • Base System > Linux System Utilities
    • fdisk

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第23张图片

  • Kernel modules > Block Devices
    • kmod-dax
    • kmod-dm
    • kmod-nvme
    • kmod-scsi-core

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第24张图片

  • Kernel modules > Filesystems
    • kmod-fs-exfat
    • kmod-fs-ext4
    • kmod-fs-ksmbd
    • kmod-fs-ntfs3

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第25张图片

  • Kernel modules > USB Support
    • kmod-usb-core
    • kmod-usb-net
    • kmod-usb-net-qmi-wwwan
    • kmod-usb-ohci
    • kmod-usb-storage
    • kmod-usb-wdm
    • kmod-usb-usb2
    • kmod-usb-usb3

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第26张图片

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第27张图片

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第28张图片

  • Kernel modules > Wireless Drivers
    • kmod-mt7921-firmware
    • kmod-mt7921e
    • kmod-mt7922-firmware

此处手动添加kmod-mt7921-firmwarekmod-mt7921ekmod-mt7922-firmware, 取消kmod-mt7915e,其他使用自动创建的依赖即可。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第29张图片

  • LuCI > Collectioins
    • luci
    • luci-light

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第30张图片

  • LuCI > Modules

当在上一步骤中选择luci选项后,配置程序会自动设置Modules选项,本文采用其默认值,仅在区域中加了中文

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第31张图片

LuCI > Modules > Translations中添加中文支持

  • LuCI > Modules > Translations
    • Chinese Simplified (zh_Hans)

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第32张图片

  • LuCI > Applications
    • luci-app-dockerman(注意:此处是M,非*)
    • luci-app-ksmbd

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第33张图片

  • Network > SSH
    • openssh-sftp-server

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第34张图片

  • Utilities
    • dockerd(注意:此处是M,非*)
    • pciutils
    • usbutils

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第35张图片

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第36张图片

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第37张图片

  • 最后,保存配置

6.2 添加5G上网和Wi-Fi所需的文件

请点击此处下载本章节中所需的文件

# 进入BPI-R4编译目标的目录
cd ~/openwrt/target/linux/mediatek/filogic/base-files

mkdir -p sbin && cd sbin

# 使用sftp或是其他工具将下列文件存入sbin目录中

# 1. quectel-atc-proxy
# 2. quectel-CM
# 3. quectel-mbim-proxy
# 4. quectel-qmi-proxy

# 设置执行权限
chmod +x ./*

# 进入/etc/init.d目录
cd ~/openwrt/target/linux/mediatek/filogic/base-files/etc/init.d

# 复制ltecalling文件至init.d目录中,该文件是5G模块连接网络的启动脚本

# 设置ltecalling执行权限
chmod +x ltecalling

# 创建ltecalling文件的软链接,使该文件能够实现开机启动
mkdir -p ~/openwrt/target/linux/mediatek/filogic/base-files/etc/rc.d

cd ~/openwrt/target/linux/mediatek/filogic/base-files/etc/rc.d

ln -s ../init.d/ltecalling S99xltecalling

# 添加网络接口配置
mkdir -p ~/openwrt/target/linux/mediatek/filogic/base-files/etc/config
# 将下列文件复制进刚才创建的config文件夹中
# 1. network (网络接口配置文件)
# 2. firewall (防火墙配置文件)
# 3. wireless (Wi-Fi配置文件)

其中network文件配置如下:


config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'fdd2:e351:889d::/48'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'lan1'
	list ports 'lan2'
	list ports 'lan3'
	list ports 'eth1'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'
	option ip6assign '60'

config device
	option name 'br-wan'
	option type 'bridge'
	list ports 'wan'
	list ports 'eth2'

config interface 'wan'
	option device 'br-wan'
	option proto 'dhcp'

config interface 'wan6'
	option device 'br-wan'
	option proto 'dhcpv6'

config interface '5G'
	option device 'wwan0'
	option proto 'dhcp'

firewall如下:

config defaults
	option syn_flood	1
	option input		REJECT
	option output		ACCEPT
	option forward		REJECT
# Uncomment this line to disable ipv6 rules
#	option disable_ipv6	1

config zone
	option name		lan
	list   network		'lan'
	option input		ACCEPT
	option output		ACCEPT
	option forward		ACCEPT

config zone
	option name		wan
	list   network		'wan'
	list   network		'wan6'
    list   network          '5G'
	option input		REJECT
	option output		ACCEPT
	option forward		REJECT
	option masq		1
	option mtu_fix		1

config forwarding
	option src		lan
	option dest		wan

# We need to accept udp packets on port 68,
# see https://dev.openwrt.org/ticket/4108
config rule
	option name		Allow-DHCP-Renew
	option src		wan
	option proto		udp
	option dest_port	68
	option target		ACCEPT
	option family		ipv4

# Allow IPv4 ping
config rule
	option name		Allow-Ping
	option src		wan
	option proto		icmp
	option icmp_type	echo-request
	option family		ipv4
	option target		ACCEPT

config rule
	option name		Allow-IGMP
	option src		wan
	option proto		igmp
	option family		ipv4
	option target		ACCEPT

# Allow DHCPv6 replies
# see https://github.com/openwrt/openwrt/issues/5066
config rule
	option name		Allow-DHCPv6
	option src		wan
	option proto		udp
	option dest_port	546
	option family		ipv6
	option target		ACCEPT

config rule
	option name		Allow-MLD
	option src		wan
	option proto		icmp
	option src_ip		fe80::/10
	list icmp_type		'130/0'
	list icmp_type		'131/0'
	list icmp_type		'132/0'
	list icmp_type		'143/0'
	option family		ipv6
	option target		ACCEPT

# Allow essential incoming IPv6 ICMP traffic
config rule
	option name		Allow-ICMPv6-Input
	option src		wan
	option proto	icmp
	list icmp_type		echo-request
	list icmp_type		echo-reply
	list icmp_type		destination-unreachable
	list icmp_type		packet-too-big
	list icmp_type		time-exceeded
	list icmp_type		bad-header
	list icmp_type		unknown-header-type
	list icmp_type		router-solicitation
	list icmp_type		neighbour-solicitation
	list icmp_type		router-advertisement
	list icmp_type		neighbour-advertisement
	option limit		1000/sec
	option family		ipv6
	option target		ACCEPT

# Allow essential forwarded IPv6 ICMP traffic
config rule
	option name		Allow-ICMPv6-Forward
	option src		wan
	option dest		*
	option proto		icmp
	list icmp_type		echo-request
	list icmp_type		echo-reply
	list icmp_type		destination-unreachable
	list icmp_type		packet-too-big
	list icmp_type		time-exceeded
	list icmp_type		bad-header
	list icmp_type		unknown-header-type
	option limit		1000/sec
	option family		ipv6
	option target		ACCEPT

config rule
	option name		Allow-IPSec-ESP
	option src		wan
	option dest		lan
	option proto		esp
	option target		ACCEPT

config rule
	option name		Allow-ISAKMP
	option src		wan
	option dest		lan
	option dest_port	500
	option proto		udp
	option target		ACCEPT

wireless如下:


config wifi-device 'radio0'
	option type 'mac80211'
	option path 'soc/11300000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0'
	option channel '36'
	option band '5g'
	option htmode 'HE80'
	option cell_density '0'

config wifi-iface 'default_radio0'
	option device 'radio0'
	option network 'lan'
	option mode 'ap'
	option ssid 'Szh-RS01'
	option encryption 'psk2'
	option key 'think8848'

至此,OpenWrt编译的准备工作完成,下面开始进行编译

7. 编译OpenWrt
7.1 预先下载内核和各类固件代码
# 虚拟机是8核虚拟CPU,我使用其中7个
# 可以不预先下载直接编译,如果不下载,有可能在编译的过程中某个代码下载失败造成编译失败,又得重新开始,我习惯上是先把所有除编译错误之外的故障排除完,然后定定心心的开始编译

make download -j7

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第38张图片

看看这一排排的下载地址,没有代理是有点糟心(也可能使用国内源能够解决这个问题,我没有试过)

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第39张图片

7.2 开始编译
# 开始时间 22:38 结束时间 23:16 编译总时长: 38m
make V=s -j7

编译时的CPU利用率,2016年的i7 7700K

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第40张图片

编译成功,未出现致命错误

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第41张图片

编译好输出目录

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第42张图片

五、部署OpenWrt

1. 准备TF卡烧录工具

可以Windows上烧录TF卡,Windows使用Etchar工具;也可以在Linux上烧录TF卡,下面是Linux上烧录工具的下载安装方式。实验证明Windows上烧录TF卡真的很辣鸡,经常性烧录校验失败,而且每次将TF接入电脑后,电脑就卡死,推荐使用Linux烧录工具

sudo apt install -y pv
curl -sL https://github.com/BPI-SINOVOIP/bpi-tools/raw/master/bpi-tools | sudo -E bash

Linux下烧录工具

2. 将编译好的镜像烧录到TF卡上
# 将SD镜像复制到用户根目录下并解压
cp ~/openwrt/bin/targets/mediatek/filogic/openwrt-mediatek-filogic-bananapi_bpi-r4-sdcard.img.gz ~/

cd ~/ && gunzip openwrt-mediatek-filogic-bananapi_bpi-r4-sdcard.img.gz

# 写入SD(TF)卡,注意:您的SD卡可能不一定和我一样是/dev/sdb,请按实际情况进行调整
sudo ./bpi-copy openwrt-mediatek-filogic-bananapi_bpi-r4-sdcard.img /dev/sdb

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第43张图片

到此,可以将TF插入BPI-R4,将跳线设置为SD卡启动

3. 查看OpenWrt

使用Terminal登录进系统,可以看到Banner界面。

# 查看5G模块和PCI-E设备,可以看到`Quectel RM500Q-Gl`5G模块,`Mediatek MT7922`无线网卡和`Intel SSD 600P`NVMe固态硬盘
lsusb

lspci

cd /dev && ls

ping www.baidu.com

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第44张图片

# 查看5G模块拨号情况(注意,启动系统后大概过30秒再查看)
ps | grep quectel

# 查看网络接口(同样待系统启动30秒后再查看)

ifconfig

下图上phy0-ap0为无线网卡,wwan0为5G模块

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第45张图片

此时我正在写文档的电脑通过有线连接在BPI-R4的Lan口上,已经可以正常上网,注意:当电脑连上BPI-R4后,一开始的时候是可以ping通域名的(如:www.baidu.com),过一会儿后就ping不通了,再过一会儿又会ping通,然后就稳定下来了。

换个姿势来看OpenWrt 
概览

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第46张图片

端口和5G网络

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第47张图片

无线(无线网卡驱动可能不对,另外使用了笔记本天线,请无视渣渣信号)

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第48张图片

磁盘挂载

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第49张图片

六、配置应用服务

1. 将NVMe固态硬盘挂载为OpenWrt的/overlay目录
  • 选择NVMe固态硬盘挂载点,点击编辑按钮,在打开的弹出框中将挂载点设置为/overlay,选中已启用,然后点击保存按钮。
    注意:在挂载磁盘之前,最好将磁盘上清空,避免发生未知错误

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第50张图片

  • 关闭弹出框后,点击屏幕下方的保存与应用按钮。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第51张图片

  • 重启BPI-R4

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第52张图片

  • 重启后可以看到NVMe固态硬盘已经被挂载为//overlay

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第53张图片

2. 部署Docker
  • 准备opkg
    如果您计划直接使用Ubuntu上编译目录(~/openwrt/bin)中的文件作为opkg源,则可以考虑使用pythonhttp.server(http.server文档)挂载http服务;因为我编译使用的是Ubuntu虚拟机,而且网络设置为nat模式,如果要让OpenWrt访问该虚拟机还需要重新设置网络,因此我直接将编译目录中的文件复制到写该Blog的Windows上。

Ubuntu文件层级见下图:

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第54张图片

Windows文件层级见下图:

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第55张图片

  • Windows环境上配置HTTP服务器
    a. 把base,luci,packages,routing,telephonytargets/mediatek/filogic目录复制到Windows环境中。
    b. 下载Windows下轻量化HTTP服务器Rebex Tiny Web Server(官网)。解压,并设置wwwroot目录

<add key="webRootDir" value="D:\self\packages\aarch64_cortex-a53" />

启动Rebex Tiny Web Server

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第56张图片

c. 修改OpenWrtopkg配置,将/etc/opkg/distfeeds.conf设置如下:

src/gz openwrt_core http://192.168.1.147:1180/filogic/packages
src/gz openwrt_base http://192.168.1.147:1180/base
src/gz openwrt_luci http://192.168.1.147:1180/luci
src/gz openwrt_packages http://192.168.1.147:1180/packages
src/gz openwrt_routing http://192.168.1.147:1180/routing
src/gz openwrt_telephony http://192.168.1.147:1180/telephony

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第57张图片

d. 更新opkg

opkg update
  • 安装docker
opkg install dockerd
opkg install docker

docker ps


可以看到docker已经启动

  • 配置Docker
    a. 配置开机启动
/etc/init.d/dockerd enable

b. 配置Docker防火墙设置以及使用网易的Repository

vi /etc/config/dockerd

# 增加配置项
# 将option iptables 设置为 '0'
# list registry_mirrors 'https://hub-mirror.c.163.com'

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第58张图片

此处可以重启BPI-R4检验Docker是否可以正常开机启动

c. 测试Docker
测试Docker的时候不要和LuCI端口冲突

docker run -d --name nginx -p 8080:80 nginx

docker ps -a

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第59张图片

打开nginx主页

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第60张图片

3. 配置ksmbd
  • OpenWrt根目录/下创建文件共享目录
mkdir -p /smbroot

# 创建测试文件
echo hello think8848 >> /smbroot/readme.txt

设置只run许lan口访问,因为我将来只是需要提供只读的工具共享,因此我允许匿名访问,并且是只读目录,见下图:

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第61张图片

保存配置后查看共享文件夹

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第62张图片

4. 某些情况下可能需要配置DNS转发服务

安装部署OpenWrt后,某些情况下LAN网络上的设备可能无法正常解析域名,这个问题我没有去细究,解决方法是直接为dnsmasq配置DNS转发。

使用Banana Pi BPI-R4开发板实现5G上网、Wi-Fi AP、文件共享和Docker服务_第63张图片

正好这时我的电脑是可以正常解析域名的,这个没有什么好测试的,上图演示了修改DNS转发的位置,有需要的筒子们请自行设置

七、后记

至此,本文一开始我确立的目标全部达到了,对于我而言,这篇文章是对近期折腾BPI-R4的一个记录,只有记录下来了,这次折腾就算是有一点点意义,不然半个月之后肯定全部忘却了。后续我计划在OpenWrt-21.02上部署工作所需的正式环境,原理和23.05类似。为什么我自己要在21.02上部署?这不是RM500U-CN不支持23.05嘛,RM500Q-GL留下来在必要的时候做测试用

文内的所有代码和操作步骤我全部经过测试验证,如在参考过程出现错误,请仔细比对环境、版本是否和我使用的一致,建议使用干净的Ubuntu系统、NVMe硬盘进行测试。本文基本上一次成型,写作时间有限,后期非特殊情况也不会再行更新,对于本文语言组织欠佳,章节顺序混乱我深表歉意。

其实在折腾BPI-R4的这一段时间里,学习到不少有用的知识,感觉对于Linux、嵌入式、驱动迁移等好多知识都有涉及,感觉非常有意思,虽然本文可能是我所有博文中最长的一篇了,但实际上在折腾中遇到的、学到的远非这些,我基本上只描述了结果,过程和原理基本都没有讲,比方说为什么开机就自动拨号了,Wi-Fi没有配置为啥就可以连了,等等。没有更多细节的原因有两个,一个是我确实没有多少时间写文档,另一个是我对于OpenWrt算是浅尝辄止了,有些东西你让我说我也说不明白,后续也没有继续深入学习研究的条件,所以就只能这样了,希望能帮到有需要的朋友。

同时,也希望用到看到这篇文章的大佬们不吝指教,提出宝贵的意见建议,能够帮助到更多有需要的朋友,谢谢!

你可能感兴趣的:(5G,docker,容器)