分享

【新提醒】利用Docker给自己定制旁路由(一)安装immortalWrt

 laq6 2024-04-21 发布于福建
 本帖最后由 tyxu 于 2024-3-24 17:35 编辑

本人老白,又老又白,喜欢折腾。目前半退休状态,终于有时间折腾啦,和大家分享一下我的近期折腾结果。如果大佬们觉得本文幼稚,请勿喷,不要打击老同志那颗爱折腾的心。同时,热烈欢迎大家指正交流。
本文极度适合群晖用户,适合各种已经完成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://nologydownload. ... &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

还没写完,按错发布了。晚上补齐吧,第一次发帖,抱歉啦



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多