自建zerotier行星服务器(根服务器)

Zerotier的官方服务给予免费用户的额度越来越收紧了,目前新用户仅允许创建3个网络,总共10个节点,这很容易不够用了。

稍微研究了一下,发现自建zerotier planet服务器其实是非常简单的一件事情,为方便查阅,将过程记录如下。

项目地址:https://github.com/xubiaolin/docker-zerotier-planet

自建zerotier planet的好处

1、可以不受网络数量和节点数量的限制

2、在境内自建根服务器,理论上可以实现节点间的秒连,而官网的zerotier在网络环境发生变化时,通常需要3-5分钟才能重新打通

3、与官网一样,节点间直连后,不会占用planet服务器本身的流量

前提准备条件

国内云服务,1台带有公网IP的Linux服务器。至少1核1G的配置。

zerotier planet安装过程

以Debian系的Linux为例(我的服务器是ubuntu)。

1、开放端口

包括9994/tcp、9994/udp、3443/tcp、3000/tcp。注意,9994除了tcp还要开放udp,不要遗漏。这些端口也可以自定义,以避免与既有的服务冲突。

2、安装Git、Docker

apt update
apt install git -y
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
service docker start

注意,由于服务器在国内,所以上面使用了阿里云的镜像来安装docker。

接着配置Docker的加速镜像(注意这是三个命令):

sudo tee /etc/docker/daemon.json <<EOF
{
    "registry-mirrors": [
        "https://docker.mirrors.aster.edu.pl",
        "https://docker.mirrors.imoyuapp.win"
    ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

3、安装docker-zerotier-planet项目

克隆项目库:

git clone https://ghproxy.imoyuapp.win/https://github.com/xubiaolin/docker-zerotier-planet.git

同样,这里使用了Github镜像站,以解决国内访问Github的问题。

进入项目目录并执行安装。

cd docker-zerotier-planet
./deploy.sh

之后根据提示操作,首次选择“1”即安装。在提示输入端口号的时候,不要直接回车,而是手动输入一下端口号,默认是9443、3443、3000,可以根据需要调整,但相应地,防火墙那里也要对应放开。

服务器IP建议选择手动输入。如果服务器是ipv4/ipv6双栈,自动获取可能只获取到1个。手动可以依次输入ipv4和ipv6。

4、下载planet和moon文件

安装成功后的界面上,会提示planet文件和moon文件的位置和下载地址。

可以通过直接下载或winscp访问服务器,将这两个文件下载到本地。今后的客户端配置,需要用到planet文件(moon文件其实用不上)。

5、访问管理页面并创建网络

安装成功之后,则可以通过http://服务器IP:3443来访问后台了。默认用户名admin,默认密码password,首次登录需要修改一下密码。

使用nginx反向代理+certbot自动配置证书,为后台页面设置好https访问,以防止密码泄漏。(此处不详细展开)

点击管理页面顶部的“network”,并点击“Add network”。输入易于分辨的名称,点击“Create Network”。

进入刚刚创建的Network,记录Network id(16位的十六进制字符串)备用。

点击Network页面顶部的“Easy Setup”,单击“Generate network address”,可以创建一个子网。可以反复点击以创建自己心仪的子网。满意后,点击“Submit”。

此时管理页面配置完毕。

客户端安装和配置

1、客户端准备

客户端需要准备3个东西:zerotier安装程序、planet文件、network ID。

2、安装zerotier

直接安装zerotier,安装后,它会自动运行,右下角托盘中会出现一个黄色的zerotier图标。如果没有这个图标,那么可以手动运行一下zerotier即可重新出现。

3、替换planet

由于我们要使用自己的planet,因此需要覆盖官方的planet文件。

以Windows为例,进入c:\programdata\zerotier\one目录,用自己的planet文件覆盖原来官方的planet文件(可以先备份官方的文件)。

之后开始菜单,运行services.msc,打开“服务”,找到zeroter-one服务,右键重启它(或者手动停止它,再重新运行它)。

4、加入自创建的网络

两个方法。

1)右键托盘中的zerotier图标,单击join,输入network ID。

2)管理员模式运行powershell,执行:

zerotier-cli.bat join NETWORK_ID

提示200 join ok说明加入成功。

过程中Windows可能会弹出一个添加网络的提示,点击确定即可。

但注意,此时网络还没有生效,因为需要管理员批准。

5、批准节点

管理员登录管理页面,进入创建的Network,可以看到新加入的节点。

和需要加入的人沟通好,确认加入设备的Address后,勾选Authorized列的小方框,即可完成批准。

6、客户端查看IP

这时候客户端就已经获得了一个之前管理页面里设置好的子网下的IP。右键托盘zerotier图标, 在network ID菜单中,找到managed addresses,可以确认自己被分配的IP。

同样的方法加入多个客户端,接下来它们就可以通过被分配的IP互相访问了。