黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透

前言:由于Synology 的 DSM 7 不允许第三方应用程序以 root 用户身份运行。所以DSM7以上的版本将只能使用docker的方式来安装zerotier(而DSM6的zerotier将在2023年进入EOL阶段(停止服务),且用且珍惜吧。


通过docker安装zerotier主要分为以下四个步骤:

1、在nas启动ssh访问;

2、创建TUN服务;

3、安装docker服务(群晖套件直接安装即可,这里略过);

4、拉取并启动zerotier one镜像;

5、将zerotier-one镜像加入你的网络,并添加moon节点

在nas启动ssh访问

在群晖页面控制面板下,找的“终端机和SNMP”这一项,把“启动SSH功能”勾上即可,默认使用22端口即可;

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第1张图片 

 

之后使用远程访问工具(我这里使用putty)登录群晖;

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第2张图片 

 

创建TUN服务

首先切换到root用户(以下所有的操作都需要有root权限)

sudo -i

创建一个 /usr/local/etc/rc.d/tun.sh 脚本 到 /dev/net/tun 目录下

echo -e '#!/bin/sh -e \ninsmod /lib/modules/tun.ko' > /usr/local/etc/rc.d/tun.sh

给刚刚创建的tun脚本授予所有用户均可执行的权限

chmod a+x /usr/local/etc/rc.d/tun.sh

使用以下命令检查以下tun.ko是否存在

lsmod | grep tun

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第3张图片 

 

由于我的群晖默认已经有tun这个包了,所以就不需要安装,直接用即可,如果使用lsmod命令找不到tun这个包,则执行以下脚本,创建TUN

/usr/local/etc/rc.d/tun.sh

如果执行脚本遇到以下报错,说明tun.ko模块可能已存在,不需要重新编译

 

 

检查一下 TUN

ls /dev/net/tun

如果您在让TUN工作时遇到困难,请查看‎‎Rui Marinho的指南‎

创建zerotier镜像

创建一个文件夹用于挂载zerotier-one的配置文件和认证信息(我这里路径指定到我自己创建的docker/zerotier文件夹下)

mkdir /volume1/docker/zerotier

这里也可以直接在群晖file Station上创建,然后再文件夹属性中获取实际路径(建议使用这步,比较直观,不容易出错)

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第4张图片 

 

以下是zerotier官方给的注意:

In the next step we bind mount to the host's created above in order to store ZeroTier's identity. This is not guaranteed to survive DSM updates. I would suggest placing this on an automatically-mounted volume where your other private user data resides. The location you choose to store your identities should be kept secure and never placed on a shared volume that others can access./var/lib/zerotier-one

译文版本:

‎在下一步中,我们将装载绑定到上面创建的主机,以存储ZeroTier的身份(我的理解是config配置和用户信息)。这不能保证在 DSM 更新后仍然有效(zerotier自己也不确定,为了群晖更新后,会不会不再允许用户使用zerotier做内网穿透,毕竟DSM7之后,群晖直接不再支持zerotier的套件了,可能zerotier自己也感觉后续可能会被不再支持,故在此给用户打个预防针)。zerotier建议将其放在其他私人用户数据所在的自动装载卷上。您选择存储身份(用户信息和config信息)的位置应保持安全,切勿放置在其他人可以访问的共享卷上‎。

构建zerotier-one镜像 (Repo: zerotier/zerotier-synologyzt

docker run -d           \
 --name zt             \
 --restart=always      \
 --device=/dev/net/tun \
 --net=host            \
 --cap-add=NET_ADMIN   \
 --cap-add=SYS_ADMIN   \
 -v /volume1/docker/zerotier:/var/lib/zerotier-one zerotier/zerotier-synology:latest

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第5张图片 

 

执行完,出现一串检验码即表示镜像部署启动成功,回到群晖管理页面,既可以看到多了一个群晖镜像;

 黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第6张图片

 

配置zerotier-one加入网络,并配置moon节点

配置zerotier-one加入网络

使用以下命令检查zerotier-one的运行状态

docker exec -it zt zerotier-cli status

再使用以下命令加入你的zerotier-one网络(其中后面的e5cd7a9e1cae134f换成你自己的zerotier-one生成的网络id

docker exec -it zt zerotier-cli join e5cd7a9e1cae134f

 

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第7张图片

 

 

当看到200 join OK,既是表示加入网络成功,这时候登录zerotier控制台,即可看到网络列表多了一条未授权加入的网络,勾选允许其加入即可;

 

接下来在为docker环境下的zerotier-one添加moon节点

这个比较简单,直接在群晖file station下,找到你上面创建的docker文件夹下的zerotier文件夹,将你的moon.d拖拽进入即可

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第8张图片

 

最后,重启zerotier docker容器,在ssh端执行以下命令,检查moon节点是否加载成功(看到多了moon的那行即表示成功)

docker exec -it zt zerotier-cli listpeers

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第9张图片 

 

最后在手机上使用zerotier分配的ip即可顺便在4G网络下接入局域网内的群晖了(前提是你的手机需要先安装zerotier客户端,并已加入同一个网络id)

黑群晖(DSM7)使用docker挂载zerotier one实现内网穿透_第10张图片 

 

你可能感兴趣的:(黑群晖,zerotier,网络,docker)