群辉利用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权限,否则没有权限

  1. sudo -i

eth0是我群晖已经联机的物理卡。ovs_eth0是“open vswitch”后,eth0虚拟出来连接虚拟交换机的网卡,根据个人实际修改。

  1. ip link set eth0 promisc on
  2. ip link set ovs_eth0 promisc on

设置网卡混杂模式,我不知道设置哪个,至少ovs_eth0需要设置,索性都设置了。

2、创建虚拟vlan
其中192.168.10.0/24是我的内网地址,192.168.10.1是我的主 路由器地址,ip-range 是使用的地址范围,以上根据个人实际修改。macnet是新建的macvlan名,可以随意取,后面会用到。

  1. 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>

  1. 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,登入群晖,提升权限

  1. sudo -i


运行命令创建容器

  1. docker run -d \
  2.     --restart always \
  3.     --name immortalwrt_21.02.7 \
  4.     --privileged \
  5.     --network macnet \
  6.     --ip=192.168.10.19 \
  7.    immortalwrt/rootfs:x86-64-openwrt-21.02.7 \
  8.     /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自己。
最后回车运行一下吧!

这样的结果,就是容器已经成功创建。可以

  1. docker ps

看一下,是不是已经成功创建并运行。记住那一大串字符(CONTAINER ID)的前四位,一会儿要用到。

5、更改容器网络参数
使用SSH工具,进入容器,2e5b就是我们上面创建的容器ID缩写

  1. docker exec -it 2e5b /bin/ash

进入容器后,执行下面命令,编辑网络配置文件

  1. vi /etc/config/network

我是编辑成了这个样子,可以参考:

  1. config interface 'loopback'
  2.     option ifname 'lo'
  3.     option proto 'static'
  4.     option ipaddr '127.0.0.1'
  5.     option netmask '255.0.0.0'
  6. config interface 'lan'
  7.         option type 'bridge'
  8.         option ifname 'eth0'
  9.         option proto 'static'
  10.         option ipaddr '192.168.10.19'
  11.         option netmask '255.255.255.0'
  12.         option gateway '192.168.10.1'
  13.         option dns '114.114.114.114 8.8.8.8'
  14. config interface 'wan'
  15.     option proto 'static'
  16.     option ipaddr '10.10.10.254'
  17.     option netmask '255.255.255.0'
  18. config interface 'wan6'
  19.     option ifname 'eth0'
  20.     option proto 'dhcp6'

编辑完成后,按esc,输入":wq",保存退出,执行下面的命令,重启一下容器的网络

  1. /etc/init.d/network restart


好啦,在浏览器输入 192.168.10.19 就可以看到 immortalwrt_21.02.7的登录界面啦,用户名root,密码root

版权声明:
作者:yxbinghe
链接:https://www.zhanhao.ch/?p=650
来源:ice.99
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>