项目地址
需求背景
- 官方的 Zerotier 服务提供的 planet 行星根服务器大多在海外,受到国内网络环境的影响常常无法快速连接上
- 官方允许自建 Moon 卫星服务器节点,但该节点仍然需要与 Planet 根节点进行交互,效果不太理想
- 官方的 Zerotier 服务免费版本允许 25 个客户端接入,其实可以足够满足个人用户的需求的
于是自建 Planet 行星根服务器节点应运而生,一个 Planet 节点中包含 Contractors 控制器、Moon 卫星服务器节点,又可以设置上一级的 Planet 行星根服务器节点(默认为官方 Planet)
具体的技术背景不再过多赘述,经过对比 Zerotier 是支持平台最多,搭建使用过程最为简便的虚拟局域网、P2P 内网穿透方案
开始安装
搭建环境为:腾讯云服务器 Ubuntu 22.04 LTS 1H2G
安装 git
apt update && apt install git -y
安装 Docker
curl -fsSL https://get.docker.com |bash
Docker 启动并设置自启动:
sudo systemctl start docker
sudo systemctl start docker.socket
sudo systemctl enable docker
sudo systemctl enable docker.socket
Git 下载官方源码
git clone https://github.com/xubiaolin/docker-zerotier-planet.git #官方地址
git clone https://ghproxy.markxu.online/https://github.com/xubiaolin/docker-zerotier-planet.git #加速地址
执行安装脚本
cd docker-zerotier-planet
./deploy.sh
如有覆盖安装需求请先卸载再安装,会重新生成 planet
#安装日志
欢迎使用zerotier-planet脚本,请选择需要执行的操作:
1. 安装
2. 卸载
3. 更新
4. 查看信息
5. 退出
请输入数字:1
开始安装,如果你已经安装了,将会删除旧的数据,10s后开始安装...
myztplanet
请输入zerotier-planet要使用的端口号,例如9994: 9993
请输入zerotier-planet的API端口号,例如3443: 3443
请输入zerotier-planet的FILE端口号,例如3000: 3000
是否自动获取公网IP地址?(y/n)y
获取到的IPv4地址为: 000.000.000.000
获取到的IPv6地址为:
是否使用上面获取到的IP地址?(y/n)y
---------------------------
使用的端口号为:9993
API端口号为:3443
FILE端口号为:3000
IPv4地址为:000.000.000.000
IPv6地址为:
---------------------------
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
安装完成
---------------------------
请访问 http://000.000.000.000:3443 进行配置
默认用户名:admin
默认密码:password
请及时修改密码
---------------------------
moon配置和planet配置在 /home/ubuntu/docker-zerotier-planet/data/zerotier/dist 目录下
moons 文件下载: http://000.000.000.000:3000/00000093caa675b0.moon?key=xxxxxxxxxxxxxxxx
planet文件下载: http://000.000.000.000:3000/planet?key=xxxxxxxxxxxxxxxx
---------------------------
请放行以下端口请:9993/tcp,9993/udp,3443/tcp,3000/tcp
---------------------------
放通端口
我使用腾讯云的安全组,如有 iptables、firewall 等配置请自行开通
修改默认的 Contractors 管理员密码
访问 http://00.00.00.00:3443 自己输入对应的 ip 和端口号
下载 Planet 文件
路径:./data/zerotier/dist
也可以使用官方提供的 http://000.000.000.000:3000/planet?key=xxxxxxxxxxxxxxxx 在 App 端可以导入 URL 链接,不过每次重新安装的 key 会改变,作用其实不大,使用前者下载文件并关闭 3000 端口安全性更高些
创建并配置虚拟网络
在控制平台中
输入自定义虚拟网络名称
创建完成后的界面
配置 IP 池
可以自定义也可以随机 保存之后
分发并替换客户端的 Planet 文件
Windows 系统
Planet 文件路径:C:\ProgramData\ZeroTier\One\Planet
(可能是隐藏路径)
替换后重新启动 Zerotier One 服务
安卓
安装第三方客户端:ZerotierFix
Linux
Planet 文件路径:/var/lib/zerotier-one/Planet
重启服务:sudo systemctl restart zerotier-one
客户端加入自建 Planet 中的虚拟网络
zerotier-one -q join xxxxxxxxxxxxxxxx
替换上级 Planet(自身需求)
默认自建的 Planet 的节点中会含有官方 Planet 作为上级 Planet,因此如果继续使用官方服务的话,自建的节点作为 Moon 卫星服务器仍然可以继续使用官方服务。 而我需要使用其他人自建的 Planet 行星根服务器,因此我将自建的 Planet 行星根服务器的上级 Planet 设置为其他人提供的 Planet 文件,即可实现。 过程如下:
停止 Docker 容器
docker stop myztplanet
替换自建 Planet 行星根服务器的 Planet 文件
重新启动 Docker 容器
docker start myztplanet
最终的结果像串串一样 客户端->我自建 Planet->别人自建 Planet->官方 Planet 所有的自建和官方服务都可以使用
最终效果
网络列表
2024.01.28 确认不可行
在之前的构想中,将 Planet 节点上再嫁接上级 Planet 节点,这个用法在后续的使用中被证明不可行。
在替换新的 Planet 后,原先加入的旧的 Planet 下的网络应该及时退出,否则无法成功连接(部分由于尚有缓存可以成功连上,随着时间的迁移和 IP 等网络环境的变更会逐渐不可用),且会影响新的 Planet 下的网络的加入(类似递归并发去连线,前面无法连上导致后面的被搁置)。
因此该构想被推翻 等待开发作者支持。