首页 > 其他分享 >群晖 docker ZeroTier方案

群晖 docker ZeroTier方案

时间:2024-12-13 21:31:36浏览次数:3  
标签:tun -% ZeroTier moon zerotier 群晖 服务器 docker

zerotier

ZeroTier 官方解释为将整个世界转变为单个数据中心或云区域,将所有设备,虚拟机和应用程序联接起来,就像在同一个交换机接入所有设备一样。zerotier 类似 VPN, 为内网服务器所在 NAT 网络和客户机所在 NAT 网络各虚拟出一个 VLAN, 这样俩个 VLAN 就可以通过 ZeroTier 建立连接,在通过 UDP 打洞技术就可以实现内网服务器和内网客户机直接交互数据。目前 ZeroTier 提供的点对点穿透技术成功率还是比较高的,可以应付大多数网络,国内长城宽带无法点对点穿透。而 zerotier 因为是国外的项目,官方提供的中转服务器在国外,国内连接延迟高甚至连不上,所以官方给出了 moons 概念,可以自己搭建中转服务器。另外 ZeroTier 支持 Windows、macOS、Linux 三大主流平台,iOS、Android 两大移动平台,以及 QNAP(威连通)、Synology(群晖)、Western Digital MyCloud NAS(西部数据)三个 NAS 平台,还支持 LEDE 开源路由器项目,支持客户端真的很多。zerotier 适合有 linux 基础的个人,一般用于 NAS, 为了稳定性需要自购一个云主机做中转,服务器和客户机都需要安装 zerotier,企业追求稳定可以考虑其他方式。
名词解释:ZeroTier 整的还挺有浪漫主义气质,官方的服务器叫 PLANET,用户自己建立的中转服务器叫 MOON。MOON 服务器只起到一个握手的作用,在 P2P 打通后就没有 MOON 服务器啥事了,因此不用担心 MOON 服务器的延迟和宽带会影响联机体验,但是 MOON 服务器务必位于国内,如果服务器位于海外的话,数据经由 GFW 出口,可能无法顺利打通 P2P。[6]PLANET 行星服务器,Zerotier 各地的根服务器,有日本、新加坡等地moon 卫星级服务器,用户自建的私有根服务器,起到中转加速的作用LEAF 相当于各个枝叶,就是每台连接到该网络的机器节点。部署中间服务器 Moon

这里要简单提一下 UDP 打洞的原理,UDP 打洞的本质是让 NAT 后面的机器 A 和 B 先连接一个有公网 IP 的中间服务器,然后中间服务器经过一番操作之后让 A 和 B 直接互联,这样之后的数据传输就是 A 和 B 之间直接传输,不再通过中间服务器。

但是出于节省资源和增强健壮性的角度,A 和 B 服务器直接打出来的「洞」并不是永久的,而是维持一段时间后释放,下次连接时重新打洞。这样就带来一个问题,Zerotier 是一款国外的项目,他提供的中间服务器到大陆的网络状况并不好,有很高的延迟,并且很可能丢包,这就导致我们每次「打洞」都有很高的延迟。

以我的网络环境进行的测试中,第一次「打洞」有接近 500ms 的延迟,之后延迟降低到 100ms 以下,直到这个「洞」被释放。

为了解决这个问题,Zerotier 提供了一个 moons 的概念,官方文档中提供了详细的解释和配置方法。

这篇博客文章提供了一份中文的教程,有兴趣的读者可以按此操作。

我的中间服务器部署在腾讯云,对三网都有良好的延迟和极低的丢包,因此在部署成功后,「打洞」的第一个数据包延迟降低到了不到 200ms,同时由于丢包较低,打洞成功率也有所上升。

来源: https://blog.sandtears.com/2019/02/18/zerotier-and-p2p.html


教程

注册账号

要使用 Zerotier 要先去官方网站创建一个账号,直接选择 Free 套餐即可,可以提供 100 台以内设备的内网穿透,完全够用了。

之后去网络管理页面创建一个网络并记住 NetworkID。

网络管理界面可以配置很多东西,但是这里只介绍需要用到的部分,就是 NetworkID 和下面的 Members。

NetworkID 是在连入新设备时需要用到的标识符,每个设备连接这个虚拟的局域网时都要输入这个 ID。

Members 则是连入网络的设备列表,按照默认的设定,当有一个新设备接入网络时,用户需要在这个页面进行授权


服务端安装:

安装与配置
curl -s https://install.zerotier.com | sudo bash #一键安装
systemctl enable zerotier-one #记得配置开机启动
加入zerotier网络
zerotier-cli join <network id> #上面截图的
记录必要信息,在网络管理页面,找到对应网络id,在Members中:1. 在前面打钩,添加备注2. 记录服务器的address,后面要用

国内服务器搭建一个moon服务器

国内搭建moon服务,可以加速udp打洞过程   生成moon.json模板
cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public > moon.json 
要记住id之后加入moon服务器全靠他。检查 "id"是否为你vps的10为字符id,可在zerotier网页管理端查看,如果不是说明上一步配置有误。
vi 编辑 moon.json,修改 “stableEndpoints” 为 VPS 的公网的 IP,以 IPv4 为例,记得带引号:
生成签名文件,执行之后生成 000000xxxx.moon 文件。
zerotier-idtool genmoon moon.json
将 moon 节点加入网络:在 VPS 的 Zerotier 安装目录下(/var/lib/zerotier-one)建立文件夹 moons.d,将生成的 000000xxxx.moon文件拷贝进去。
mkdir /var/lib/zerotier-one/moons.d
mv 000000xxxx.moon /var/lib/zerotier-one/moons.d/000000xxxx.moon
重启 zerotier,重启电脑。至此,VPS 上(moon 服务器)配置完成。
systemctl restart zerotier-one


NAS安装

群晖会有路由丢失的情况, 并且群晖7.0以上(DSM 7.0+) 会有TUN问题,。

创建一个持久的 TUN

DSM7 tun模块会出现问题,docker启动后,日志会提示:FATAL: cannot start ZeroTier One in container: /dev/net/tun not present.
使用ssh登录群晖,然后使用命令sudo -i ,提升到root权限,执行以下命令,创建TUN1、检查:lsmod | grep tun,如果结果为空,请尝试安装它:
insmod /lib/modules/tun.ko

2、测试tun.ko模块是否有效:依次输入以下命令:
1)mkdir /dev/net
2)mknod /dev/net/tun c 10 200
3) chmod 600 /dev/net/tun
4) cat /dev/net/tun
如果cat命令的返回结果是File descriptor in bad state,则表示模块已正确安装。
来源: http://www.nasyun.com/thread-77576-1-1.html
3、使tun.ko模块持久化
 #编写脚本到路径: /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
 #给这段脚本添加权限
 chmod a+x /usr/local/etc/rc.d/tun.sh
 #运行脚本
 /usr/local/etc/rc.d/tun.sh
 #检查TUN的运行状态(输出“/dev/net/tun”)
 ls /dev/net/tun
TUN存在问题可查阅这篇文章:Fix TUN/TAP not available on a Synology NAS 

在 DSM7 中安装 Docker 套件

直接安装即可


ZeroTier容器的配置

群晖 docker 镜像下载

使用docker安装 zerotier/zerotier 。 可能需要使用代理才能下载。

创建zerotier容器,并启动

创建一个Zerotier目录创建目录,然后复制路径,这里演示用:/volume1/docker/zerotier-one 
创建docker容器配置,并且启动:其中/dev/net/tun 就是上面解决的持久的 TUN;/volume1/docker/zerotier-one 是宿主机目录;网络模式使用host模式;
docker run \
    -d \
    --restart=always \
    --name zerotier-one \
    --device=/dev/net/tun \
    --net=host \
    --cap-add=NET_ADMIN \
    --cap-add=SYS_ADMIN \
    -v /volume1/docker/zerotier-one:/var/lib/zerotier-one \
    zerotier/zerotier


配置ZeroTier网络信息:

通过docker ps 查看容器id执行以下命令:
docker exec -it 2da zerotier-cli status #查看状态
docker exec -it 2da zerotier-cli join db64858fed8a5da0 #加入网络
docker exec -it 2da zerotier-cli orbit 9d153e5b7c 9d153e5b7c#使用moon服务,地址为Members-Address
docker exec -it 2da zerotier-cli listpeers #检查是否加入moon
docker exec -it 2da zerotier-cli listnetworks #查看配置情况

注:也可以使用docker提供的终端机去执行:
在 zerotier网页端显示的信息,勾选加入。

增加路由

这是为了解决:群晖docker部署zerotier重启不能连接的自动解决方法_群晖zerotier启动不了使用的命令是route add -net 192.168.XXX.0/24 dev ztwdjclgcv

其中 192.168.XXX.0/24 需要修改为zerotier网站上设置的本局域网的IP地址:172.29.0.0/16


 ztwdjclgcv则需要修改为启动docker后的设备序号,按如下方法查询:通过docker exec -it 2da zerotier-cli listnetworks #查看配置情况或者输入命令 ip a, 出来的最后一条信息序号后的字符串即为设备号: ztkseq7usn
vim命令增加zerotier_addroute.sh脚本,将脚本放到 /usr/local/路径下, 脚本文本如下,需要根据实际进行修改。zt7abcd2sa 替换为 ztkseq7usn , 10.147.88.0/24 替换为  172.29.0.0/16
#!/bin/bash

echo `date -d today +"%Y-%m-%d %T.%N"` " Add route start......"

#判断docker是否启动,标志是通过ip a命令查看特有设备标志zt7abcd2sa,各个机器不同。
dkstart=`ip a |grep zt7abcd2sa`

while [$dkstart -eq ""]
do
#如果不存在,那么就等待60秒后再判断。
echo `date -d today +"%Y-%m-%d %T.%N"` " Docker is not exist, waiting 60s."
sleep 60
dkstart=`ip a |grep zt7abcd2sa`
done

#循环出来,说明docker已经启动。判断路由是否存在。
resultstr=`route -n |grep zt7abcd2sa`
blankstr=""

if [$resultstr -eq $blankstr]
then
echo `date -d today +"%Y-%m-%d %T.%N"` " Route is not exist, we will add route!"
#增加路由命令
route add -net 10.147.88.0/24 dev zt7abcd2sa
sleep 3
#等待3秒后判断是否增加成功

resultstr=`route -n |grep zt7abcd2sa`

if [$resultstr -eq $blankstr]
then
echo `date -d today +"%Y-%m-%d %T.%N"` " Add route failed!"
else
echo `date -d today +"%Y-%m-%d %T.%N"` " Add route success! The route info is: "$resultstr
fi

else
echo `date -d today +"%Y-%m-%d %T.%N"` " Route is exist. The route info is: "$resultstr
fi

echo `date -d today +"%Y-%m-%d %T.%N"` " Add route end!"

生成的脚本需要增加执行权限,通过命令修改:chmod +x zerotier_addroute.sh ,修改后脚本为绿色。


增加计划任务:

控制面板->任务计划->新增->触发的任务->用户定义的脚本。

用户定义脚本中,加入之前编辑的脚本,并将打印日志写入日志文件。

bash /usr/local/zerotier_addroute.sh >>/usr/local/addroute.log



并在任务计划中勾选“已启动->保存”


在docker创建zerotier实例时,主要要将“启用自动重新启动”选上。

测试:

可在控制面板,计划任务中,选中刚才自定义的计划任务,点“运行”,运行一次脚本,并在telnet后台查看运行日志是否正常运行。日志存放在/usr/local/目录下。

查看命令:tail /usr/local/addroute.log 







docker版的zerotier时间与本地差8小时的解决方法:1、暂时停止henrist-zerotier-one容器;2、选择“编辑——环境——新增”,3、左边输入:TZ,右边输入:CST-84、保存退出,然后重新开启容器

PC:

https://www.zerotier.com/download/
点击系统托盘中的图标,选择Join New Network,加入
管理员身份运行powershell,执行加入moon主机:
cd C:\Program Files (x86)\ZeroTier\One #按照文件夹 ,自己找
zerotier-cli.bat orbit [节点ID地址] [节点ID地址] 
zerotier-cli.bat listpeers




安卓:

用第三方可以支持 moon服务:https://github.com/kaaass/ZerotierFix1. 加入网络2. 加入mood服务3. 允许移动网络下使用

标签:tun,-%,ZeroTier,moon,zerotier,群晖,服务器,docker
From: https://www.cnblogs.com/LungGiyo/p/18605874

相关文章

  • nginx-docker.yml
    version:'3'services:nginx:image:nginx:latestcontainer_name:nginx1restart:alwaysports:-"80:80"-"7080:7080"-"1180:1180"volumes:-/usr/local/nginx/html:/usr/share/ng......
  • Docker部署DataX
    Docker部署DataX简介DataX是阿里云DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX实现了包括MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS,databen......
  • 【Docker】Docker如何在x86_64平台构建arm64镜像
    Buildx是DockerCLI的一个用于增强构建能力的扩展插件,旨在扩展和改进Docker的原生dockerbuild命令。Buildx允许开发人员构建跨平台镜像、多架构镜像,支持更灵活的构建配置,并且集成了许多现代构建工具和技术。安装使用Buildx需要Docker的版本>=19.03。WindowsandmacOSBuildx......
  • 【Docker】通过Buildx+BuildKit构建一个多架构Docker镜像
    在【Docker】Docker如何在x86_64平台构建arm64镜像文章中介绍了如何使用buildx在x86架构的机器上构建一个arm架构的docker镜像,当时在构建arm64镜像的时候,第一次引用的基础镜像"java:8u111"是一个x86_64平台的镜像,构建没通过;后面换成了"eclipse-temurin:8-jdk-noble"这个同时支持am......
  • [Linux]Debian 12安装docker
    参考官网:https://docs.docker.com/engine/install/debian/forpkgindocker.iodocker-docdocker-composepodman-dockercontainerdrunc;dosudoapt-getremove$pkg;done#AddDocker'sofficialGPGkey:sudoapt-getupdatesudoapt-getinstallca-certif......
  • Docker
    Docker架构docker可用源列表网站:https://www.fre321.com/docker_proxy_listdocker命令dockerexec命令在容器内启动新的进程,即通过多个终端分别启动新的shell会话,可以在同一个容器内进行操作dockerexec-itmy_container/bin/bashdockerattach命令附加到已经......
  • 搭建Docker镜像仓库Harbor管理镜像(shell编写)
    搭建docker私有仓库harbor管理镜像一、案例问题:可能会出现的问题:1.网络连接问题,下载harbor软件包以及依赖包时下载失败2.系统版本兼容性问题3.初始化数据库时遇到浏览器访问问题(不用https)以及容器名重复问题二、案例分析:1.若遇到网络连接超时等网络问题,使用离线下载方......
  • 超详细!!关于Docker的使用镜像操作
    需要搭建帮助的可以去taobao搜索许风继续吹技术服务,谢谢!!!需要搭建帮助的可以去taobao搜索许风继续吹技术服务,谢谢!!!一、获取镜像之前提到过,DockerHub上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。从Docker镜像仓库获取镜像的命令是dockerpull。其命......
  • SpringCloud Nacos (docker 搭建 && 项目运行) 基于 Cloud 2022 版本
    一、使用docker安装nacos基础镜像1、安装docker(省略)2、创建docker-compose.ymlversion:'3.7'services:nacos:image:nacos/nacos-server:latestcontainer_name:nacosenvironment:-MODE=standalone#单机模式-PREFER_HOST_MODE=hos......
  • 001 星际蜗牛 黑群晖 配置 安装
    星际蜗牛硬盘位置RAID的类型都是Basic,不需要做磁盘阵列。文件系统选择:ext4,比较稳定。NAS结构图:系统盘:硬盘2| 固态M2:32GB【系统盘】第一层:硬盘4|  插口坏了  西数WD1600AAJS-08PSA0  149.1GB  【大旧衰】第二层:硬盘3|  东芝TOSHIBAMQ01ABD050  465.8GB......