编辑
2026-03-15
技术漫谈
00
请注意,本文编写于 46 天前,最后修改于 45 天前,其中某些信息可能已经过时。

目录

环境准备与网络规划
部署流程
1. 开启物理网卡混杂模式
2. 创建 Docker MacVLAN 网络
3. 拉取并运行 OpenWrt 容器
4. 配置固定 IP
5. 访问后台
进阶技巧:容器备份与一键复原

Gemini_Generated_Image_tu99o2tu99o2tu99.png

在 ARM 开发板(例如 Orange Pi 3B)上搭建 HomeLab 时,通常会同时运行多个服务容器,为了给局域网提供额外的网络接管、去广告等功能,同时又不破坏开发板原有的 Ubuntu 系统生态,使用 Docker 部署 OpenWrt 旁路由是兼顾性能与灵活性的最佳方案。

本文将详细记录利用 Docker 的 MacVLAN 网络,在 ARM64 架构下部署 OpenWrt 的全过程,以及配置出错后的“一秒重置”技巧。

环境准备与网络规划

部署前,需先确认当前局域网的基础网络信息。以下配置以常见的家庭网络环境为例:

  • 物理网卡名称eth0
  • 局域网网段192.168.124.0/24
  • 主路由(网关)IP192.168.124.1
  • OpenWrt 规划 IP192.168.124.100(需确保未被占用)

部署流程

1. 开启物理网卡混杂模式

要让 Docker 容器拥有与宿主机同网段的独立 IP,必须借助 MacVLAN 网络。前提是物理网卡必须开启混杂模式(Promiscuous Mode),以允许网卡接收目标 MAC 地址非本机的流量。

执行以下命令开启:

bash
sudo ip link set eth0 promisc on

2. 创建 Docker MacVLAN 网络

创建一个名为 macnet 的网络,将网段与网关与主路由对齐。

bash
docker network create -d macvlan \ --subnet=192.168.124.0/24 \ --gateway=192.168.124.1 \ -o parent=eth0 macnet

避坑指南:如果执行时提示 invalid pool request: Pool overlaps with other one on this address space,说明当前 Docker 中存在冲突的网段配置。执行 docker network prune 清除未使用过的网络即可解决。

3. 拉取并运行 OpenWrt 容器

针对 ARM64 (aarch64) 架构,推荐使用国内维护的 sulinggg/openwrt:armv8 镜像,内置了丰富的常用网络与系统插件。

bash
docker run --restart always --name openwrt -d \ --network macnet \ --privileged \ sulinggg/openwrt:armv8 /sbin/init

4. 配置固定 IP

容器启动后,默认的网络配置通常无法直接与现有局域网互通,需要进入容器修改静态 IP。

进入容器终端:

bash
docker exec -it openwrt bash

编辑网络配置文件:

bash
vi /etc/config/network

找到 config interface 'lan' 块,按 i 键进入编辑模式,修改对应的网段信息:

text
config interface 'lan' option type 'bridge' option ifname 'eth0' option proto 'static' option ipaddr '192.168.124.100' # 规划的旁路由 IP option netmask '255.255.255.0' option gateway '192.168.124.1' # 主路由 IP option dns '192.168.124.1'

修改完成后,按 Esc 键,输入 :wq 保存并退出。

重启容器内的网络服务使配置生效:

bash
/etc/init.d/network restart

5. 访问后台

配置生效后,在浏览器中访问 http://192.168.124.100 即可进入 ImmortalWrt 登录界面(默认账号为 root,密码为 password 或留空)。


进阶技巧:容器备份与一键复原

在折腾 OpenWrt 插件时,极易因设置不当导致网络崩溃。Docker 部署的最大优势在于“试错成本极低”。在完成上述基础网络配置并成功登录后台后,建议立刻将当前状态“存档”。

在宿主机终端执行打包命令:

bash
docker commit openwrt my-openwrt:v1

此后,如果 OpenWrt 被玩坏,只需强行删除容器:

bash
docker rm -f openwrt

然后使用刚刚保存的镜像重新运行即可“满血复活”,省去了重新进入终端修改网络配置的步骤:

bash
docker run --restart always --name openwrt -d \ --network macnet \ --privileged \ my-openwrt:v1 /sbin/init

本文作者:小转圈

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!