在Docker中运行OpenWRT的通用办法
寻找 rootfs
格式的镜像
可以在 KWRT 下载。
镜像的建立与使用
打开网卡混杂模式
1
ip link set <网卡名> promisc on
<网卡名>
可从ifconfig
查询,如eth0
、end0
等。- 混杂模式的意义:让网卡接收所有经过的数据帧,而不仅仅是发给自己 MAC 地址的帧。。
创建
macvlan
类型的网络1
docker network create -d macvlan --subnet=<子网范围> --gateway=<网关> -o parent=<网卡名> macnet
<子网范围>
填写内网范围,格式:10.0.0.0/24
。<网关>
填写内网网关,格式:10.0.0.1
。<网卡名>
可从ifconfig
查询,如eth0
、end0
等。
下载
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
加载镜像,创建并启动容器
1
2docker import <rootfs.tar.gz 镜像所在地址> kiddin9_openwrt
docker run -d --name=openwrt --restart always --privileged --network macnet kiddin9_openwrt /sbin/init进入容器,修改配置
1
docker exec -it openwrt sh
主要修改
/etc/config/network
中br-lan
与IP地址相关的部分。通过浏览器访问 LuCI,进入
系统
->设置向导
,打开旁路由模式
,关闭DHCP 服务器
。默认用户名和密码都是
root
。
宿主机与容器之间的网络互访
此前提供的方法不够完美,对宿主机网络存在干扰。目前我将 OpenWRT 容器迁移到了另一个闲置的 Orange Pi Zero 3 上,其完全负责 OpenWRT 容器的工作。
实际上解决该问题的思路是有的,一个是强制让访问容器 IP 的流量通过网关,另一个是宿主机也设置一个 macvlan 端口与容器通信,二者均能解决互访问题。
但这两个方案都存在对宿主机网络配置影响太多的问题,从个人角度出发如此配置得不偿失,从架构稳定性上出发 OpenWRT 也不适合作为容器和其他服务 All in one。