在Docker中运行OpenWRT的通用办法
寻找 rootfs 格式的镜像
可以在 KWRT 下载。
镜像的建立与使用
打开网卡混杂模式
1
ip link set <网卡名> promisc on
<网卡名>可从ifconfig查询,如eth0、end0等。- 混杂模式的意义:让网卡接收所有经过的数据帧,而不仅仅是发给自己 MAC 地址的帧。。
创建
macvlan类型的网络1
2
3docker network create -d macvlan \
--subnet=<子网范围> --gateway=<网关> \
-o parent=<网卡名> macnet<子网范围>填写内网范围,格式:10.0.0.0/24。<网关>填写内网网关,格式:10.0.0.1。<网卡名>可从ifconfig查询,如eth0、end0等。
也可以考虑添加 IPv6 支持:
1
2
3
4
5docker network create -d macvlan \
--subnet=<子网范围> --gateway=<网关> \
--ipv6 \
--subnet=fd00::/64 \
-o parent=<网卡名> macnet下载
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。