搭建zerotier-planet行星根服务

利用docker-zerotier-planet项目自建服务实现优化内网穿透

Posted by 浅唱 on January 1, 2024

项目地址

Github

需求背景

  1. 官方的 Zerotier 服务提供的 planet 行星根服务器大多在海外,受到国内网络环境的影响常常无法快速连接上
  2. 官方允许自建 Moon 卫星服务器节点,但该节点仍然需要与 Planet 根节点进行交互,效果不太理想
  3. 官方的 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 下的网络的加入(类似递归并发去连线,前面无法连上导致后面的被搁置)。
因此该构想被推翻 等待开发作者支持。