ubuntu使用docker安装openwrt

系统:ubuntu24.04
架构:x86

1. 安装docker

1.1 离线安装

docker下载地址

根据系统版本,依次下载最新的几个关于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的一个分支,移植了更多的软件包,支持了更多的设备,更好的性能,并为中国大陆用户进行了特殊的优化。

# 拉取镜像
docker pull 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:
    image: 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容器可直接接管物理网卡

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/sh

# compose工具创建容器,请在配置文件所在目录下进入容器
# docker compose exec openwrt bash

# 重置root密码(同时也为openwrt管理密码)
passwd

# 配置网卡信息(openwrt)
vi /etc/config/network

网卡配置需要修改的部分如下

非host模式下,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无线配置

关于无线的配置比较坎坷

  • 无法识别无线网卡
  • 无线网卡设备内核报错
  • 无线设备设备未激活
  • 无线网卡设备未关联

以下步骤仅做参考,每一步不一定是必须的

  1. 未开启无线配置,openwrt装好后默认是没有无线选项的,需要添加并修改/etc/config/wireless配置文件
    参考资料1:Wi-Fi /etc/config/wireless
    参考资料2:【Linux】OpenWRT的无线设置注意事项——从2.4G到5G,hwmode不简单
  1. 无线驱动问题,一般需要自己自行下载或者导入无线网卡对应型号的驱动
  • 首先尝试获取自己无线网卡的型号,例如我的型号是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的web页面找到软件包的页面,先更新列表

在这里插入图片描述
主要在于几个对应无线网卡对应的驱动包

  • 带 iw 的一般是支持 Intel 公司的无线网络适配器
  • 带 rt 的一般是Realtek 无线网络适配器的 Linux 内核模块
  • 其他自行探索

比如我的网卡显然是intel的,就搜索对应关键字,以及正好带有自己无线网卡型号的,直接装上即可,除非提示有冲突,多装点大概都没问题

#这是 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

参考资料:Openwrt 安装 AX210 无线网卡

本人最后是通过装了多个软件包重启后wifi才生效,总结一下,折腾了好久感觉大概率是软件包没装全,相关无线网络配置的软件包,以及自己对应网卡相关的软件包尽量都装上
最后成功的界面如下
在这里插入图片描述

6. 参考资料

[1] Ubuntu通过Docker部署OpenWRT
[2] 在docker中搭建openwrt软路由系统,实现多网口以及主路由功能
[3] 【Linux】OpenWRT的无线设置注意事项——从2.4G到5G,hwmode不简单
[4] 英特尔®无线适配器的 Linux* 支持
[5] Openwrt 安装 AX210 无线网卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小-黯

免费的,尽力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值