根据esir固件制作openwrt docker镜像
很多人喜欢用docker来运行openwrt,但市面上的openwrt docker镜像很少,有些人都把精力放在自己编译openwrt固件上去了,这样就造成需要使用docker openwrt镜像的人被逼得只能去搭建个虚拟机来进行安装openwrt。今天我就来教大家怎么把别人制作好的openwrt固件来做成docker openwrt镜像。
例如:系统:Centos Debian Ubuntu (命令都一样)
需要用的固件:esir精品小包 秋季K54版[2022] 固件包名字是openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img.gz
1、去esir google网盘下载固件包,在这个地址里选esir SPP精品小包,选最新的,目前最新的是04 Autumn[2022]。然后把下好的openwrt固件包丢到linux虚拟机里。
2、制作docker openwrt镜像包
XML/HTML代码
- [root@myvps ~]# mkdir openwrt
- [root@myvps ~]# cd openwrt
- [root@myvps openwrt]# cp ~/openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img.gz .
- [root@myvps openwrt]# gunzip openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img.gz
- [root@myvps openwrt]# fdisk openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img -l
XML/HTML代码
- Disk openwrt.img: 516.5 MiB, 541589504 bytes, 1057792 sectors
- Units: sectors of 1 * 512512 = 512 bytes
- Sector size (logical/physical): 512 bytes / 512 bytes
- I/O size (minimum/optimal): 512 bytes / 512 bytes
- Disklabel type: dos
- Disk identifier: 0x908adea6
- Device Boot Start End Sectors Size Id Type
- openwrt.img1 * 512 33279 32768 16M 83 Linux
- openwrt.img2 33792 1057791 1024000 500M 83 Linux
XML/HTML代码
- fdisk openwrt.img -l
XML/HTML代码
- [root@myvps]# echo $((33792*512))
- 17301504
- [root@myvps]# mkdir op
- [root@myvps]# mount -o loop,offset=17301504 openwrt.img ./op
- [root@myvps]# tar czf openwrt.tar.gz -C ./op .
- [root@myvps]# docker import openwrt.tar.gz rocdk890/openwrt-x86-64
XML/HTML代码
- [root@myvps]# docker push rocdk890/openwrt-x86-64
3、打开网卡混杂模式
XML/HTML代码
- ip link set eth0 promisc on
XML/HTML代码
- docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 macnet
5、启动docker openwrt
XML/HTML代码
- docker run --restart always --name openwrt -d --network macnet --privileged rocdk890/openwrt-x86-64 /sbin/init
也可以直接制定openwrt的IP
XML/HTML代码
- docker run --restart always --name openwrt -d --network macnet --ip 192.168.0.111 --privileged rocdk890/openwrt-x86-64 /sbin/init
如果未指定openwrt的ip需要进入容器命令设置ip
XML/HTML代码
- docker exec -it openwrt sh
XML/HTML代码
- vi /etc/config/network
- config interface 'lan'
- option ifname 'br-lan'
- option proto 'static'
- option ipaddr '192.168.0.111'
- option netmask '255.255.255.0'
- option delegate '0'
- option gateway '192.168.0.1'
- option broadcast '192.168.0.0'
- option dns '192.168.0.1'
- 保存后,重启网络 /etc/init.d/network restart
XML/HTML代码
- ifconfig br-lan 192.168.0.111
最后使用浏览器访问:http://192.168.0.111
默认账号:root
默认密码:password
7、登录 web 界面后,请进入 “网络” -> “接口” -> “LAN” -> “修改”,检查最下方 “基本设置” 中的 “忽略此接口” 要是勾选状态,如果不是,请修改保存。
8、如何使用 openwrt 作为旁路由?
到这一步应该就知道该怎么做了,这里也简单记录一下几种方案,根据所需情况进行选择:
方法①:可以修改主路由的 dhcp 配置,将其下发的网关与DNS改为 openwrt 的 ip 地址
方法②:关闭主路由的 dhcp,打开 openwrt 的 dhcp,由 openwrt 来分配网络中的 ip 地址和下发相关信息
方法③:直接修改设备上的网络信息,不从 dhcp 获取,直接手动填写
9、使用 openwrt 做旁路由后,在 openwrt 中检测网络通畅,但设备不能正常上网?
应该是 openwrt 防火墙的配置问题,因为 docker 的网络环境可能跟正常的硬件网络环境还有些许区别,目前在网上找到以下几个解决方案:
首先进入“网络”->“防火墙”
方法①:在“基本设置”中,“转发” 的选项从 “拒绝” 改为 “接受” 试试
方法②:“自定义规则”中,注释规则 “iptables -t nat -I POSTROUTING -j MASQUERADE” 试试
方法③:“自定义规则”中,添加规则 “iptables -I FORWARD -j ACCEPT”、“iptables -I INPUT -j ACCEPT” 试试
到这里就可以正常使用了。
PVE使用LXC搭建openwrt
1、制作LXC容器模板
其实方式跟制作docker openwrt镜像差不多的。同样上传openwrt.img到root目录下,运行以下命令。
XML/HTML代码
- Total_size=$((`fdisk -l openwrt.img|grep .img2|awk '{print $2}'` * 512))
- mkdir op
- mount -o loop,offset=$Total_size openwrt.img ./op
- tar czf openwrt-rootfs.tar.gz -C ./op .
然后把制作好的模板上传或复制到PVE的CT模板目录/var/lib/vz/template/cache
XML/HTML代码
- scp ./openwrt-rootfs.tar.gz root@192.168.1.254:/var/lib/vz/template/cache/
2、新建LXC容器
通过SSH或者是网页端打开PVE终端,执行以下命令创建新容器
XML/HTML代码
- pct create 102 local:vztmpl/openwrt-rootfs.tar.gz --rootfs local-lvm:5 --ostype unmanaged --hostname CTOpenWrt --arch amd64 --cores 2 --memory 2048 --swap 0 -net0 bridge=vmbr0,name=eth0
pct create:容器创建命令
102:容器ID,可根据自己情况设定
local:vztmpl/openwrt-rootfs.tar.gz: 为第三步骤所得到的固件包名称
--rootfs:模版为rootfs文件
local-lvm:5 :后面的数字代表分配的磁盘大小,比如我这里设置的为5,即为即将创建的容器分配2G的大小
--ostype unmanaged:操作系统类型,这里没有填写指定的操作系统(不会影响)
--hostname CTOpenWrt:主机名,也就是虚拟机名称
--arch amd64:设置为64位
--cores 2:分配给容器的核心数(我不知道这里是不是和docker一样,为最大限制)
--memory 2048:分配给容器最大的内存数量
--swap 0:交换分区设置为0
-net0 bridge=vmbr0,name=eth0:网卡,这里一定要设置,不然你的op没有办法连接到pve的虚拟交换机。
因为我是用来做旁路由的,所以就不需要再设置个网口来拨号。
3、最后启动LXC容器
进入web控制台启动CT OpenWrt。