群辉利用Docker给自己定制旁路由——安装immortalWrt
from:tyxu
(出处: 恩山无线论坛)
本文极度适合群晖用户,适合各种已经完成docker搭建的用户。当然,如果您有设备可以运行虚拟机,或者直接安装Openwrt,本文大部分步骤可以借鉴。
根据我自己的使用情况,计划包含以下几个部分:安装immortalWrt、安装配置science小猫咪、DDNS如何在FakeIP下工作、利用*V*P*N*回家思考science文化知识。
选择openwrt的原因就不多说了,主要是比较小巧,可用的插件多,适合小规模折腾。您要是非得觉得装个ubuntu更好,也别喷我,毕竟适合自己的才是最好。
docker hub上基于openwrt的旁路由集成镜像很多,多数都是集成了各种插件的18.06版本,而且试用过程发现这些镜像动辄几百兆,很多插件还用不上,毕竟18.06有点老,有些插件更新还会出现内核兼容问题。
那么有没有办法使用新一些的openwrt版本,并且只安装自己需要的插件呢?必须有!
经过一些尝试,最后决定使用immortalWrt的 21.02.7版本搭建一个自己定制的环境,这个版本应该是上一个稳定的版本,只有大约25M。没敢用最新的23.05.x,还是感觉有点不踏实。
关于immortalWrt,是openwrt的一个分支,具体情况可以百度
好啦,开始正题:
准备工作。。。。
我使用的是群晖DS418play,型号比较老并被定义为家用系列,在DSM7.x下是无法安装docker的。
首先,无“open vswitch”选项,需要更改配置文件,共要改两个文件,,,如何修改和打开,请自行百度

其次,DS418play 无 Docker 套件,建议去官网下载DS218+的,注意DSM版本,我用的是DSM7.1系列,毕竟都是同一CPU,其它配置也差不多,,,
https://global.synologydownload. ... &build_number=42962
Docker-x64-20.10.3-1308_DS218plus.spk
如果您用的不是这种蹩脚的群晖,上面可以跳过。
打开“open vswitch”后,群晖会在原有两个物理网卡(eth0,eth1)的基础上,增加两个虚拟网卡(ovs_eth0,ovs_eht1),用于连接vswitch虚拟交换机。
使用ifconfig命令会发现,开启vswitch后,联机网卡已经自动切换成了ovs_eth0或ovs_eth1。

现在,使用下载好的群晖DS218docker套件,安装吧!安装好docker后,基础准备完成。

如果您不是群晖用户,上面的全可以跳过,选择适合您设备的应用,装好docker就行啦!
为docker配置环境。。。
1、开启网卡混杂模式(混杂模式-物理网卡可以被虚拟多个MAC地址)
切换root权限,否则没有权限
- sudo -i
eth0是我群晖已经联机的物理卡。ovs_eth0是“open vswitch”后,eth0虚拟出来连接虚拟交换机的网卡,根据个人实际修改。
- ip link set eth0 promisc on
- ip link set ovs_eth0 promisc on
设置网卡混杂模式,我不知道设置哪个,至少ovs_eth0需要设置,索性都设置了。
2、创建虚拟vlan
其中192.168.10.0/24是我的内网地址,192.168.10.1是我的主 路由器地址,ip-range 是使用的地址范围,以上根据个人实际修改。macnet是新建的macvlan名,可以随意取,后面会用到。
- docker network create -d macvlan --subnet=192.168.10.0/24 --ip-range 192.168.10.16/28 --gateway=192.168.10.1 -o parent=ovs_eth0 macnet
3、准备镜像
Openwrt的镜像选择还是比较多的,在Docker hub以此为关键字可以检索出很多,根据自己需要选用就可以,有实力的同学还可以制作自己的镜像。
但上面说过,这些自带插件的镜像个头都比较大,OP版本基本基于18.06有点老,插件更新也经常有问题(内核不兼容)
如果您执意选择这些大佬们精心定制的版本,我推荐:
piaoyizy/openwrt-x86,一个兄弟根据Lean大神制作的镜像,功能上根据旁路网关用途做了简化,只包括了“师夷长技以制夷” plus,“师夷长技以制夷”和Clash三个关键插件,以及一些基础插件。至少2023年底还在更新。
sulinggg/openwrt:x86_64,这个很著名啦,但最后版本应该是几年前编译的,已经停更。
我最后还是选择了immortalWrt21.02.7 自己定制。在docker注册表搜索“immortalwrt/rootfs”,选择“x86-64-openwrt-21.02.7”并拖取镜像。里面镜像很多,如果您的设备不是x86,可以选择您合适的架构下载。

如果你的群晖无法访问注册表,可以尝试用 docker pull 命令试试,但成功机会依然不大。
我最初也没办法访问注册表。为了解决这个问题,用了个笨办法。在台式机上也安装了docker for win,毕竟台式机出门就方便多了。用台式机的docker获取镜像,然后使用shell执行:
注意!是windows的那个DOS界面,提示符长这个样子的! PS C:\Users\Administrator>
- docker save -o c:\immortalwrt_21.02.7.tar immortalwrt/rootfs:x86-64-openwrt-21.02.7
这样就在C:盘根目录获得了镜像文件immortalwrt_21.02.7.tar,把文件上传到群晖,导入群晖docker就可以啦。
4、创建并运行容器
回到ssh,登入群晖,提升权限
- sudo -i
运行命令创建容器
- docker run -d \
- --restart always \
- --name immortalwrt_21.02.7 \
- --privileged \
- --network macnet \
- --ip=192.168.10.19 \
- immortalwrt/rootfs:x86-64-openwrt-21.02.7 \
- /sbin/init
说明:“\”是连接符号,用于声明命令行没有结束接下一行。
-d 参数是让容器在后台运行。
--restart always 为了避免容器意外挂掉,或者被误杀,设置了意外退出自动重启。
--name 给容器定义个名字,可以自由定义。
--privileged 获取宿主机root权限(或特殊权限)。
--network macnet 指定网络为macnet,就是我们上面创建的那个vlan。
--ip=192.168.10.19 指定默认地址。
immortalwrt/rootfs:x86-64-openwrt-21.02.7 镜像的名称。
/sbin/init 表示载入容器后内核启动时主动呼叫的第一个进程,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上自己kill自己。
最后回车运行一下吧!

这样的结果,就是容器已经成功创建。可以
- docker ps
看一下,是不是已经成功创建并运行。记住那一大串字符(CONTAINER ID)的前四位,一会儿要用到。

5、更改容器网络参数
使用SSH工具,进入容器,2e5b就是我们上面创建的容器ID缩写
- docker exec -it 2e5b /bin/ash
进入容器后,执行下面命令,编辑网络配置文件
- vi /etc/config/network
我是编辑成了这个样子,可以参考:
- config interface 'loopback'
- option ifname 'lo'
- option proto 'static'
- option ipaddr '127.0.0.1'
- option netmask '255.0.0.0'
- config interface 'lan'
- option type 'bridge'
- option ifname 'eth0'
- option proto 'static'
- option ipaddr '192.168.10.19'
- option netmask '255.255.255.0'
- option gateway '192.168.10.1'
- option dns '114.114.114.114 8.8.8.8'
- config interface 'wan'
- option proto 'static'
- option ipaddr '10.10.10.254'
- option netmask '255.255.255.0'
- config interface 'wan6'
- option ifname 'eth0'
- option proto 'dhcp6'
编辑完成后,按esc,输入":wq",保存退出,执行下面的命令,重启一下容器的网络
- /etc/init.d/network restart
好啦,在浏览器输入 192.168.10.19 就可以看到 immortalwrt_21.02.7的登录界面啦,用户名root,密码root
yxbinghe
安装和配置open.cla.sh(以下简称:小猫咪)
https://www.right.com.cn/forum/thread-8357728-1-1.html
yxbinghe
安装和DDNS如何在FakeIP下工作
https://www.right.com.cn/forum/thread-8361451-1-1.html