Posted by ColasDAD on 26 Aug, 2022
Raspberry Pi 3B(B+)配合华为E8372系列全网通USB 4G上网卡,组成一个性价比极高的4G无线路由器。
Raspberry Pi 3 B(B+)作为大量生产的ARM cortex-a53架构的64位处理器,性价比极高,现在咸鱼上二手可能不到100元就可以买到;华为E8372系列全网通USB 4G上网卡在OpenWrt上支持Hilink模式,安装配置简便,咸鱼二手也不过150元,全套搭建下来有着很高的性价比,当然也可以把Raspberry Pi 3 B(B+)换成最近火热的NanoPi R2S,支持AES硬件加速,同时相比树莓派会多一个千兆网口,价格只要199元,实施方法一样可以参考下面。
下载支持 Raspberry Pi 3 代的OpenWrt镜像。
OpenWrt官方网站:https://openwrt.org/ Raspbery Pi 3(B+)OpenWrt安装镜像:点此下载
使用balenaEtcher工具将下载的镜像文件写入到TF卡中
OpenWrt官方发布的Raspberry Pi 3 镜像不大,用256M以上的TF卡即可写入,但写入TF卡后,会生成两个分区,boot分区和rootfs分区。其中boot分区为FAT32格式,rootfs分区为ext4格式。默认的rootfs只有几十M,TF卡其余部分都会显示为未分配空间。为了利用起来这部分空间,需要对rootfs进行扩容。
扩容可以通过将TF卡插入普通PC或笔记本后用工具进行,下面演示使用Linux自带命令的方法:
# 对sdb进行分区扩展
root@OpenWrt:~# sudo fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
# 输入 p 显示分区信息
Command (m for help): p
Disk /dev/sdb: 244 MiB, 255852544 bytes, 499712 sectors
Disk model: Storage Device
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x5452574f
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 8192 139263 131072 64M c W95 FAT32 (LBA)
/dev/sdb2 147456 360447 212992 104M 83 Linux
# 输入 d 删除 第二个分区,这里记录下第二个分区的起点是33792
Command (m for help): d
Partition number (1,2, default 2): 2
Partition 2 has been deleted.
# 输入 n 创建新的分区
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
# 输入 p 确认是主分区
Select (default p): p
# 输入分区id 用默认的2
Partition number (2-4, default 2): 2
# 输入 分区起始位置(就是原来分区2起始的位置)
First sector (2048-499711, default 2048): 147456
# 这里直接回车,默认选择终止位置就是硬盘的末尾
Last sector, +/-sectors or +/-size{K,M,G,T,P} (147456-499711, default 499711):
Created a new partition 2 of type 'Linux' and of size 172 MiB.
Partition #2 contains a ext4 signature.
Do you want to remove the signature? [Y]es/[N]o: n
# 输入 w ,写入硬盘, 这里可能会有一个warning,忽略即可
Command (m for help): w
The partition table has been altered.
Syncing disks.
上面操作完成后还需执行以下步骤使配置生效:
sudo e2fsck /dev/sdb2
sudo resize2fs /dev/sdb2
至此TF卡准备完毕,插入Raspberry Pi 3并启动即可。初始状态下Raspbery Pi 3上的WIFI是关闭的,网口是作为LAN口使用,通过PC或笔记本接入此网口可自动获取到IP并通过SSH 192.168.1.1访问OpenWrt路由器。
修改/etc/config/wireless文件(系统带有 vi 命令),参照下面将 wifi-device radio0配置中的 disabled 改为’0’,以启用无线网卡。
...
config wifi-device 'radio0'
...
option disabled '0'
...
配置 WIFI 的模式为AP从而让其它设备后续可以通过 WIFI 连接 OpenWrt ,参考配置信息如下:
...
config wifi-iface 'default_radio0'
option device 'radio0'
option network 'lan'
option mode 'ap'
option ssid '你的WIFI SSID'
option encryption 'psk2'
option key '你的WIFI密码'
...
修改/etc/config/network文件,配置信息参考如下:
...
config interface 'lan'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.9.1'
option netmask '255.255.255.0'
option ip6assign '60'
option gateway '192.168.9.1'
config interface 'wan'
option proto 'dhcp'
option ifname 'eth0'
...
以上配置完成后执行
/etc/init.d/network restart
重启网络服务。以上配置会将OpenWrt路由器的地址修改为192.168.9.1,并且把Raspberry Pi 3自带的网口改为DHCP的WAN口使用,这样做是需要通过WAN口将路由器接入互联网安装相关组件。之后将Raspberry Pi 3的网口接入互联网,通过WIFI接入OpenWrt进行后续配置。
在OpenWrt系统中安装支持软件。使用SSH登录OpenWrt路由器,执行以下命令即可:
opkg update
opkg install kmod-usb-net-rndis kmod-usb-net kmod-usb2 usb-modeswitch kmod-usb-net-cdc-ether
安装完成后,把E8372插入路由器USB口,待4G指示灯亮起,通过SSH访问OpenWrt路由器,执行ifconfig命令,你会发现物理设置接口多了一项以太网适配器: “eth1” ,eth后面的数字是在已有接口基础上增加的,它就是4G设备接口。 此时再次修改/etc/config/network文件,将eht1加入到wan配置中即可使用4G上网,配置信息参考如下:
...
config interface 'wan'
...
option proto 'dhcp'
option ifname 'eth1'
...
以上配置完成后执行
/etc/init.d/network restart
原有路由器器自带的eth0可以按照自己的需求继续做wan口,或者作为lan口使用,修改方式就是将option ifname 'eth0'按照需要移动到config interface 'lan'或者config interface 'wan'的配置下。记得修改配置后/etc/init.d/network restart重启配置生效。
OpenWrt的snapshots版本是精简版,不含WEB管理端,后期为了管理方便,可自行安装 luci 界面,即可通过浏览器访问路由。
opkg update
#HTTP访问组件
opkg install luci
#HTTPS访问组件
opkg install luci-ssl
#启动WEB
/etc/init.d/uhttpd start
#设置WEB自动启动
/etc/init.d/uhttpd enable
如果遇opkg安装软件时遇到“can't create '…………': Read-only file system”的错误,可以通过e2fsck /dev/mmcblk0p2
修复文件系统来解决。