0

搭建私有ZeroTier Planet根节点|ZeroTier异地组网

Share
Avatar photo
  • 2024 年 5 月 26 日

ZeroTier作为异地组网的一个得力的工具,深受广大群众的喜爱。其高效的UDP打洞连接避免了TCP连接所导致的高占用问题。

ZeroTier的连接架构主要由Planet、Moon和Leaf三级节点组成,其主要的作用见下表:

Planet
行星节点
Planet节点是ZerotTier网络的根节点,所有的初始连接都需要先通过Planet节点。
他比较像一个存储着ARP表三层的交换机
Moon
卫星节点
Moon节点是为了提升Leaf节点间构建UDP连接速度的工具,他的作用与CDN比较相似
Leaf
客户
Leaf一般指客户端节点

为了方便理解,我们简要介绍客户端的连接:

首先客户端Samsung通过UDP协议连接Planet节点,成功连接后,由Planet节点给客户端分配IP地址,并将分配的IP地址与客户端的UDP连接的IP与端口记录在Planet节点的转发表中。

此时另一个客户端Apple也通过UDP协议连接Planet节点,Planet节点继续上述的流程。

此时在Planet节点中就会有一张如下的表:

设备(Leaf节点)由Planet分配的IP地址设备公网IPUDP端口
SamSung10.10.24.121.1.1.133941
Apple10.10.24.92.2.2.258912

此时,Planet节点会将这张表同步给SamSung与Apple客户端,两个客户端之间会尝试通过已经开放的UDP端口直接进行连接,而并非通过Planet节点转发流量。此时这个连接就变成了:

1.1.1.1:33941 <-> 2.2.2.2:58912

以此类推。

绪论

由于一些不可抗力,在中国大陆直接连接ZeroTier官方节点基本是不太可能的事情,所以在这个时候Moon节点就起到了一定的作用,很多使用者选择在中国大陆的云服务器或VPS上搭建Moon节点,这样就可以做到帮助Leaf节点进行快速连接。但是由于Moon节点也需要连接到Planet根节点,所以搭建Moon节点后网络连接其实并不稳定。

为了解决这样的问题,本文通过搭建私有Planet根节点,摆脱ZeroTier官方服务器的限制,达到低延迟连接的效果。

提示:官方并未公布Planet节点的搭建方式与源代码,所以我们搭建的Planet节点并非是使用官方代码进行搭建的,而是第三方开发者进行独立开发并开源的软件。

一,搭建ZeroTier Planet节点

本文选择的是由Key Networks编写的一套包含Web UI的Planet节点软件,软件传送门,本文选择通过Docker的方式去部署,请各位看官确认您的Docker可以正常运行后,再进行下面的步骤。关于如何安装Docker请自行查询资料。

推荐一键部署:https://github.com/xubiaolin/docker-zerotier-planet

二,Bind9 DNS服务器配置(可选操作)

三,客户端配置

客户端主要为Windows, Mac, Linux, Android

3.1 Windows 配置

首先去zerotier官网下载一个zerotier客户端

将 planet 文件覆盖粘贴到C:\ProgramData\ZeroTier\One中(这个目录是个隐藏目录,需要运允许查看隐藏目录才行)

Win+S 搜索 服务

ui

找到ZeroTier One,并且重启服务

ui

3.2 加入网络

使用管理员身份打开PowerShell

执行如下命令,看到join ok字样就成功了

PS C:\Windows\system32> zerotier-cli.bat join 网络id(就是在网页里面创建的那个网络)
200 join OK
PS C:\Windows\system32>

登录管理后台可以看到有个个新的客户端,勾选Authorized就行

ui

IP assignment 里面会出现zerotier的内网ip

ip

执行如下命令:

PS C:\Windows\system32> zerotier-cli.bat peers
200 peers
<ztaddr>   <ver>  <role> <lat> <link> <lastTX> <lastRX> <path>
fcbaeb9b6c 1.8.7  PLANET    52 DIRECT 16       8994     1.1.1.1/9993
fe92971aad 1.8.7  LEAF      14 DIRECT -1       4150     2.2.2.2/9993
PS C:\Windows\system32>

可以看到有一个 PLANTET 和 LEAF 角色,连接方式均为 DIRECT(直连)

到这里就加入网络成功了

3.3 Linux 客户端(openwrt可以参考这个)

步骤如下:

  1. 安装linux客户端软件
  2. 进入目录 /var/lib/zerotier-one
  3. 替换目录下的 planet 文件
  4. 重启 zerotier-one 服务(service zerotier-one restart)
  5. 加入网络 zerotier-cli join 网络 id
  6. 管理后台同意加入请求
  7. zerotier-cli peers 可以看到 planet 角色

3.4 安卓客户端配置

Zerotier 非官方安卓客户端

3.5 MacOS 客户端配置

步骤如下:

  1. 进入 /Library/Application\ Support/ZeroTier/One/ 目录,并替换目录下的 planet 文件
  2. 重启 ZeroTier-One:cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill
  3. 加入网络 zerotier-cli join 网络 id
  4. 管理后台同意加入请求
  5. zerotier-cli peers 可以看到 planet 角色