为了在Docker中运行OpenWrt系统,我们需要用到OpenWrt的docker镜像,网上有很多人分享已经制作好的镜像。但是,每个人都有自己不同的需求,自己学会制作镜像就显得特别重要了。
其实使用OpenWrt的固件, 可以很方便的构建Docker镜像,这里的固件不光是官方固件,也可以是经过自己定制编译生成的固件。
如果你只想下载并使用,不关心构建流程,那么你可以直接用下面的命令,并参考后面镜像使用配置部分了解如何使用镜像
# 下载镜像
$ docker pull crazygit/openwrt-x86-64
# 查看镜像信息
$ docker run --rm crazygit/openwrt-x86-64 cat /etc/banner
_______ ________ __
| |.-----.-----.-----.| | | |.----.| |_
| - || _ | -__| || | | || _|| _|
|_______|| __|_____|__|__||________||__| |____|
|__| W I R E L E S S F R E E D O M
-----------------------------------------------------
OpenWrt 19.07.2, r10947-65030d81f3
-----------------------------------------------------
如果觉得官网镜像功能太简单,也可以用我编译的Lean'S大神的OpenWrt固件
https://github.com/crazygit/Actions-OpenWrt
镜像的使用可以参考下面两篇文章的方式进行配置,两位都做了非常详细的描述。
同样,如果觉得手动配置比较麻烦,可以使用我整理好使用docker-compose
的一键拉起服务文件
https://github.com/crazygit/family-media-center
这里主要描述下本人的手动配置方式
首先说说我的使用场景:
我是在宿主机上通过Docker
运行OpenWrt
系统,使用它作为旁路由
- 宿主机操作系统:
Ubuntu 20.04 LTS
- 宿主机IP:
192.168.1.118
- 硬路由IP:
192.168.1.1
- 分配给OpenWrt系统的IP:
192.168.1.10
-
获取网卡名称, 我的网卡名称是
eno1
-
开启宿主机网卡混杂模式(可选)
# 网卡名称enp3s0用你自己上一步获取到的 $ sudo ip link set eno1 promisc on
-
为
docker
创建macvlan
模式的虚拟网络子网
--subnet
和网关--gateway
,以及parent=eno1
网卡名称根据实际情况做调整$ docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eno1 openwrt-net # 查看创建的虚拟网络 $ docker network ls |grep openwrt-net 21dcddacc389 openwrt-net macvlan local
-
启动容器
# --network使用第4步创建的虚拟网络 $ docker run --restart always --name openwrt -d --network openwrt-net --privileged crazygit/openwrt-x86-64 # 查看启动的容器 $ docker ps -a
-
进入容器,修改网络配置文件并重启网络
进入容器并修改
etc/config/network
文件$ docker exec -it openwrt /bin/sh $ vi /etc/config/network
编辑
lan
口的配置如下,有些参数默认的文件里可能没有,按照下面的格式添加上即可config interface 'lan' option type 'bridge' option ifname 'eth0' option proto 'static' option ipaddr '192.168.1.10' option netmask '255.255.255.0' option gateway '192.168.1.1' option dns '192.168.1.1' option broadcast '192.168.1.255' option ip6assign '60'
上面的参数根据自身的情况调整
proto
设置使用静态分配IP地址的方式static
ipaddr
为OpenWrt系统分配的静态IP,这里我分配的是192.168.2.126
(注意: 这个IP地址不要与你本地网络已有的IP地址冲突)netmask
为子网掩码255.255.255.0
gateway
为路由器(硬路由)的网关,通常就是你访问路由器的IP地址,这里我是192.168.2.1
dns
为DNS
服务器的地址,可以是运营商的地址,比如114.114.114.114
,这里我直接用的路由器的地址192.168.2.1
broadcast
为广播地址192.168.2.255
重启网络
$ /etc/init.d/network restart
-
宿主机网络修复(目前不生效)
-
验收成果
如第7步所介绍的,我们暂时没有办法直接从宿主机访问OpenWrt,只有借助局域网其他设备上的浏览器,打开OpenWrt系统
我使用的是官方固件,初始密码默认为空,其他固件的初始密码视具体的固件而定了