闲谈时光
openwrt
首先我们说一下openwrt
,说白了你可以你理解为路由器系统的一种。
OpenWrt 是面向嵌入型设备的 Linux 发行版,所以 OpenWrt 系统运行时的资源占用率会很低。而树莓派的硬件性能要比普通路由器要高很多。虽然树莓派在硬件配置上的绝对优势能让 OpenWrt 有更大的施展空间,但相应的,硬件上的优势也带来了资源的浪费(OpenWrt 在树莓派上正常运行时,资源占用率只有不到 1/10)。再加上 OpenWrt 的可扩展性不是很强,所以很多能在 Raspbian/Debian 上能做的事情在 OpenWrt 上往往无法实现。
总不可能直接用树莓派只刷个openwrt
就没了吧,那怕是有点奢侈了。那有什么方式呢?
没错就是Docker
,这样就可以让linux
和openwrt
共存了。树莓派就不这么吃灰了。
旁路网关
那么什么又是旁路网关呢?其实他跟spring cloud
有那么几分相似之处。
普通路由器就像一开始的单机模式,什么都是它一台机器负责,比如信号转发、DNS、网关等,其中的“网关”角色负责路由器内部数据的处理。但因为一般家用的路由器硬件性能很有限,在运行一些比较吃资源的应用(如酸酸乳、去广告等)时,几乎会占满所有硬件资源,导致路由器网络/系统不稳定等诸多问题。这个时候我们把网关的这个角色划分出去单独的在树莓派上跑,是不是分担了主路由的压力,是不是有点微服务那个味道。这样子每个角色各司其职,树莓派也结束了它吃灰的命运了,更好的验证了那句 买前生产力,买后旁路由。
注意:
- 本文docker镜像只适用于树莓派 2B/3B/3B+/4B,在其他设备上理论上不能正常使用
- 在 Docker 中运行 OpenWrt ,树莓派将工作在旁路网关模式下,在这种工作模式下,树莓派的板载无线网卡不会工作(同时在 OpenWrt 的控制面板中也找不到有关 WIFI 的设置)。所以,需要将树莓派与路由器通过网线连接来使用。
前期准备
Docker
肯定是必不可少的,你也可以自己在树莓派上安装,莫度有很多教程,这里就不多说了,我这里用的不是树莓派官方的系统,
刷的是 树莓派爱好者基地 制作的树莓派的镜像,根据树莓派的特性专门做了优化,下面附上Github地址:
传送门。
推荐刷入 无桌面增强版,这个版本是自带docker的,而且也有web管理界面,更加详细的都在Readme文档里面写着,自己研究把。默认用户:PI
默认密码:raspberry
插上网线,ssh登陆,等等!那又有一个疑惑,我怎么知道树莓派ip地址,这里有很多方式:
-
接显示器,键盘,
sudo ifconfig
(麻烦) -
进入路由器后台查看(太麻烦)
-
IP Scanner 一款扫描局域网ip的工具 。传送门
当你连上树莓派之后,准备工作就完成了。
具体步骤
Step 1: 打开网卡混杂模式
sudo ip link set eth0 promisc on
Step 2 :创建docker网络**
注意了,这里需要结合自己的网络修改,不能照搬!! sudo ifconfig
可以查看树莓派IP地址,不过刚刚不是都知道了嘛 [汗],多一种方式嘛
刚刚登陆ssh的ip地址 192.168.31.7
那么说明树莓派处在 192.168.31.x
网段,那么下面的命令中的
--subnet=192.168.x.0/24
和--gateway=192.168.x.1
将要替换成对应网段的地址。(此处的x请根据自己的网络进行修改)
替换后:
docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 macnet
这是我们 docker network ls
就可以查看到刚刚创建的网络
pi@raspbian:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
e5988f578007 bridge bridge local
107c16227dd4 docker_gwbridge bridge local
3ceb60d85b9c host host local
b1929166e45c macnet macvlan local
93ad7ae8da72 none null local
这里我还特意去查了一下macvlan
macvlan 是一种虚拟网卡的解决方案:
- macvlan并不创建网络,只创建虚拟网卡。
- macvlan会
共享物理网卡
所链接的外部网络
,实现的效果跟桥接模式是一样的。
想要了解更多等会文末会附上个参考链接。
Step 3 :拉取镜像。
docker pull harryzhang6/openwrt:latest
我们可以通过docker images
查看本地的镜像
pi@raspbian:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
harryzhang6/openwrt latest 5c354d2e6f6f 3 hours ago 235MB
这里也就说明镜像拉取成功了。
Step 4 :创建并启动容器
docker run --restart always --name openwrt -d --network macnet --privileged harryzhang6/openwrt:latest /sbin/init
--restart always
参数表示容器退出时始终重启,使服务尽量保持始终可用;--name openwrt
参数定义了容器的名称;-d
参数定义使容器运行在 Daemon 模式;--network macnet
参数定义将容器加入maxnet
网络;--privileged
参数定义容器运行在特权模式下;
我们docker ps
确认一下容器是否启动成功
pi@raspbian:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
755d018206fd harryzhang6/openwrt:latest "/sbin/init" 2 minutes ago Up 2 minutes openwrt
确认启动成功,下一步就是进入容器配置了
Step 5 :进入容器并修改相关参数
注意:这一步的某些配置也跟上面一样,不能照搬
docker exec -it openwrt bash
执行此命令后我们便进入 OpenWrt 的命令行界面,首先,我们需要编辑 OpenWrt 的网络配置文件:
vim /etc/config/network
我们需要更改 Lan 口设置:
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.31.100' //需要更改处
option netmask '255.255.255.0'
option ip6assign '60'
option gateway '192.168.31.1' //需要更改处
option broadcast '192.168.123.255'
option dns '192.168.31.1' //需要更改处
这里是我配置好的,需要自行更改。option gateway
和option dns
填写路由器的 IP,若树莓派获得的 IP 为 192.168.31.154
,路由器 IP 为192.168.31.1
.
option ipaddr
项目定义了 OpenWrt 的 IP 地址,在完成网段设置后,IP最后一段可根据自己的爱好修改(前提是符合规则且不和现有已分配 IP 冲突)。
Step 6 :重启网络
/etc/init.d/network restart
Step 7 : 进入openwrt 管理页面
在浏览器输入刚刚Step 5 中定义的 option ipaddr
,我这里是192.168.31.1
,就可以看到后台的管理界面

用户名:root
密码:password
Step 8 :关闭DHCP服务
在 “网络 - 接口 - Lan - 修改” 界面中,勾选下方的 “忽略此接口(不在此接口提供 DHCP 服务)”,并“保存&应用”

Step 9: 主路由 DHCP 设置
这里不非必要的,
进入路由器后台中,将主路由的 DHCP 的默认网关和 DNS 服务器设置为第 5 步中option ipaddr
项目中的 IP。
由于不想每台设备都通过这个opwrt,只有自己设置的设备才走openwrt这个网关。
如果你修改了主路由DHCP 请重启路由器。
到这里也差不多了教程,下面附上手动指定网关的教程
手动指定网关
如果路由器固件不支持自定义 DHCP 服务的网关及 DNS 地址(常见于路由器官方固件),或者只希望局域网下的个别设备接入旁路网关时,须在接入设备上做以下配置:
windows:

在无线热点的“属性”界面下,点击 “IP 设置 - 编辑”按钮,在弹出框中更改 IP 分配模式为“手动”,打开 IPV4 的开关,根据所处网段及上文安卓的相关设置填写相关参数即可。
安卓

需要在安卓的 WIFI 设置内将 IP 获取方式更改为“静态”或“手动”,其中:
ip地址跟上面一样,同网段不重复就行,前缀长度:24 两个DNS填写旁路网关ip地址。
openwrt 截图
有几个主题,但这个比较好看。

看看这个内存占用,还能干





END
最后说一下,这个openwrt 镜像是没有AP功能的,没有WIFI设置这个选项,但大多数功能可以使用。
openWrt 容器跟随树莓派系统启动,无需手动干预;
树莓派终于不在吃灰了!!!!