系统:ubuntu24.04
架构:x86
1. 安装docker
1.1 离线安装
根据系统版本,依次下载最新的几个关于docker的软件包(注意后缀版本顺序)
- container.io
- docker-ce-cli
- docker-ce
- docker-compose
导入文件到物理机中,依次按顺序安装这几个包
sudo dpkg -i container.io*.deb
sudo dpkg -i docker-ce-cli*.deb
sudo dpkg -i docker-ce*.deb
sudo dpkg -i docker-compose*.deb
1.2 在线安装
sudo apt install containerd.io docker-ce-cli docker-ce docker-compose
2. 配置物理机网络
2.1 查看物理机网卡信息
如下为物理机的网卡信息
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> ************
2: enp1s0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> **********
3: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,PROMISC,UP> ***************
4: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> ************
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> ****************
2.2 系统网络配置
为了方便配置使用以及后续登录openwrt后台管理系统,你需要配置网卡信息
2.2.1 开启网口的混杂模式(临时)
# 仅临时设置,后续由openwrt管理
ip link set enp1s0 promisc on
ip link set enp2s0 promisc on
2.2.2 开启IP转发功能
# 修改配置文件,解除net.ipv4.ip_forward=1的注释
vim /etc/sysctl.conf
# net.ipv4.ip_forward = 1
2.3 netplan网卡设置
若无需远程,直接操作物理机(接键盘和显示器)此设置可跳过
我们做以下自定义规定(读者可自行设计)
- enp1s0:有线网卡1,我们规定这个网口为Wan口,用于连接互联网
- enp2s0:有线网卡2,我们规定这个网口为Lan口,供内部网络的有线设备连接
- wlo1: 无线网卡1,我们规定这个网口为Lan口,供内部网络的无线设备连接
- 其他网卡:…
# ubuntu 20.04的网络配置文件路径
sudo vim /etc/netplan/00-installer-config.yaml
# ubuntu 24.04的网络配置文件路径
sudo vim /etc/netplan/50-cloud-init.yaml
# 其他系统请参考其他资料
配置如下:其中Lan口配置为静态IP,Wan配置为DHCP动态获取IP
network:
ethernets:
enp1s0:
dhcp4: true # 启用DHCP
dhcp6: false
optional: true
enp2s0:
dhcp4: false
dhcp6: false
addresses: [192.168.2.1/24] #设置静态IP
optional: true
version: 2
配置完物理机的ip地址后,即可使用其他PC电脑连接物理机的Lan口(192.168.2.1),可选择使用远程ssh(vscode-remote、powershell、xshell等)完成后续的配置
3. openwrt容器配置
可选择手动配置容器,也可选择compose工具快捷生成容器
3.1 手动配置容器(不推荐)
3.1.1 配置虚拟网络接口
在Lan口网卡enp2s0上附加网络接口netLan,指定网段192.168.2.0/24
docker network create -d macvlan --subnet=192.168.2.0/24 -o parent=enp2s0 netLan
查看已添加的docker网络接口
docker network ls
如果想要修改子网段,需要先删除该网络后再重新添加,并且确保没有容器使用该网络
docker network rm netLan
3.1.2 拉取openwrt镜像
推荐使用:ImmortalWrt镜像地址
ImmortalWrt是OpenWrt的一个分支,移植了更多的软件包,支持了更多的设备,更好的性能,并为中国大陆用户进行了特殊的优化。
# 拉取镜像
#【dockerproxy.cn】为加速服务,【zzsrv/openwrt:latest】为镜像地址
docker pull dockerproxy.cn/zzsrv/openwrt:latest
# 查看所有镜像列表
docker images
若后续发生问题,可重新使用该镜像生成openwrt容器
3.1.3 启动openwrt容器
注意:请勿将enp2s0和netLan设置为相同静态IP,否则无法区分物理机和docker容器的ip地址
docker run --restart always --name openwrt -d --network netLan --ip 192.168.2.2 --privileged zzsrv/openwrt:latest /sbin/init
- docker run
启动Docker容器的命令- –restart always
总是重新启动- –name openwrt
给容器命名为openwrt- -d
表示容器将在后台(守护进程模式)运行- –network netLan
指定容器使用的网卡- –privileged
这个选项使容器获得扩展权限,可以访问宿主机的某些设备,类似于在物理机上运行- –ip 192.168.2.1
为容器指定一个静态IP地址- registry.cn-shanghai.aliyuncs.com/suling/openwrt:x86_64
运行的镜像名称,如果本地没有则会从在线拉取- /sbin/init
容器内要执行的命令,/sbin/init 是系统初始化的入口点,它会启动所有必要的系统进程和服务
3.1.4 附加网络
# 附加Wan口网络
docker network create -d macvlan --subnet=192.168.1.0/24 -o parent=enp1s0 netWan
docker network connect netWan openwrt
3.1.5 *报错
若openwrt启动失败、发生报错等问题,可重新进行配置
# 查看所有容器信息
sudo docker ps -a
# 停止容器
docker stop [容器名称/容器ID]
# 删除容器
docker rm [容器名称/容器ID]
# 删除网络
docker network rm netWan
docker network rm netLan
3.2 compose工具配置(推荐)
在合适的目录下创建docker-compose.yml文件,可选择以下两种模式来管理你的网络
3.2.1 macvlan模式
为每个物理网卡生成的macvlan网卡将其直接连接到宿主机的物理网络,间接管理物理网络
services:
openwrt:
# 【dockerproxy.cn】为加速服务,【zzsrv/openwrt:latest】为镜像地址
image: dockerproxy.cn/zzsrv/openwrt:latest
container_name: openwrt
restart: always
privileged: true
command: ["/sbin/init"]
networks:
netWan:
netLan:
networks:
netWan:
driver: macvlan
driver_opts:
parent: enp1s0 # 替换为你的宿主机网络接口
netLan:
driver: macvlan
driver_opts:
parent: enp2s0 # 替换为你的宿主机网络接口
3.2.2 host模式
最为简单直接的模式,openwrt容器可直接管理物理网卡
注:但是此模式下,其他容器大概也都只能用host模式了,其他容器若采用网桥模式,区域网内是无法访问到的甚至无法访问互联网等等问题,暂未找到行之有效的办法管理网络
services:
openwrt:
image: zzsrv/openwrt:latest
container_name: openwrt
restart: always
privileged: true
command: ["/sbin/init"]
network_mode: host
# 后台启动容器
docker compose up -d
3.3 openwrt网络配置
手动创建,进入容器
docker exec -it openwrt /bin/bash
compose工具创建容器,请在配置文件所在目录下进入容器
docker compose exec openwrt bash
重置root密码(同时也为openwrt管理密码)
passwd
配置网卡信息(openwrt)
vi /etc/config/network
网卡配置需要修改的部分如下
macvlant模式下,macvlan网卡ip(192.168.2.2)请勿和物理网卡ip(192.168.2.1)冲突,修改任意同网段ip地址即可
config interface 'lan'
option type 'bridge'
option ifname 'eth0'
option proto 'static'
option netmask '255.255.255.0'
option ip6assign '60'
option ipaddr '192.168.2.2'
option gateway '192.168.2.1'
option dns '192.168.2.1'
重启网络服务
# 重启网络服务(openwrt)
/etc/init.d/network restart
配置完后,个人PC电脑应当连接到物理机的Lan网口,使用浏览器访问openwrt的ip地址192.168.2.2,即可进入到openwrt的管理界面
4. openwrt系统配置
5.1 配置wan口
添加wan口
设置为由DHCP客户端,从上一级路由器中获取IP
5.2 配置lan口
设置Lan口子网
拉到最下面,取消《忽略此接口的选项》,即开启DHCP,这样Lan口下的设备才能获取到IP地址,点击保存&应用
5. openwrt无线配置
以下教程采用的host模式下生成的openwrt容器,因为openwrt容器可直接管理无线网卡
但macvlan模式下的openwrt容器下,无法直接管理无线网卡,未做尝试
5.1 安装无线网卡驱动
在openwrt的web页面找到软件包的页面,先更新列表
主要在于几个对应无线网卡对应的驱动包
- 带 iw 的一般是支持 Intel 公司的无线网络适配器
- 带 rt 的一般是Realtek 无线网络适配器的 Linux 内核模块
- 其他型号可自行探索
以下是一些无线网卡有关的软件包,仅做参考
#这是 Linux 内核模块,提供了对 IEEE 802.11(Wi-Fi)设备的支持。它是一个抽象层,使不同的 Wi-Fi 驱动可以使用它来提供一致的接口。 kmod-mac80211 #这是 Intel Wi-Fi 驱动的内核模块,专门用于支持基于 Intel 802.11 无线设备的功能。它通常与 kmod-mac80211 一起使用,以实现 Wi-Fi 硬件的支持和操作。 kmod-iwlwifi #该软件包包含运行 Wi-Fi 接入点和认证的程序(hostapd)所需的共享文件。它用于管理和配置无线接入点,支持 WPA/WPA2 等安全协议。 hostapd-common # 这是一个命令行工具,用于管理和配置 Linux 下的 Wi-Fi 网络接口。它提供了比传统的 iwconfig 更强大的功能和更现代的接口。 iw # 该工具用于提供关于无线网络状态的信息,例如信号强度、连接的 AP 及其特性等。它为用户和系统提供了对 Wi-Fi 状态的快速查看功能。 iwinfo # 这是一些命令行工具(如 iwconfig 和 iwlist),用于配置和管理无线网络接口。尽管功能相对老旧,它仍然在许多系统中被使用。 wireless-tools # 这是针对 Intel AX201 无线网卡的固件包。固件用于为该特定型号的无线设备提供驱动程序所需的底层代码,以便它能正常运作。 wlwifi-firmware-ax201 # 这是一个提供 Wi-Fi Protected Access (WPA) 的程序,支持 WPA/WPA2 认证和动态密钥管理。它可以作为接入点或客户端的组件。 wpad
这个实在不太清楚哪些是必须的哪些是不必须,只能根据自己摸索的经验给出大概需要的一些,也没找到什么公认的教程,我建议是能多装就多装吧
比如我的网卡显然是intel的AX201,就搜索对应关键字,以及正好带有自己无线网卡型号的,直接装上即可,除非提示有冲突,毕竟无线网卡的型号多种多样,驱动也不一定能在网上找得到,多装点大概都没问题,如果实在不行,那估计就是不想了
有些无线网卡一般需要自己自行下载或者导入无线网卡对应型号的驱动,方法如下
- 首先尝试获取自己无线网卡的型号,例如我的型号是ax201
- 在intel官网中查找对应型号的驱动信息英特尔®无线适配器的 Linux* 支持,发现要求linux内核5.2+,这时候要么升级内核,要么自己在官网下载对应的文件打驱动
#检查内核版本 uname -r
- 但是ubuntu24.04的内核显然是符合要求的,因为我发现在openwrt内,有关无线网卡驱动的文件夹/lib/firmware/是空的,于是我本机系统/lib/firmware/下的驱动文件打包给openwrt(或许还包含其他型号的驱动?)
tar -cvf wifi.tar /lib/firmware/* docker compose cp wifi.tar openwrt:/lib/firmware # 进入容器解压 docker compose exec openwrt bash tar -xvf /lib/firmware/wifi.tar
参考资料1:Openwrt 安装 AX210 无线网卡
参考资料2:X86小主机,安装无线网卡,OpenWrt官方固件,开启wifi功能
5.2 开启无线设置
openwrt装好后默认是没有无线选项的,需要添加并修改/etc/config/wireless配置文件
- 无线网卡的名称必须对应自己的无线网卡,例如我的无线网卡名称为wlo1,否则无法识别到网卡 Unknown Device
- 无线网卡的Mac地址必须对应自己的无线网卡Mac地址,例如【11:22:33:44:55:66】,否则会出现设备未激活、无线未关联的问题
参考以下配置信息,替换自己的网卡信息即可
config wifi-device 'wlo1'
option type 'mac80211'
option macaddr '11:22:33:44:55:66'
option country 'CN'
option cell_density '2'
option htmode 'HE40'
option band '2g'
option channel 'auto'
config wifi-iface 'wifinet0'
option device 'wlo1'
option mode 'ap'
option ssid 'OpenWrt'
option encryption 'psk-mixed'
option key '123123123'
option network 'lan'
- 重启网络,此时在菜单栏的网络下应当出现《无线》选项,并且无线网络已成功启动
/etc/init.d/network restart
参考资料1:Wi-Fi /etc/config/wireless
参考资料2: [OpenWrt] DB120刷OpenWrt后无法开启WiFi/无线的故障解决
6. 参考资料
[1] Ubuntu通过Docker部署OpenWRT
[2] 在docker中搭建openwrt软路由系统,实现多网口以及主路由功能
[3] 英特尔®无线适配器的 Linux* 支持
[4] Openwrt 安装 AX210 无线网卡
[5] X86小主机,安装无线网卡,OpenWrt官方固件,开启wifi功能
[6] [OpenWrt] DB120刷OpenWrt后无法开启WiFi/无线的故障解决
[7] Wi-Fi /etc/config/wireless