提醒
强烈建议先阅读全文后再进行操作
作者的软硬件环境:
- 树莓派 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/portainer
这样子就安装成功了,通过浏览器访问
http://树莓派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 docker
2、 安装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/network
config 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。