在虚拟机,物理机部署OpenWrt路由系统,应该是很多人都折腾过的了,折腾的尽头还是希望省事的用上稳定的网络,现在,OpenWrt来到了在Docker部署的时候了,如果你感兴趣,可以看看这个建议教程,五分钟就能搭建好.

本教程使用环境为PVE下的Ubuntu虚拟机:

1
2
  $ uname -an
Linux emby 5.15.0-56-generic #62-Ubuntu SMP Tue Nov 22 19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

因为是旁路由模式,配置的网络是接入现有的局域网,我的局域网环境信息如下:

1
2
3
4
网络:172.16.0.0/12
主路由器(网关):172.16.16.172
子网掩码:255.240.0.0
旁路由IP:172.16.16.5

网卡混杂模式

首先设置docker所在机器的网卡模式,通过root用户或者sudo执行以下命令(其中ens18是你的网卡名字,根据你的实际替换):

1
ip link set ens18 promisc on

通过ip link,检查该网卡是否开启混杂模式成功:
1
2
3
4
5
开启前:
ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000

开启后(多了PROMISC):
ens18: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000

创建Docker网络

执行以下命令(供参考,具体网段,网卡信息以你本地为准):

1
2
docker network create --driver macvlan --subnet=172.16.0.0/12 --gateway=172.16.16.172 -o parent=ens18 openwrt

1
2
3
# 执行示例
cat@emby:~$ docker network create --driver macvlan --subnet=172.16.0.0/12 --gateway=172.16.16.172 -o parent=ens18 openwrt
93fc02dc52280c6e9200c692a617d74cad5bf074f67b4933d7f4ae6bdb2b2a8f

下载镜像

不是随意的OpenWrt镜像都能在docker下运行,这里推荐https://supes.top/,可以自定义构建,也可以下载现成的镜像(下载最后一个可解压固件,一般用于Docker或LXC等容器).

下载后不用解压,将文件命名为:openwrt-x86-64-generic-rootfs.tar.gz.

导入镜像

将镜像执行以下命令导入,最后一个参数是导入后的名字,看你喜好:

1
docker import openwrt-x86-64-generic-rootfs.tar.gz cat_openwrt
1
2
3
# 执行示例
cat@emby:~$ docker import openwrt-x86-64-generic-rootfs.tar.gz cat_openwrt
sha256:02899ef587360f1937bcfcd33a16599293da549c3b47d4778b23b9b4c9cdd7d5

创建容器

执行以下命令创建容器:

1
2
3
4
5
6
7
docker run -d \
--restart always \
--name openwrt \
--network openwrt \
--privileged=true \
cat_openwrt \
/sbin/init
1
2
3
4
5
6
7
8
9
# 执行示例
cat@emby:~$ docker run -d \
--restart always \
--name openwrt \
--network openwrt \
--privileged=true \
cat_openwrt \
/sbin/init
4802cedf20989b641fc3e619af2a31421beb87f59d6deb2dce0b44a2b9a704dd

进入容器

1
docker exec -it openwrt sh
1
2
3
4
5
6
7
# 执行示例
cat@emby:~$ docker exec -it openwrt sh


BusyBox v1.35.0 (2023-01-05 23:01:34 UTC) built-in shell (ash)

/ #

修改IP

如果IP信息不对,可以执行命令修改并重启网络:

1
sed -i 's/172.16.16.5/172.16.16.1/' /etc/config/network && /etc/init.d/network restart

当然,你也可以在容器里面手动修改其他参数.

参考

Docker版OpenWrt旁路由安装设置教程