前言:

总想把树莓派闲置的资源给利用起来,给树莓派装上64位系统的起因也是因为原先的openwrt突然出故障,无处寻找原因就只能重新安装。也因此发现了manjaro arm64版本

docker安装

可看前面的文章

拉取镜像与配置

1. 打开网卡混杂模式

sudo ip link set eth0 promisc on

此处的eth0为有线网卡接口名

2. 创建网络

(需结合实际网络情况进行修改)

docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macnet

这条命令需要根据树莓派的实际网络环境进行修改.可以通过ip addr show查看树莓派的ip地址来获得网段范围。 这里一个重要提醒 先对树莓派进行静态ip固定设置

如树莓派ip为192.168.3.200,那么说明树莓派处在192.168.3.x网段。因此需要将上面的命令中的192.168.1.0192.168.1.1修改为192.168.3.0192.168.3.1

此时可以通过docker network ls命令可以看到网络macnet已经建立成功

docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
12debb06d4ff        bridge              bridge              local
1d95814487a4        host                host                local
1bd279243d7b        macnet              macvlan             local
ea9faa7fb21c        none                null                local

3. 拉取镜像

由于使用的为arm64架构的系统,所以我们选取的镜像也需要符合

这里推荐这个buddyfly/openwrt-aarch64 网页控制台的默认密码为password

docker pull buddyfly/openwrt-aarch64

镜像拉取加速的方法前面文章也有介绍

如果为原来的树莓派官方系统这里可以使用阿里云仓库中的镜像

docker pull registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest

拉取镜像完成后,可以通过执行docker images命令查看现存镜像

docker images

4. 开启openwrt容器

docker run --restart always --name openwrt -d --network macnet --privileged buddyfly/openwrt-aarch64:latest

对于后一个镜像的启动

docker run --restart always --name openwrt -d --network macnet --privileged registry.cn-shanghai.aliyuncs.com/suling/openwrt:latest /sbin/init

其中的/sbin/init为容器启动后执行的命令。

其中:

--restart always参数表示容器退出时始终重启,保证服务的稳定性

--name openwrt 参数定义了容器名称为openwrt

-d参数定义容器运行在Daemon模式

--networt macnet参数定义将容器加入macnet网络

--privileged参数定义容器运行在特权模式下

buddyfly/openwrt-aarch64:latest为docker镜像名

启动容器后,可以使用docker ps -a查看当前正在运行的容器

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a26cee7cade6        openwrt:latest      "/sbin/init"        3 hours ago         Up 3 hours                              openwrt

若容器运行信息STATUS列为UP状态,则说明容器运行正常。

5. 进入容器修改相关参数

根据实际网络情况进行修改

docker exec -it openwrt bash

其中: openwrt为容器名称;bash为进入容器后执行的命令

进入openwrt命令行界面,编辑其网络配置文件 我们需要更改Lan口的配置

nano /etc/config/network

该镜像没有自带vim编辑器,有些失望

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.123.100'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option gateway '192.168.123.1'
        option broadcast '192.168.123.255'
        option dns '192.168.123.1'

所有的 192.168.123.x 需要根据树莓派所处网段修改,option gateway和option dns填写路由器的 IP,若树莓派获得的 IP 为 192.168.3.200,路由器 IP 为192.168.3.1,则需要这样修改:

config interface 'lan'
        option type 'bridge'
        option ifname 'eth0'
        option proto 'static'
        option ipaddr '192.168.3.254'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option gateway '192.168.3.1'
        option broadcast '192.168.3.255'
        option dns '192.168.3.1'

option ipaddr 项目定义了 OpenWrt 的 IP 地址,在完成网段设置后,IP最后一段可根据自己的爱好修改(前提是符合规则且不和现有已分配 IP 冲突)。

6. 重启网络

/etc/init.d/network restart

7. 进入网页控制台

在浏览器中输入第五步中设置的option ipaddr的ip进入Luci控制面板

若ip设置为192.168.3.254则在浏览器中输入http://192.168.3.254

用户名为root 默认密码为password 建议登录后就在系统设置项里修改管理员密码

** 8. 关闭DHCP服务 **

在 “网络 - 接口 - Lan - 修改” 界面中,勾选下方的 “忽略此接口(不在此接口提供 DHCP 服务)”,并“保存&应用”。

关闭DHCP

9. 主路由的DHCP设置

进入路由器后台中,将主路由的 DHCP 的默认网关和 DNS 服务器设置为第 5 步中option ipaddr 项目中的 IP。 主路由DHCP

10. 重新连接路由器

完成以上操作后,断开设备(如手机,电脑)与路由器的连接,重新连接路由器,连接路由器的设备将获取到我们设置到的 IP。

其他问题修复

由于我的路由器无法更改dhcp的设置,因此我从第8步开始改用将openwrt设为旁关路由,用静态ip连接openwrt获取地址分配。

从第八步开始,lan口设置中,关闭ipv6的各项设置,关闭动态dhcp,启用强制分配ip地址,即使查找到另一个服务器,也使用openwrt分配地址

同时我又遇到了开启passwall后无法访问国内网站的问题

解决方案为

在防火墙中添加自定义规则

iptables -t nat -I POSTROUTING -j MASQUERADE

重启防火墙 这样之后还是不行,我又在网络lan口设置中将桥接模式取消

问题解决

手动指定网关

如果路由器固件不支持自定义 DHCP 服务的网关及 DNS 地址(常见于路由器官方固件),或者只希望局域网下的个别设备接入旁路网关时,须在接入设备上做以下配置:

安卓: 安卓 需要在安卓的 WIFI 设置内将 IP 获取方式更改为“静态”或“手动”,其中:

“IP 地址”项目需要更改为网段内不冲突的地址;

“网关”或“路由器”项目需要更改为旁路网关 IP 地址;

“前缀长度”项目填写“24”;

“DNS”项目需要更改为旁路网关 IP 地址(两个 DNS 输入框填写一个就可以)。

完成并提交设置后,关闭 WIFI 开关再打开,连接设置的 WIFI 热点,若当前网络参数为设定值,则证明设置成功。

windows: windows

对于linux用户,我想这个问题不难解决