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地址 | 设备公网IP | UDP端口 |
SamSung | 10.10.24.12 | 1.1.1.1 | 33941 |
Apple | 10.10.24.9 | 2.2.2.2 | 58912 |
此时,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 搜索 服务
找到ZeroTier One,并且重启服务
3.2 加入网络
使用管理员身份打开PowerShell
执行如下命令,看到join ok字样就成功了
PS C:\Windows\system32> zerotier-cli.bat join 网络id(就是在网页里面创建的那个网络)
200 join OK
PS C:\Windows\system32>
登录管理后台可以看到有个个新的客户端,勾选Authorized
就行
IP assignment 里面会出现zerotier的内网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可以参考这个)
步骤如下:
- 安装linux客户端软件
- 进入目录
/var/lib/zerotier-one
- 替换目录下的
planet
文件 - 重启
zerotier-one
服务(service zerotier-one restart
) - 加入网络
zerotier-cli join
网络id
- 管理后台同意加入请求
zerotier-cli peers
可以看到planet
角色
3.4 安卓客户端配置
3.5 MacOS 客户端配置
步骤如下:
- 进入
/Library/Application\ Support/ZeroTier/One/
目录,并替换目录下的planet
文件 - 重启 ZeroTier-One:
cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill
- 加入网络
zerotier-cli join
网络id
- 管理后台同意加入请求
zerotier-cli peers
可以看到planet
角色