openwrt的一些瞎折腾(docker旁路由)

younghuie2周前 (01-12)openwrt相关31
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 查看软件安装,我没装几个,就几个常用的。

分享给朋友: