使用Docker安装OpenWrt

Posted by     yuanyeex on Friday, May 27, 2022

前置准备:

  1. 安装Docker

1. 开启网卡混杂模式

首先需要开启网卡混杂模式。 开启混杂模式后,网卡能够接收所以经过它的数据,而不只是目的地址是是它的数据。默认情况下,网卡都是工作在非混杂模式下,网卡只会接收目的地址指向自己的数据。当网卡工作在混杂模式的时候,网卡会将来自接口的所有数据都捕获交给相应的驱动程序。 通过下面的命令开启混杂模式,其中eth0是我的网卡名:

sudo ip link set eth0 promisc on

注意,这里的配置会在重启后失效,要重启后仍然生效,需要添加到启动参数中。 第一步:启动脚本 新建一个文件:/etc/rc.local,并添加可执行权限:

sudo touch /etc/rc.local
sudo chmod u+x /etc/rc.local

添加“开启网卡混杂模式”的命令:

ip link set eth0 promisc on
exit 0

第二步:添加systemd启动服务 创建启动服务:

sudo touch /etc/systemd/system/rc-local.service

rc-local.service启动服务内容如下:

[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local
 After=network.target

[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 RemainAfterExit=yes

[Install]
 WantedBy=multi-user.target

第三步:启动systemd并设置开机启动

sudo systemctl enable rc-local
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service

重启机器后,通过ifconfig查看对应的网卡是否开启了‘混杂模式’,即网卡flags中有PROMISC

eth0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  ....

2. 安装OpenWrt

2.1 创建网络

下面的命令中,subnet、gateway需要根据机器所在的网段做修改,通过ifconfig查看机器所在的网络。

docker network create -d macvlan --subnet 192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 macnet

可以通过sudo docker network ls查看新创建的网络。

2.2 启动OpenWrt

首先,拉取OpenWrt的镜像,拉取之前通过arch查看系统的内核架构,我是在树莓派查,架构是armv8:

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

启动OpenWrt:

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

但是如果启动失败了,报错如下

docker: Error response from daemon: failed to create the macvlan port: operation not supported.

则可以通过如下指令来解决这个问题

sudo apt install linux-modules-extra-raspi sudo reboot 

reboot后,可以通过执行docker container ps -a查看镜像是否启动成功。

2.3 修改OpenWrt参数

通过交互方式进入容器:

sudo docker exec -it openwrt bash

编辑OpenWrt的网络配置文件vim /etc/config/network,修改lan的相关内容:

config interface 'lan'
        option ifname 'eth0'
        option proto 'static'
        option netmask '255.255.255.0'
        option ip6assign '60'
        option ipaddr '192.168.31.110' #修改一个静态地址,可以通过这个地址访问到树莓派
        option gateway '192.168.31.1' #修改为路由器地址
        option dns '192.168.31.1'     #修改为路由器地址

修改完成后保存,并重启OpenWrt的网络:

/etc/init.d/network restart

3. 配置OpenWrt

通过上面的配置后,我们可以通过OpenWrt的IP访问了,我的OpenWrt IP是192.168.31.110, 访问控制页面,用户名密码 root / password。 首先配置OpenWrt的网络: 网络 –> 接口 –> LAN –> 修改: image.png 基本设置中,勾选忽略此端口: image.png 物理设置中,取消勾选“桥接接口”,否则会导致无法上网。 image.png 点击保存并应用。

4.设置OpenWrt作为旁理由

方法一: 配置路由器,对所有连接该路由器的设备生效 进入路由器后台,修改路由器默认网关和DNS服务器设置为树莓派静态IP, router

方法二: 单个设备网络配置,仅对配置的机器生效 原理同上,修改网络连接的默认网关。 device

「真诚赞赏,手留余香」

Yuanyeex

真诚赞赏,手留余香

使用微信扫描二维码完成支付