记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

根据esir固件制作openwrt docker镜像

根据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代码
  1. [root@myvps ~]# mkdir openwrt
  2. [root@myvps ~]# cd openwrt
  3. [root@myvps openwrt]# cp ~/openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img.gz .
  4. [root@myvps openwrt]# gunzip openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img.gz
  5. [root@myvps openwrt]# fdisk openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img -l
以上其实就是给openwrt固件包解压然后查看img信息,是不是建立一个openwrt目录,其实无所额。看到如下提示:
XML/HTML代码
  1. Disk openwrt.img: 516.5 MiB, 541589504 bytes, 1057792 sectors
  2. Units: sectors of 1 * 512512 = 512 bytes
  3. Sector size (logical/physical): 512 bytes / 512 bytes
  4. I/O size (minimum/optimal): 512 bytes / 512 bytes
  5. Disklabel type: dos
  6. Disk identifier: 0x908adea6
  7.  
  8. Device       Boot Start     End Sectors  Size Id Type
  9. openwrt.img1 *      512   33279   32768   16M 83 Linux
  10. openwrt.img2      33792 1057791 1024000  500M 83 Linux
为了显示清晰,我将固件名称修改为openwrt.img,然后查看信息。其实可以本地解压后改名openwrt.img上传到root目录。
XML/HTML代码
  1. fdisk openwrt.img -l
记下Boot  Start下面的两个数据,然后计算 512 * 33792 ,把得到数值记录下来就好。
XML/HTML代码
  1. [root@myvps]# echo $((33792*512))
  2. 17301504
  3. [root@myvps]# mkdir op
  4. [root@myvps]# mount -o loop,offset=17301504 openwrt.img ./op
  5. [root@myvps]# tar czf openwrt.tar.gz -C ./op .
  6. [root@myvps]# docker import openwrt.tar.gz  rocdk890/openwrt-x86-64
最后把打包好的docker 镜像上传到docker hub 。
XML/HTML代码
  1. [root@myvps]# docker push rocdk890/openwrt-x86-64
接下来你就可以把docker openwrt镜像运行起来了。
3、打开网卡混杂模式
XML/HTML代码
  1. ip link set eth0 promisc on
4、创建网络
XML/HTML代码
  1. docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=eth0 macnet
请根据你自己的网卡名字和网段进行修改subnet gateway paarent这3个参数。
5、启动docker openwrt
XML/HTML代码
  1. docker run --restart always --name openwrt -d --network macnet --privileged rocdk890/openwrt-x86-64 /sbin/init
也可以直接制定openwrt的IP
XML/HTML代码
  1. docker run --restart always --name openwrt -d --network macnet --ip 192.168.0.111 --privileged rocdk890/openwrt-x86-64 /sbin/init
6、进入容器并修改相关参数
如果未指定openwrt的ip需要进入容器命令设置ip
XML/HTML代码
  1. docker exec -it openwrt sh
XML/HTML代码
  1. vi /etc/config/network
  2. config interface 'lan'
  3.     option ifname 'br-lan'
  4.     option proto 'static'
  5.     option ipaddr '192.168.0.111'
  6.     option netmask '255.255.255.0'
  7.     option delegate '0'
  8.     option gateway '192.168.0.1'
  9.     option broadcast '192.168.0.0'
  10.     option dns '192.168.0.1'
  11. 保存后,重启网络 /etc/init.d/network restart
其实任何openwrt可以直接使用ifconfig命令设置一个临时ip(重启失效),就可以直接web登录修改,省去命令的烦恼。
XML/HTML代码
  1. 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 的网络环境可能跟正常的硬件网络环境还有些许区别,目前在网上找到以下几个解决方案:
首先进入“网络”->“防火墙”
方法①:在“基本设置”中,“转发” 的选项从 “拒绝” 改为 “接受” 试试
来自:https://github.com/SuLingGG/blog-comments/issues/2#issuecomment-903896998
方法②:“自定义规则”中,注释规则 “iptables -t nat -I POSTROUTING -j MASQUERADE” 试试
来自:https://github.com/SuLingGG/OpenWrt-Docker/issues/13
方法③:“自定义规则”中,添加规则 “iptables -I FORWARD -j ACCEPT”、“iptables -I INPUT -j ACCEPT” 试试
来自:https://www.bilibili.com/video/BV1d3411J7bp
到这里就可以正常使用了。 
 
PVE使用LXC搭建openwrt
1、制作LXC容器模板
其实方式跟制作docker openwrt镜像差不多的。同样上传openwrt.img到root目录下,运行以下命令。
XML/HTML代码
  1. Total_size=$((`fdisk -l openwrt.img|grep .img2|awk '{print $2}'` * 512))
  2. mkdir op
  3. mount -o loop,offset=$Total_size openwrt.img ./op
  4. tar czf openwrt-rootfs.tar.gz -C ./op .
然后把制作好的模板上传或复制到PVE的CT模板目录/var/lib/vz/template/cache
XML/HTML代码
  1. scp ./openwrt-rootfs.tar.gz root@192.168.1.254:/var/lib/vz/template/cache/
2、新建LXC容器
通过SSH或者是网页端打开PVE终端,执行以下命令创建新容器
XML/HTML代码
  1. 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。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):