openwrt的一些瞎折腾(docker旁路由)
mkdir ~/imm && cd ~/imm
无论你用什么方法下载:
https://downloads.immortalwrt.org/releases/24.10.4/targets/x86/64/immortalwrt-24.10.4-x86-64-rootfs.tar.gz
gzip -d immortalwrt-24.10.4-x86-64-rootfs.tar.gz
得到:immortalwrt-24.10.4-x86-64-rootfs.tar
可以生成一个Dockerfile:
cat <<EOF >"Dockerfile" FROM scratch ADD immortalwrt-24.10.4-x86-64-rootfs.tar / EOF
然后生成镜像到当前目录:
docker build -t immortalwrt.24.10.4-image ./
也可直接导入镜像,更方便:
docker import immortalwrt-24.10.4-x86-64-rootfs.tar immortalwrt.24.10.4-image
查看docker镜像:
docker image ls
或者
docker images
顺便提一下如何删除镜像:
docker image rmi xxxx
查看本机网卡接口:
ip addrress 或者 ifconfig 或者 ip link show
得知本机需要使用的接口是enp3so
在ens32上创建一个名叫macvlan_op的网卡接口
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 --dns=223.5.5.5 --dns=8.8.8.8 -o parent=ens34 macvlan_op
查看网卡接口:
docker network ls
删除网卡用:
docker network rm xxxx
macvlan 的一个特性是宿主机无法直接与容器通信。如果你的需求是让宿主机与 OpenWrt 容器通信,
你需要在宿主机上创建一个虚拟接口(通常称为 macvlan 子接口),并将其加入同一 macvlan 网络:
ip link add macvlan-shim link enp3s0 type macvlan mode bridge ip addr add 10.170.14.175/23 dev macvlan-shim ip link set macvlan-shim up
宿主机重启,以上内容消失!然后我也没搞成功。
添加路由(如果需要) 如果宿主机需要通过 macvlan 网络访问容器,可以添加路由,感觉也没成功:
ip route add 10.170.14.0/24 dev macvlan-shim
运行docker命令:
docker run --name immortalwrt -d --network macvlan_op --restart unless-stopped --privileged immortalwrt.24.10.4-image:latest /sbin/init
进入到容器内部:
docker exec -it 2cf9d0687e73 sh
然后就是老一套了,先修改,然后重启:
vi /etc/config/network
/etc/init.d/network restart
看博主说也可以这么弄,适合小白:
cat <<EOF > /etc/config/network 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 'fd98:9655:39f9::/48' option packet_steering '1' config interface 'lan' option proto 'static' option netmask '255.255.254.0' option ipbassign '60' option ipaddr '10.170.14.174' option gateway '10.170.14.1' option device 'eth0' list dns '223.5.5.5' list dns '223.6.6.6' list dns '8.8.8.8' list dns '8.8.4.4' EOF
想搞docker compose来搞,需要提前docker命令行安装一遍,配置好了以后再拷贝出来所有文件:
docker cp 325ba55487b1:/ ~/docker_data/imm/data_backup
docker-compose.yaml:
services: immortalwrt.24.10.4-image: container_name: immortalwrt networks: - macvlan_op restart: unless-stopped volumes: - ./data_backup/bin:/bin # - ./data_backup/dev:/dev - ./data_backup/etc:/etc - ./data_backup/lib:/lib - ./data_backup/lib64:/lib64 - ./data_backup/mnt:/mnt - ./data_backup/overlay:/overlay # - ./data_backup/proc:/proc - ./data_backup/rom:/rom - ./data_backup/root:/root - ./data_backup/run:/run - ./data_backup/sbin:/sbin - ./data_backup/sys:/sys - ./data_backup/tmp:/tmp - ./data_backup/usr:/usr - ./data_backup/var:/var - ./data_backup/www:/www privileged: true image: immortalwrt.24.10.4-image:latest command: /sbin/init networks: macvlan_op: external: true name: macvlan_op
然后:
docker compose up -d
我第一次运行那个docker命令后,把容器里的更目录下的内容拷贝了出来,然后在尝试docker compose的,可以持久部分内容,
后面再尝试吧。
2026.01.20:
docker compose 的方法始终不是特别好。
以上内容参考:
https://rupu.net/archives/docker-openwrt
https://wkdaily.cpolar.top/15
感觉两位大师讲的挺好的,随便玩玩。
2026.01.20 更新:
先通过上述的rootfs上传后,import后变成image
然后docker run后对容器进行内部修改
docker commit
docker tag
docker login
docker push
后这样就有了自己的一个镜像了,并且是打包上传到dockerhub上的,方便后期测试用。具体上传办法请参考https://web.justezlife.xyz/?id=495
前期的工作主要是搭建一个方便的测试平台,最后还是选用了原版openwrt的24.10.5版本。经过多种测试,发现原版的配置简陋,但好在占用资源确实比较低,外面的各种高大全版本感觉不是很靠谱,总想着在原版上装个ssrp就比较完美了。于是就有了下文:
先去docker pull xxx 就是刚才自己上传的镜像,这下方便了。
然后:
opkg update
opkg remove dnsmasq
opkg install dnsmasq-full --force-overwrite # 经过几次测试ssrp会跟dnsmasq有冲突,需要full版本。
sh ssrp.run # run文件到这里下载:https://github.com/AUK9527/Are-u-ok/tree/main?tab=readme-ov-file
运行后可能提示ssrp安装成功,去web端打开会提示一大串错误。
opkg install --force-reinstall luci-base luci-compat luci-lib-base luci-lib-ipkg
然后:
opkg install luci-cbi
重启一下web:
/etc/init.d/uhttpd restart
就这你就会发现熟悉的ssrp回来了。主要功能测试了一下,没有全部测试。
2026.01.22更新:
我在dockerhub上传了瞎弄的原版+ssrp的组合。通过这个方式就能pull到本地了。x86 64的。
docker push younghuie/openwrt-24.10.5-x86.image-yh:ssrp3
需要先建macvlan,然后docker run
然后docker exec
改密码passwd
改网络nano /etc/config/network
重启网络 /etc/init.d/network restart
docker ps -a 看看 应该可以web登录了。
也可以opkg list-installed 查看软件安装,我没装几个,就几个常用的。