zerotier各各平台使用及moon节点搭建

网络2年前 (2023)发布 ENE
2,384 0 0

本文参考:YogileZqinKing帅绝人寰的文章
zerotier官网:https://www.zerotier.com/
后台管理页面:https://my.zerotier.com/


zerotier介绍

为什么是Zerotier One

要想外网/公网上访问家里的群晖,大致方案有两个:一个是动态域名+公网IP+端口映射。相关文章也很多,限于本文主题就不涉及了。另一个就是内网穿透了,网上常见的方案有很多,比如frp,ngrok,n2n,nps(如果没记错的话,这东西丢包严重)等等,说实话都是没听过的名字(虽然算是相关专业从业人员,但也是很久没有折腾各种黑科技了)。
由于之前有使用hamachi的经验,所以第一个念头就是使用hamachi,搜了一圈发现这个软件已经淡出市场了,而且好像还在墙外,于是就放弃了,不禁还有些唏嘘。搜索新近的方案,如上述那些一看到要搭建各种服务器就本能的害怕,没有去仔细研究了。
内心还是倾向于找类似hamachi的方案。也就是点对点vpn,只用安装客户端,就可以秒互联。因为我的主要需求是自己在外面拿个手机连自己家里的群晖,也不用对大众提供服务,所以这种点对点的方式最适合我。更重要的,我也并不希望家里的机器暴露在公网上,而基于vpn的方案恰好能提供这方面的安全性。这么一来就选中了ZeroTier。

ZeroTier方案内网穿透原理

ZeroTier One的原理跟hamachi基本一样,就是虚拟出一块网卡,连上一个虚拟网络,安装了ZeroTier One客户端的设备可以连入这个网络,经过授权连接成功之后彼此都在同一网段,可以像在局域网一样互相访问,例如访问共享文件夹,web server,ftp server,联机游戏(例如打星际),当然也就包括访问群晖。所以如果你的群晖和你的手机连上了这个网络,不论两台设备具体在哪里,都像同一局域网内,从而实现内网穿透,达到从外网访问内网群晖的目的。

主机1可以是群晖主机,主机2可以是手机或平板。只要主机1和主机2都能连到互联网,安装上ZeroTier One的客户端后,就会在本机虚拟出一块网卡,并获得对应IP,图例中是172.28.x.x网段。经过网络所有人授权后(后面会详细讲解),这两个主机就可以通过172.28.x.x网段互相访问了,由于就像在局域网一样,所以基本没有任何限制,任何基于TCP/IP的网络服务都可以访问到,自然也就可以访问到群晖了。
注:图中省掉了公网IP,因为公网IP多少不重要,只要主机能上公网,能连上ZeroTier,就能获得172网段IP了,也就可以互联互通了。

ZeroTier One的优势

相比其他流行方案,ZeroTier One有这么几个优势:

  • 免费版支持客户端多。连入同一个网络的客户端不超过100个就都免费
  • 速度快,p2p模式。客户端联通之后流量基本不经过服务端/superNode而是点对点传输,传输速度取决于你设备所在宽带上行带宽以及手机端4g上网的速度
  • 管理配置简单。不要被全英文的界面吓到,明白原理之后安装配置极其简单
    最重要的是支持多种平台。支持win、mac、安卓、苹果,以及多种发型版Linux,比如群晖系统(这也是选择ZeroTier One的重要原因),如下图,可以下载spk文件直接在群晖中部署(注意群晖有各种架构,下载时要注意处理器架构)

注意事项

zerotier的穿透并不是100%成功,如果nat类型不一样(例如一边是锥型一边是对称型失败还是挺高的),nat次数过多,都会失败。这种情况下,数据会通过moon节点转发(类似于frp),速率取决于moon节点,zerotier官方提供的moon节点在国外,延迟是相当的高,所幸可以自己搭建moon。
不推荐将zeortier的网络控制调节为公共。


注册zerotier帐号并创建虚拟局域网

首先在my zeroteir注册帐号并登录

点击Create A Network即可

下面图片中的英文小写加数字就是设备加入虚拟局域网的id

这里是控制连接网络用户


安装zerotier

1. Windows

点击这里下载zerotier的win安装包(大约12m)
一路按默认设定安装即可

安装软件的过程可以看做往系统插了一张新网卡,并把网卡连了一根网线,此网线通往ZeroTier的专有网络,逻辑上独立于你当前局域网之外。如果弹出如下窗口,点击是。

安装好后,从菜单运行,不会出主程序窗口,而是在任务栏出ZeroTier One的小图标,右键点击会出现弹出菜单,在此处点击Join Network...加入刚刚申请的网络

点击Join Network...会弹出一个小窗,填入新申请这个网络id号,再点击Join即可

2. mac

点击这里下载zerotier的mac安装包(大约1.63m)
一路按默认设定安装即可

安装软件要管理员权限,输入mac密码就行
安装好后,从启动台点击zerotier,上方状态栏就会出现zerotier的图标,点击图标出现弹出菜单,在此处点击Join Network...加入刚刚申请的网络

点击Join Network...会弹出一个小窗,填入新申请这个网络id号,再点击Join即可

3. Iphone(这里没图单纯懒得截图)

点击这里进入苹果商店(iOS 应用程序在 iOS 10 或更高版本上运行。)
安装后,点击zerotier进入应用,在右上角点击+,跳出用户须知,往下划,点击accept,进入add network,在Network ID一栏填入新申请这个网络id号,再点击下方的Add Network即可

4. 安卓(这里没图单纯懒得截图)

点击这里进入谷歌商店或者点击这里,该应用程序应适用于Android 5或更高版本,但建议使用更新的版本。LineageOSGrapheneOS可能有问题。
安装后,点击zerotier进入应用,在右上角点击+,进入Join Network,在Network ID:一栏填入新申请这个网络id号,再点击下方的Add Network即可

5. LINUX (DEB/RPM)

  1. 基于DebianRPM的发行版(包括Debian、Ubuntu、CentOS、RHEL、Fedora和其他发行版)可以通过以下脚本安装
    curl -s https://install.zerotier.com | sudo bash

    如果安装了GPG,则可以使用更安全的选项:

    curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && \
    if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi

    使用脚本后,使用aptyum管理未来对zerotier-one的更新

  2. Archlinux可以用aur社区里安装
    yay -S zerotier-one

    或者

    yaourt -S zerotier-one

    在终端输入

    
    systemctl enable zerotier-one

systemctl start zerotier-one

sudo zerotier-cli join 填入新申请这个网络id号

### 6. BSD(没用过,仅放官网原文)
点击[这里下载](https://www.freshports.org/net/zerotier/)
FreeBSD 包是由 FreeBSD 社区创建和支持的,而不是由 ZeroTier, Inc. 创建和支持。请联系包维护者报告与打包相关的错误。
### 7. NAS设备

#### 群晖
1. docker(没用过,仅复制)
适用于Synology NASZeroTier One可用作Docker容器。请参阅此处的说明:https://docs.zerotier.com/devices/synology/。
2. 直接装(官网莫名没有下载链接)
在[帅绝人寰](https://post.smzdm.com/p/741270/)里发现这个链接https://download.zerotier.com/RELEASES/1.6.5/dist/synology/,姑且我在这做了个备份https://www.eneziyuan.top:2020/?dir=/zerotier
所有带syn字段,spk结尾的都是ZeroTier One 给群晖的安装包,有种老鼠掉进米缸的感觉了。
但是如何确定哪个版本还要费一点周折。方法一,可以在这个平台支持列表查询自己cpu类型,决定下载哪个版本。但在这个列表,我却找不到对应的版本,所以用方法二:网上下一个putty.exe,然后ssh连到自己群晖的终端。(黑群晖只要是x86,一律可以用含有x86的)

在hostname处输入群晖的IP,点击open。弹出窗口输入群晖用户名密码(不推荐使用admin这个账户,建议密码强度设置高一点,不然会被黑)

登录后打命令uname -ar,就会出现cpu版本信息,大概长这样:

这就很明显了,是64位系统bromolow的版本,下载zerotier-1.2.8r0-syn-bromolow-6.1.spk就可以了。
在群晖端安装就相对简单了。登录DSM,打开套件中心,选择手动安装,找到刚刚下载的spk文件,点击下一步

然后会出现ZeroTier One的版本信息

因为我系统里早已安装了ZeroTier One的套件,所以这几步只是演示,可能和第一次安装界面稍有不同。安装过程大约几分钟。安装完成后可以在主菜单找到,点击运行。

运行后主界面基本没有内容, 唯一的操作就是在右下角[Network ID]填入网络id号,然后点击join。
#### 威联通(没用过,不做过多介绍)
软件包可用于x86、x64和几个ARM变体。安装后,可以从命令行控制 ZeroTier。查看[ZeroTierNAS存储库](https://github.com/zerotier/ZeroTierNAS)以获取更多信息。
#### WD MyCloud(没用过,不做过多介绍)
ZeroTier One适用于Western Digital MyCloud EX2/4/Ultra NAS和个人云设备,包在download.zerotier.com。安装后,您可以从ZeroTier One命令行界面加入虚拟网络。有关 更多信息,请参阅[ZeroTierNAS存储库](https://github.com/zerotier/ZeroTierNAS)。
### 8. 其他
#### 社区OpenWRT端口(没用过,不做过多介绍)
ZeroTier, Inc. 不直接支持社区端口。请联系端口维护者寻求帮助或报告特定于端口的错误。
github地址:https://github.com/mwarning/zerotier-openwrt
#### docker(没用过,不做过多介绍)
该存储库包含一个 Dockerfile,可用于创建容器化 ZeroTier,以用于纯容器的 Linux 发行版。
github地址:https://github.com/zerotier/ZeroTierOne/blob/master/ext/installfiles/linux/zerotier-containerized/Dockerfile
[点击这里](https://download.zerotier.com/dist/qnap/)下载
### 9. 开源(纯搬运)
#### Github 上的 libzt
ZeroTier 的库版本。
ZeroTier SDK 将您的网络带入用户空间。我们已将我们的网络管理程序核心与网络堆栈[lwIP](https://savannah.nongnu.org/projects/lwip/)配对,以为您的应用程序提供专有的私有虚拟网络接口。
github地址:https://github.com/zerotier/libzt
#### GitHub 上的 ZeroTier one
ZeroTier One 可以很容易地从源代码编译,以便在我们通过预构建包支持的操作系统之外的操作系统上使用。这包括不太常见的 Linux 版本、较旧的 FreeBSD、OpenBSD、NetBSD 等。
github地址:https://github.com/zerotier/ZeroTierOne
旧版本
可以在[此处](https://download.zerotier.com/RELEASES/)找到旧版本的 ZeroTier 。
### 10. 最后允许设备加入网络
重点来了,此时回到页面 刷新一下(或者直接从客户端系统栏图标上右键点出菜单,点击ZeroTier Central进入此页面),将页面拉下来,此时就会看之前No Devices have joined this network的地方出现这个客户端,显示online

但是别急,此时客户端并未连上这个虚拟网络,需要进一步授权。在此管理页面勾选前面的复选框,此时这个客户端就终于连上这个网络了

可以看到,勾选之后,左侧虚线变成了绿色实线,表示客户端已经连上这个网络(1d7193******63d387)。另外客户端在此虚拟网络中的IP也已经得到,为10.147.18.99。中间short namedescription的部分,我也填入了相应短名称和描述,这样方便在多个客户端连入后,明确知道各个客户端分别是什么。这个很有用,整个ZeroTier世界里面全是数字,就靠这个描述和名称来标识各个客户端了。
***
## 配置ZeroTier Moon私有中转节点
如果终端PC ping OpenWrt下桥接网络延迟超过30ms且时断时续就表示终端PC与OpenWrt之间的P2P隧道没有打通,一般移动网络与电信或者联通之间使用UDP穿透会失败。这时候就需要自建Moon节点进行中专加速。
这边测试了联通和广电的点对点隧道,是不能直接用UDP打通的。搭建MOON节点后可以看到网络明显稳定了许多

搭建ZeroTier的Moon行星节点需要一台有公网IP的VPS,最好用国内的,因为国内的转发延迟相对与国外的VPS还是要快上不少。要是实在没有可以用谷歌云,注册送100刀,用香港的节点延迟在40ms上下,流量计费100刀大概1T流量,也可以用[甲骨文Oracle](https://www.oracle.com/cn/index.html)免费的,但要visa卡或者万事通卡,本事示例用的时一个阿里云的上海,系统为Centos 7。
### 1. vps安装ZeroTier(详细情况请看上面Linux安装教程)
* 执行命令:
```Linux
curl -s https://install.zerotier.com/ | sudo bash
  • 执行完成 ZeroTier就已经安装完成了。

    2. vps加入ZeroTier局域网

  • 执行命令:
    zerotier-cli join <network id>
  • 完成之后按ZeroTier官网允许其入网。

    3. 生成moon模板

  • 执行命令:
    cd /var/lib/zerotier-one
  • 执行命令:
    zerotier-idtool initmoon identity.public > moon.json

    4. 修改moon.json

  • 执行命令
    vi moon.json
  • 修改stableEndpointsvps的公网的IP,例如"stableEndpoints": [ "8.8.8.8/9993" ]

    5. 生成签名文件

  • 执行命令:
    zerotier-idtool genmoon moon.json
  • 执行之后会生产一个000000xxxx.moon的文件,将这个文件用Winscp等工具从vps上下载下来。

    6. 将moon节点加入网络

  • 执行命令:
    mkdir moons.d
  • 执行命令:
    mv ./*.moon ./moons.d/
  • 重启 zerotier即可。
    systemctl restart zerotier

    或者

    zerotier-cli restart

    7. 别忘了9993加入开放端口


    在其他ZeroTier节点中添加启用已设置好的Moon节点

    自动配置

  • 输入命令:
    sudo zerotier-cli orbit [moon.json 文件中的 id] [moon.json 文件中的 id]
  • Windows 有一点不同,需要使用管理员权限的 PowerShell 输入:
    zerotier-cli orbit [moon.json 文件中的 id] [moon.json 文件中的 id]

    手动配置

    各个系统平台下 ZeroTier 目录位置 :

  • Windows: C:ProgramDataZeroTierOne
  • Macintosh: /Library/Application Support/ZeroTier/One
  • Linux: /var/lib/zerotier-one
  • FreeBSD/OpenBSD: /var/db/zerotier-one
    OpenWrt需要修改一个脚本,因为其var目录时一个内存虚拟的临时目录,重启后原有配置不会保留。通过ssh连接OpenWrt(ssh功能可在系统->管理权中开启)。
    执行命令vi /etc/init.d/zerotier,在“add_join() {”上方插入两行代码:

    mkdir -p $CONFIG_PATH/moons.d
    cp /home/moons.d/* $CONFIG_PATH/moons.d/
    1. 在对应系统平台下的 ZeroTier 目录位置,创建moods.d文件夹。
      sudo mkdir /var/lib/zerotier-one/moods.d
    2. moon服务器生成的0000006xxxxxxxxx.moon拷贝到moons.d文件夹下。
    3. 重启zerotier-one服务
      • Linux :/etc/init.d/zerotier-one restart
      • Windows :
      • 按下windows键+r,打开运行窗口。
      • 输入services.msc回车。
      • 找到ZeroTier One服务,右键选择 “重新启动。

        检测生效

  • 非moon的客户端,输入命令:
    zerotier-cli listpeers
  • Windows有一点不同,需要使用管理员权限PowerShell输入:
    zerotier-cli listpeers

    如果出现如下情况:

  • moon服务器ID 、IP地址出现在列表中,证明联通moon服务器
    200 listpeers <ztaddr> <path> <latency> <version> <role>
    ...................
    200 listpeers 6xxxxxxxxx [moon IPv4地址]/60723;11450;11405 -1 1.4.6 MOON
    ...................
© 版权声明

相关文章