前言
近期我需要搭建一个旁路由以满足我日常使用的需求,但是我并不想单独购买硬件,也不想使用ESXi或者Proxmox等类型的Hypervisor安装在本地的服务器上,于是便有了使用Docker来运行一个OpenWrt实例的想法,以下我将用简洁易懂的语言记录我的过程,以便大家参考
步骤一:配置网卡混杂模式
确认网卡名称
在宿主机终端执行ip link,找到物理网卡名称(如eno1、eth0)。开启混杂模式
sudo ip link
sudo ip link set <网卡名称> promisc on示例:
sudo ip link set eno1 promisc on验证模式
再次执行ip link,确认网卡信息中包含PROMISC标志。
步骤二:创建Docker Macvlan网络
假设主路由网关为 192.168.124.1,子网为 192.168.124.0/24,执行以下命令创建网络:
docker network create -d macvlan \
--subnet=192.168.124.0/24 \
--gateway=192.168.124.1 \
-o parent=<网卡名称> \
openwrt_net
示例:-o parent=eno1
步骤三:获取与处理OpenWrt镜像
1. 镜像获取途径
编译自定义镜像(仅限赞助用户)
访问 openwrt.ai,配置以下内容构建专属镜像:
✅ 旁路由IP地址(如192.168.124.50)
✅ 网关指向主路由IP(如192.168.124.1)
✅ 预装常用插件(如广告过滤、网络加速等)
✅ 旁路由模式
✅ ROOTFS.TAR.GZ (用于Docker或LXC等容器)下载预编译镜像
在openwrt.ai页面底部找到含rootfs关键字的.tar.gz压缩包(如kwrt-02.05.2025-x86-64-generic-rootfs.tar.gz),直接下载使用。
2. 镜像导入
镜像导入命令
docker import <当前目录下的镜像文件名称> <你希望命名的镜像名称>示例:
docker import kwrt-02.05.2025-x86-64-generic-rootfs.tar.gz modwrt
3. 两类镜像的配置差异
| 镜像类型 | 网络预配置 | 软件包预装 | 开箱即用性 |
|---|---|---|---|
| 自定义编译镜像 | ✅ 完整配置 | ✅ 按需集成 | 无需二次配置 |
| 预编译镜像 | ❌ 需手动配置 | ❌ 基础功能 | 需登录后调整 |
步骤四:创建Docker容器
如果你与上文配置的一致,可以通过以下指令轻松的创建docker容器
docker run -d \
--restart always \
--name openwrt \
--network openwrt_net \
--privileged=true \
modwrt \
/sbin/init
步骤五:配置OpenWrt网络(补充)
如果你通过自定义构建固件提前设置了网络配置便可以跳过这一步
进入容器终端
dockerdocker exec -it openwrt bash修改网络配置
然后使用你所熟悉的文本编辑器(例如vim)编辑网络配置文件vim /etc/config/network以下是我的配置文件示例,只需要修改
ipaddr为你期望的OpenWrt实例IP,gateway为主路由(即网关)的IP,netmask为子网掩码,dns为DNS服务器IP即可config interface 'loopback' option device 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fd0d:c0bc:30d7::/48' option packet_steering '1' config device option name 'br-lan' option type 'bridge' list ports 'eth0' option promisc '1' config interface 'lan' option device 'br-lan' option proto 'static' option ipaddr '192.168.124.50' option netmask '255.255.255.0' option ip6assign '60' option gateway '192.168.124.1' option dns '192.168.124.1'重启网络服务
/etc/init.d/network restart
步骤六:验证与使用
浏览器访问 http://192.168.124.50,使用设置的用户名密码登录,预构建镜像密码为root。
常见问题
IP冲突或无法访问
- 检查旁路由IP是否与局域网其他设备冲突。
- 确认宿主机防火墙未阻断流量。
DHCP冲突
务必关闭OpenWrt的DHCP服务,避免与主路由冲突。容器启动报错
- 现象:
docker: Error response from daemon: No command specified.
解决方案:确保启动命令包含/sbin/init - 现象:
Failed to create macvlan port
解决方案:检查宿主机网卡混杂模式是否开启
- 现象:
结语
通过Docker容器运行OpenWrt旁路由,既节省硬件资源,又保持灵活性。若需扩展功能,可在OpenWrt中安装插件(如广告过滤、科学上网),但需注意容器资源分配。