在Docker中运行OpenWRT的通用办法

寻找 rootfs 格式的镜像

可以在 KWRT 下载。

镜像的建立与使用

  1. 打开网卡混杂模式

    1
    ip link set <网卡名> promisc on
    • <网卡名> 可从 ifconfig 查询,如 eth0end0 等。
    • 混杂模式的意义:让网卡接收所有经过的数据帧,而不仅仅是发给自己 MAC 地址的帧。。
  2. 创建 macvlan 类型的网络

    1
    docker network create -d macvlan --subnet=<子网范围> --gateway=<网关> -o parent=<网卡名> macnet
    • <子网范围> 填写内网范围,格式:10.0.0.0/24
    • <网关> 填写内网网关,格式:10.0.0.1
    • <网卡名> 可从 ifconfig 查询,如 eth0end0 等。
  3. 下载 rootfs 格式镜像

    x86/64 架构为例,下载链接要是你设备架构与型号对应的镜像:

    1
    wget https://dl.openwrt.ai/releases/24.10/targets/x86/64/kwrt-09.22.2025-x86-64-generic-rootfs.tar.gz
  4. 加载镜像,创建并启动容器

    1
    2
    docker import <rootfs.tar.gz 镜像所在地址> kiddin9_openwrt
    docker run -d --name=openwrt --restart always --privileged --network macnet kiddin9_openwrt /sbin/init
  5. 进入容器,修改配置

    1
    docker exec -it openwrt sh

    主要修改/etc/config/networkbr-lan与IP地址相关的部分。

  6. 通过浏览器访问 LuCI,进入 系统 -> 设置向导,打开 旁路由模式,关闭 DHCP 服务器

    默认用户名和密码都是 root

宿主机与容器之间的网络互访

此前提供的方法不够完美,对宿主机网络存在干扰。目前我将 OpenWRT 容器迁移到了另一个闲置的 Orange Pi Zero 3 上,其完全负责 OpenWRT 容器的工作。

实际上解决该问题的思路是有的,一个是强制让访问容器 IP 的流量通过网关,另一个是宿主机也设置一个 macvlan 端口与容器通信,二者均能解决互访问题。

但这两个方案都存在对宿主机网络配置影响太多的问题,从个人角度出发如此配置得不偿失,从架构稳定性上出发 OpenWRT 也不适合作为容器和其他服务 All in one。