根据esir固件制作openwrt docker镜像
相信还是有很多小伙伴喜欢用docker来运行openwrt,但市面上的openwrt docker镜像很少,有些小伙伴都把精力放在自己编译openwrt固件上去了,这样就造成需要使用docker openwrt镜像的小伙伴被逼得只能去搭建个虚拟机来进行安装openwrt.今天我就来教大家怎么把别人制作好的openwrt固件来做成docker openwrt镜像.
系统:centos 7.x(64位)
需要用的固件:esir精品小包 秋季K54版[2022] 固件包名字是openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img.gz
1.去esir google网盘下载固件包
https://drive.google.com/drive/folders/1uRXg_krKHPrQneI3F2GNcSVRoCgkqESr
在这个地址里选esir SPP精品小包,选最新的,目前最新的是04 Autumn[2022]
然后把下好的openwrt固件包丢到linux虚拟机里.
2.制作docker openwrt镜像包
[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
Disk openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img: 541 MB, 541589504 bytes, 1057792 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x4727f5fb
Device Boot Start End Blocks Id System
openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img1 * 512 33279 16384 83 Linux
openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img2 33792 1057791 512000 83 Linux
我们只需要把512 * 33792,把得到数值记录下来就好.
[root@myvps openwrt]# echo $((33792*512))
17301504
[root@myvps openwrt]# mkdir op
[root@myvps openwrt]# mount -o loop,offset=17301504 openwrt-spp-k54-autumn[2022]-x86-64-generic-squashfs-legacy.img ./op
[root@myvps openwrt]# tar czf openwrt.tar.gz -C ./op .
[root@myvps openwrt]# docker import openwrt.tar.gz rocdk890/openwrt-x86-64
最后把打包好的docker 镜像上传到docker hub
[root@myvps openwrt]# docker push rocdk890/openwrt-x86-64
好了,接下来你就可以把docker openwrt镜像运行起来了.
3.打开网卡混杂模式
[root@myvps openwrt]# ip link set ens32 promisc on
4.创建网络
[root@myvps openwrt]# docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=ens32 macnet
请根据你自己的网卡名字和网段进行修改subnet gateway paarent这3个参数.
5.启迪docker openwrt
[root@myvps openwrt]# docker run --restart always --name openwrt -d --network macnet --privileged rocdk890/openwrt-x86-64 /sbin/init
6.进入容器并修改相关参数
[root@myvps openwrt]# docker exec -it openwrt sh
vi /etc/config/network
config interface 'lan'
option ifname 'eth0'
option proto 'static'
option ipaddr '192.168.1.2'
option netmask '255.255.255.0'
option delegate '0'
option gateway '192.168.1.1'
option broadcast '192.168.1.0'
option dns '192.168.1.1'
保存后,重启网络 /etc/init.d/network restart
最后使用浏览器访问http://192.168.1.2
默认账号: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
好了,就到这吧.
ps:
本文参考:
https://www.cnblogs.com/xwgli/p/16249437.html
https://www.expoli.tech/articles/2020/09/03/1599098023589
评论: