简介

ZeroTier可以使用官方的服务器来组建虚拟内网,但是由于官方的服务过慢,所以我们一般会自己来创建节点。有如下的两种节点:

  • Moon节点
    • 官方提供的自建节点方式,连接稳定
    • 有点类似于在VPS上做了一个中转节点(所以也叫Moon中转服务器)
    • 还是需要注册官方账号,虚拟网络的管理也在官方网站页面上
    • IOS无法使用
  • Planet节点
    • 核心还是ZeroTier One官方软件
    • 使用大神github.com/key-networks/ztncui制作的一个网页管理界面
    • 可以不再需要在官方网站注册,虚拟网络的管理也在自己的VPS上
    • 没有官方网络数量与设备连接数的限制
  • Moon节点与Planet节点的共同点
    • 都是需要先安装ZeroTier官方客户端到VPS
    • Planet节点可以不去手动安装,而直接用docker(本文没有介绍docker方式,可以自行网上搜索)

本文介绍了这两种节点的安装方式,实际使用中我选择的是Planet节点方式,如果没有很强迫症的要求建议使用moon节点方式

Linux上安装ZeroTier客户端

  • 客户端的安装与启动
# 安装ZeroTier客户端
# 安装完成后会自动启动客户端并加入开机启动
curl -s https://install.zerotier.com/ | sudo bash

# 查看ZeroTier客户端运行状态
# 返回active就是正常
systemctl status zerotier-one

# 如果没有自动启动可以使用如下命令启动、加入开机启动
systemctl start zerotier-one
systemctl enable zerotier-one

Moon节点服务器

VPS上的安装

# 下列的"xxxxxxxx"是上述第二步获得的Network ID
zerotier-cli join xxxxxxxx
  • 生成配置文件
# 进入配置文件夹生成配置文件
cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public >> moon.json
  • 编辑/var/lib/zerotier-one/moon.json配置文件的如下行加入公网IP与端口
"stableEndpoints": ["Server/9993"]
  • 生成签名文件
    • 执行这步会生成一个000000xxxx.moon的文件
zerotier-idtool genmoon moon.json
  • 将moon节点加入网络
# 创建moons.d文件夹
mkdir /var/lib/zerotier-one/moons.d
mv /var/lib/zerotier-one/000000xxxx.moon /var/lib/zerotier-one/moons.d/000000xxxx.moon

# 重启中转服务器
systemctl restart zerotier-one
  • 开启9993防火墙UDP端口

Windows客户端设置

  • 官网下载客户端并安装
  • 运行后加入虚拟网络
  • 使用自建的moon节点
# 下列命令中的xxxxxxxx即VPS上的ZeroTier节点ID
# 可以在VPS上运行zerotier-cli info查看
# 也可以在官网的Network管理页面查看
'C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat' orbit XXXXXXXX XXXXXXXX

# 使用如下命令查看是否添加成功
'C:\Program Files (x86)\ZeroTier\One\zerotier-cli.bat' listpeers

Linux客户端设置

# 使用moon节点
zerotier-cli orbit XXXXXXXX XXXXXXXX

# 查看moon节点是否添加成功
zerotier-cli listpeers

Planet节点服务器

VPS上的安装

  • 按照VPS上安装ZeroTier客户端的步骤先安装好客户端

  • 编译planet文件【可选】

    • 编译环境的安装
    apt install wget gcc g++ git nlohmann-json3-dev -y
    
    • 记录VPS上/var/lib/zerotier-one/identity.public/var/lib/zerotier-one/authtoken.secret下的两个字串(每台机器都不一样,根据自己的实际来)
    • 下载并编译配置文件
      • 编译可以在任意的linux机器上编译,没必要一定在vps上编译
      • 可以添加两个自己的服务器
    # 克隆仓库
    git clone https://github.com/zerotier/ZeroTierOne.git
    
    # 进入目录
    cd ZeroTierOne/attic/world/
    
    # 修改mkworld.cpp的代码(大概在85行左右)
    # 删除公共服务器,并修改为自己的服务器
    roots.push_back(World::Root());
    roots.back().identity = Identity("填写identity.public里的字符串");
    roots.back().stableEndpoints.push_back(InetAddress("服务器IPv4地址/9993"));
    roots.back().stableEndpoints.push_back(InetAddress("服务器IPv6地址/9993"));
    
    # 编译并生成planet文件
    source ./build.sh
    ./mkworld
    mv ./world.bin ./planet
    
    # 替换VPS上/var/lib/zerotier-one/planet文件
    cp planet /var/lib/zerotier-one/planet
    
    # 重启客户端
    systemctl restart zerotier-one.service
    
    • 注意:这个编译好的planet文件是要替换每个加入到此网络的planet文件的,所以一定要保存好
  • ztncui的安装

# 下载安装包
curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.6_amd64.deb

# 安装deb包
apt-get install ./ztncui_0.8.6_amd64.deb

# 添加环境变量设置网页访问端口
sh -c "echo 'HTTPS_PORT=3443' >> /opt/key-networks/ztncui/.env"
sh -c "echo 'ZT_TOKEN=authtoken.secret文件里的字符串' >> /opt/key-networks/ztncui/.env"
sh -c "echo 'NODE_ENV=production' >> /opt/key-networks/ztncui/.env"

# 启动ztncui
systemctl restart ztncui
  • 防火墙打开3443端口

虚拟网络的设置

  • 访问https://ServerIP:3443管理网络
    • 默认用户名为admin,密码为password
    • 第一次登陆后应修改密码
  • 创建虚拟网络(Add network)
  • 点击Easy setup设置虚拟网络IP地址

Windows客户端设置

  • 停用服务ZeroTierOneService
  • 用之前编译的planet替换客户端中的文件
  • 启用服务ZeroTierOneService
  • 安装客户端
  • 加入虚拟网络

Linux客户端设置

  • 按照VPS上安装ZeroTier客户端的步骤先安装好客户端
  • 用之前编译的planet替换客户端中的文件
  • 重启客户端
  • 运行后加入虚拟网络即可

zerotier-cli常用命令

# 查看本机信息
zerotier-cli info

# 显示所有的连接节点
zerotier-cli listpeers

# 显示所有连接的网络
zerotier-cli listnetworks

# 加入虚拟网络
zerotier-cli join <network ID>

# 离开虚拟网络
zerotier-cli leave <network ID>

# 加入一个moon节点(一般<world ID>和<seed>是相同的)
zerotier-cli orbit <world ID> <seed>

# 离开一个moon节点
zerotier-cli deorbit <world ID>

# 显示所有连接的moon节点
zerotier-cli listmoons

FAQ

apt显示密匙错误

这个错误一般是由于系统没有安装gnupg,安装上这个软件包即可通过源的密匙验证。

planet文件位置

  • windows的在C:\ProgramData\ZeroTier\One文件夹下
  • Linux的在/var/lib/zerotier-one文件夹下