提醒
强烈建议先阅读全文后再进行操作
作者的软硬件环境:
- 树莓派 Raspberry 4B+ (有一个以太网卡和一个无线网卡)
- 系统:Raspberry OS Lite (64位)
提示:若需要为树莓派安装该系统,请使用官方的Raspberry Pi Imager软件设置账户和密码,再写入固件。因为最新的系统似乎不再支持原来的默认密码了。
本文原本的目标是要实现下述的三个功能:
- 在树莓派中,通过 Docker 安装 Openwrt 实现软路由(作主路由使用)
- Openwrt 创建虚拟 macvlan 通过
eth0进行 WAN 口通讯 - Openwrt 独享
wlan0接口,作为 wireless access point
然而,令人感到遗憾的是,截止目前,本人尚未找到docker直接使用无线网卡的方法。经过尝试,无论以什么方式让docker使用无线网卡,最终都会被识别为一个ethx的以太网接口,这就造成了第三点目标难以实现。
因此,这里有两个解决办法:
方案1. 将无线网卡作为WAN口的接入点,并使用以太网网卡为其他设备提供网络 方案2. 将树莓派作为旁路由使用
本文对于这两种方法均有涉及,如果有大佬知道如何实现docker直通无线网卡,欢迎来讨论。
1、配置Docker
获取docker脚本并安装
根据Docker官网文档的描述,在Raspbian系统下,安装Docker只能通过脚本的形式进行。文档链接如下:Install Docker Engine on Debian | Docker Documentation
具体方法如下:
#获取脚本
curl -fsSL https://get.docker.com -o get-docker.sh
#执行脚本(这一步我花了5分钟)
sudo sh get-docker.sh测试Docker
这里运行hello-world镜像来进行测试,如果没有这个镜像,他会自动拉取安装。
sudo docker run hello-world运行成功会打印出安装Docker成功的提示。
图形界面
安装portainer的docker图形界面,便于后期对于docker的管理,需要执行的指令如下:
#下载 Docker 图形化界面 portainer
sudo docker pull portainer/portainer
#创建 portainer 容器
sudo docker volume create portainer_data
#运行 portainer
sudo docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainerhttp://树莓派ip地址:9000就可以登录图形化界面了。第一次进入的时候需要设置密码,至少12个字符的长度。 docker常用到的指令如下:
#查看 Docker 版本
docker -v
sudo docker pull 仓库/镜像:版本(留空的话默认为 latest)
sudo docker run 加参数,用来创建容器
#查看运行容器
sudo docker ps
#查看所有下载的镜像
sudo docker images
#进入容器终端
sudo docker exec -i -t ha /bin/bash
#实时查看10行的 ha 日志
sudo docker logs -f -t --tail 10 ha
#重启 systemctl 守护进程
sudo systemctl daemon-reload
#设置 Docker 开机启动
sudo systemctl enable docker
#开启 Docker 服务
sudo systemctl start docker2、 安装openwrt镜像
打开wlan0网卡
如果要将Openwrt设置为旁路由则可以直接跳过这一步。
使用ifconfig命令查看网卡,如果存在wlan0则可以跳过这一小步,否则,需要先进入raspi-config设置地区,使用如下命令。
sudo raspi-config进入config界面后用方向键选择1 System Options,回车;
接着在子菜单中选择S1 Wireless LAN;
进入设置界面时会要求选择国家地区,我选择了US,因为之前操作过一遍,所以没有截图。接下来会要求输入SSID,因为我们不需要连接WLAN,因此<Cancel>就行了。
这时再次ipconfig查看网卡,就可以看到wlan0这个网卡了
开始配置网卡
计划使用wlan0网卡作为软路由的WAN口,使用eth0网卡作为软路由的LAN口,我的的ip地址如下,请根据具体情况自行修改:
WAN口ip地址:192.168.31.xx/24
LAN口ip地址:192.168.21.xx/24
sudo docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=wlan0 macvlan0
#下面这一行作为旁路由使用的话不需要
sudo docker network create -d macvlan -o parent=eth0 macvlan1拉取镜像
拉取镜像并连接到mac虚拟网卡,不出意外的话,macvlan0和macvlan1会分别对应openwrt系统中的eth0和eth1 。
sudo docker run --restart always --name openwrt -d --network macvlan0 --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:rpi4 /sbin/init
#连接第二张网卡,旁路由跳过下一行
sudo docker network connect macvlan openwrt设置
进入 openwrt
sudo docker exec -it openwrt /bin/bash进入容器,此时还不能上网,需要先进行简单的配置。如果不会使用vim的话也可以用nano 。
vim /etc/config/networkconfig interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.31.111'
option netmask '255.255.255.0'
option ip6assign '60'
option gateway '192.168.31.1'
option broadcast '192.168.31.255'
option dns '192.168.31.1'重启网络
/etc/init.d/network restart这样就可以从浏览器中,通过刚刚设置的ip地址访问openwrt了,我的是192.168.31.111,请根据不同的情况自行修改。初始的密码是password,进入主页后可以探索更多的功能。
如果按照方案1设置为主路由的,需要在openwrt的界面中将原来的lan改名为wan(命名严谨的问题,非必须),并设置lan口。具体设置方式可以参考其他openwrt文章。
3. 家中原本的路由器设置
进入路由器后台中,将主路由的 DHCP 的默认网关和 DNS 服务器设置为第 5 步中option ipaddr项目中的 IP。











