树莓派-Docker安装最新全功能OpenWRT
云枫渡Hsolia
2021年08月18日 19:44

固件介绍与下载

此次教程使用的镜像基于 pro­ject-Open­Wrt 18.06 固件制作镜像,编译方法及模板来自 https://github.com/SuLingGG/OpenWrt-Rpi 在此感谢! 基于官方 OpenWrt 19.07 编译的固件在插件兼容性上还有很多问题,极不稳定。如果是要稳定使用建议使用 Lean 或者 project-OpenWrt 18.06 固件

Docker 网络配置

打开网卡混杂模式

代码块
JavaScript
自动换行
复制代码
sudo ip link set eth0 promisc on
复制成功

创建 macvlan 网络

在 Docker 中,macvlan 是众多 Docker 网络模型中的一种,并且是一种跨主机的网络模型,作为一种驱动(dri­ver)启用(-d 参数指定),Docker macvlan 只支持 bridge 模式。相同的 macvlan 之间可以互相通信,不同的 macvlan 网络之间在二层上不能通信,需要借助三层的路由器才能完成通信。做这一步就是让 Docker 中的 Open­Wrt 容器和路由器等其他终端设备处在同一个二层网络中。

代码块
JavaScript
自动换行
复制代码
docker network create -d macvlan --subnet=10.0.0.1/24 --gateway=10.0.0.1 -o parent=eth0 macnet
复制成功

命令解释如下:

很重要 命令中的 --subnet 和 --gateway参数需要根据自己的网络环境修改,切记不要照抄。其中  #就是你的路由器地址  #是你路由器地址所在的网段。 一般情况是修改两个10.0.0.1为自己主路由地址 创建完成后可以使用 查看当前主机的网络环境,其中出现了macvlan网络

创建并启动容器

首先下载编译好的官方固件,提供 Github 和 OneDrive 两种下载方式,Github 如果比较慢可以使用 OneDrive。由于 OneDrive 容量有限只提供基于官方源码编译的固件。制作 Docker 镜像需要使用 rootfs固件,别下错了。 下载地址:https://github.com/SuLingGG/OpenWrt-Rpi 下载好得到文件,通过 sftp将固件上传至树莓派/home/pi目录。

将固件导入 Docker 镜像

代码块
JavaScript
自动换行
复制代码
docker import /home/pi/openwrt-bcm27xx-bcm2711-rpi-4-rootfs.tar.gz openwrt-pi4
复制成功

查看镜像

代码块
JavaScript
自动换行
复制代码
docker image ls
复制成功

启动 OpenWrt 容器

创建容器,命令如下

代码块
JavaScript
自动换行
复制代码
docker run -d --name="OpenWRT2" \      --restart unless-stopped \      --network macnet \      --privileged \      -v /mnt/sda1:/home/harddisk/  \      -v /etc/resolv.conf:/etc/resolv.conf \      openwrt-pi4:latest \      /sbin/init
复制成功

 #参数用于挂载宿主机目录到 Docker 容器中, 由于未知原因,每次重启 Open­Wrt 容器都会导致其 DNS 服务器被修改为127.0.0.11,导致域名解析失败不能上网,所以使用挂载宿主机 DNS 服务器文件 /etc/resolv.conf的方式解决此问题。 因为 Open­Wrt 中有 smba 文件共享服务功能,所以使用 挂载 作为媒体目录。如果不需要也可以不挂载此目录。 创建完成后使用

代码块
JavaScript
自动换行
复制代码
docker ps -a
复制成功

查看容器创建情况

修改 OpenWrt 容器相关配置

进入容器内部

代码块
JavaScript
自动换行
复制代码
docker exec -it OpenWRT2 bash
复制成功

修改容器网络配置

代码块
JavaScript
自动换行
复制代码
vi /etc/config/network
复制成功

请根据自己的网络情况进行修改,不要照抄,修改后的完整配置如下

代码块
clike
自动换行
复制代码
config interface 'lan'          
  option type 'bridge'          
  option ifname 'eth0'          
  option proto 'static'          
  option ipaddr '192.168.2.240'          
  option netmask '255.255.255.0'          
  option ip6assign '60'          
  option gateway '192.168.2.1'          
  option broadcast '192.168.2.255'  
复制成功

重启容器内部网络服务

代码块
clike
自动换行
复制代码
/etc/init.d/network restart
复制成功

这里需要提到的一点是,如果你需要同时使用多个 Open­Wrt 容器,那么一定要修改 mac 地址,因为 Open­Wrt 的固件 mac 地址都是一样的,不修改 mac 地址会出现冲突导致网络不稳定。

修改 lan 的 mac 地址

代码块
clike
自动换行
复制代码
vi /etc/config/network
复制成功

代码块
clike
自动换行
复制代码
config interface 'loopback' option ifname 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fd1d:4f70:9021::/48' config interface 'lan' option type 'bridge' option ifname 'eth0' option proto 'static' option ipaddr '192.168.2.240' option netmask '255.255.255.0' option ip6assign '60' option gateway '192.168.2.1' option broadcast '192.168.2.255' option dns '192.168.2.240' option 'macaddr' 'd8:64:c7:5e:f1:c6'
复制成功

修改 eth0 mac 地址

代码块
clike
自动换行
复制代码
vi /etc/rc.local
复制成功

之后重启 Open­Wrt 容器 至此 Open­Wrt 容器的安装及配置部分我们就已经完成了。接下来就是登录 Open­Wrt 的 web 页面操作了。

OpenWrt 上网配置

在浏览器输入之前在 Open­Wrt 容器里配置的地址 192.168.2.240

,即可打开 Open­Wrt 控制面板登陆页。默认密码: password

在网络诊断部分进行网络测试,使用域名 baidu.com 如果此处网络不通,请登录树莓派检查 DNS 配置文件 将 name­server 设置为 Open­Wrt 的地址 。 至此上网的部分就基本设置好了,需要魔法加持的,就可以配置好ssr plus 或者 pass­wall 或者其他的特殊服务 旁路由的设置和上一篇一样 可参考上一篇