Loading... ## 提醒 强烈建议先阅读全文后再进行操作 **作者的软硬件环境:** * 树莓派 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](https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script) ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/95324662.png) **具体方法如下:** ``` #获取脚本 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成功的提示。 ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/281278051.png) ### 图形界面 安装`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 ``` ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/3851120085.png) 这样子就安装成功了,通过浏览器访问`http://树莓派ip地址:9000`就可以登录图形化界面了。第一次进入的时候需要设置密码,至少**12个字符的长度**。 ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/2226084540.png) ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/1661221948.png) **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`,回车; ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/595100809.png) 接着在子菜单中选择`S1 Wireless LAN`; ![](https://caleb.ink/usr/uploads/2023/01/3527446245.png)   ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/734680487.png) 进入设置界面时会要求选择国家地区,我选择了`US`,因为之前操作过一遍,所以没有截图。接下来会要求输入`SSID`,因为我们不需要连接WLAN,因此`<Cancel>`就行了。 ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/556033781.png) 这时再次`ipconfig`查看网卡,就可以看到wlan0这个网卡了 ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/449632989.jpg)   ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/475303381.png) ### 开始配置网卡 计划使用`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文章。** ![](https://gallery-of-jafari.oss-cn-beijing.aliyuncs.com/caleb.ink/2023/01/2515538283.png) ## 3. 家中原本的路由器设置 **进入路由器后台中,将主路由的 DHCP 的默认网关和 DNS 服务器设置为第 5 步中**`option ipaddr`项目中的 IP。 ## 参考资料 [debian 下docker 网卡直通*一个人の国度的博客-CSDN博客*docker直通物理网卡](https://blog.csdn.net/qq_21491871/article/details/118105146) [在Docker 中运行 OpenWrt 旁路网关 | 美丽应用 (mlapp.cn)](https://mlapp.cn/376.html) 最后修改:2023 年 11 月 23 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 5 如果觉得我的文章对你有用,请随意赞赏
2 条评论
也许可以尝试使用USBWIFI网卡来达到目的
想请教一下,目前找到docker直接使用树莓派无线网卡的方法了吗