一、Zerotier 原理
概念
- planet:核心角色,官方不允许自建私有,zerotier 的行星服务器,用于管理全球所有的 zerotier 客户端的地址信息,帮助建立客户端间的直接链接,以及在无法建立直接链接时,作为中继服务器转发设备间的流量。
- moon:官方允许自建私有,作为离客户端更近的中继服务器存在,可以使转发的效率更高。
原理
* 客户端注册
在内网机器上启动一个 zerotier 客户端,使用 join 加入一个网络,在控制台对客户端进行授权,此时 planet 上有如下记录:
代码登录后可见
* 尝试 p2p 连接
当在 代码登录后可见 机器上访问 代码登录后可见,内网机器向 planet 查询到目标地址的公网 代码登录后可见,端口为 22226。
代码登录后可见 尝试与 代码登录后可见的 22226 端口进行直接数据交互,这个过程称为 udp 打洞实现 p2p 直连。
* planet 转发
由于各种网络限制,p2p 不能直连。
此时通过 planet 转发,如果还配置了 moon 节点,此时会通过速度快的 moon 节点进行转发。
如上图则大概率从上海的 moon 节点进行数据转发,此时网络取决于 moon 的带宽。
二、私有 zerotier-planet 的优势
- 解除官方的设备连接数限制
- 提升手机客户端连接的稳定性
代码登录后可见
三、搭建私有 planet
代码登录后可见
这里需要注意的是传参需要将 代码登录后可见 修改为公网 ip。
2、生成 planet 文件
代码登录后可见
如果 linux 内核版本太低,可能报错 代码登录后可见,那么需要升级内核。
关于升级内核,可以参考这篇文章 [链接登录后可见]。
当然,如果你觉得云服务器不太方便升级内核,那么完全可以用一台测试的虚拟机进行生成文件,文件生成后用 ftp 上传到 代码登录后可见 目录,然后再启动容器。
3、测试
代码登录后可见
代码登录后可见 为公网 ip 则搭建 planet 成功。
四、创建私有网络
访问 代码登录后可见,账号密码:admin/admin123。
1、创建网络
2、初始化网络
点击 Easy setup
设置网段和子网掩码
五、安装 zerotier 客户端
docker 安装
既然已经搭建了私有的 planet,当然是使用自己的,需要先下载服务器 代码登录后可见 目录下的 planet 文件。
1、启动 zerotier 客户端
代码登录后可见
2.替换 planet 文件
将服务器下载的 planet 文件上传到客户端的 代码登录后可见 目录。
3、重启客户端
代码登录后可见
4、查看 planet
代码登录后可见
可以看见 stableEndpoints 的配置是自己的公网 ip。
加入网络
代码登录后可见
6、授权
ip 也可以自己设置,不过要在刚刚设置的网段内。
windows 安装
1、下载客户端
[链接登录后可见]
2、安装客户端
双击安装即可
3、替换 planet
将下载好的 planet 文件复制到 代码登录后可见 目录下
4、重启服务
如果仅仅只是重启 ui 是不行的,需要找到任务管理器 -> 服务 -> ZeroTierOneService,进行重启。
5、查看 planet
可以看见 planet 地址是自己的公网。
6、加入网络
点击右下角图标,join new network,输入刚刚创建的虚拟网络 id,我这边是 8b8b9ed58a0baa3d。
7、授权
和 dokcer 安装一样的操作,不再赘述。
六、测试
通过上述方式将两台机器加入到网络,通过 ping 查看是否能打洞成功。其中 202 本地虚拟机,vps 是有公网 ip 的云服务器。
ping 检测
在 10.0.0.202 机器上 ping 10.0.0.222。
代码登录后可见 查看到只有自己的私有根服务器,ping 的延迟不到 100ms 和直接 ping 公网 ip 差不多,说明打洞成功。
局域网 scp 检测
可以看见速度能达到十几MB,而我的根服务器是腾讯云的 8Mbps 服务器,如果通过根服务器转发肯定不可能达到这个速度,说明打洞成功。
speedtest 测速
反向代理
参考教程:[链接登录后可见]
⚠️Nginx Proxy Manager(以下简称NPM)会用到80、443端口,所以本机不能占用(比如原来就有Nginx)
互联网使用请确保完成了域名解析