Zerotier服务器及客户端配置指南
Zerotier服务器及客户端配置指南
Zerotier是一个开源的软件平台,旨在简化虚拟专用网络(VPN)和软件定义网络(SDN)的部署。它允许用户通过互联网创建和管理其自己的私有网络,就像局域网(LAN)一样。Zerotier提供了一种点对点的网络连接方式,支持端到端加密,确保数据传输的安全性。用户可以在不同设备和操作系统之间快速建立安全的连接,适用于远程办公、物联网设备管理以及分布式团队合作等多种场景。
Planet 服务端搭建
官方的 Planet 根服务器在境外,加速不稳定。理论上可以搭建 MOON 服务器解决这一问题,但 MOON 的解析仍然依赖于 Planet ,经常出现内网解析不到 MOON 的情况,使设备的连接不稳定。
搭建 Zerotier 的 Planet 服务器可以提高网络稳定性,减少对官方服务器的依赖,降低数据传输的延迟,增强网络性能和安全性。私有化根服务器允许用户更好地控制和管理网络流量,并根据特定需求自定义配置。这使得 Zerotier 网络在高性能和高安全性需求的场景中更加稳定、高效。
本文将使用key-networks/ztncui组件搭建私有 Planet 服务端并配置客户端。
所需的相关素材如下:
- 云服务器一台(使用的配置如下,如采用了不同的配置,请自行根据情况调整参数)
- 拥有固定公网 IP
- 操作系统 Ubuntu 24.04
- CPU 2 vCore
- 内存 1 GB
- 带宽 200 Mbps
服务端配置
安装 Zerotier-one (方案 2 选 1)
Debian 和基于 RPM 的发行版(包括 Debian、Ubuntu、CentOS、RHEL、Fedora 等 Linux 发行版)可以通过 Zerotier 提供的官方途径进行安装,官网共提供了两种方案,可以自选其一。
方案一会更简单一些:
curl -s https://install.zerotier.com | sudo bash
也可以采用方案二,使用 GPG 进行更加安全的安装:
curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/main/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi
安装 Ztncui 组件
Ztncui 组件安装可以结合自身 Planet 服务器情况参考Ztncui 官方网站。
curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.14_amd64.deb
sudo apt install ./ztncui_0.8.14_amd64.deb
Ztncui 组件配置
Ztncui 可以配置的属性如下,可根据自身需求选择。
是否需要 | 参数名 | 描述 | 缺省值 |
---|---|---|---|
Y | ZT_TOKEN | Zerotier-one 的 Token 配置 | |
N | ZT_ADDR | Zerotier-one API 端口 | localhost:9993 |
Y | NODE_ENV | production | |
N | HTTP_ALL_INTERFACES | HTTP 是否监听所有来源的请求 | 无缺省值 |
N | HTTP_PORT | HTTP_PORT | 3000 |
N | HTTPS_HOST | HTTPS_HOST | 无缺省值 |
N | HTTPS_PORT | HTTPS_PORT | 无缺省值 |
Y | MYADDR | Planet 服务器 IP 地址 |
样例中的ServerIP需要替换为搭建 Planet 服务器的实际 IP 地址。
sudo sh -c "echo ZT_TOKEN=`sudo cat /var/lib/zerotier-one/authtoken.secret`> /opt/key-networks/ztncui/.env"
sudo sh -c "echo NODE_ENV=production >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo HTTP_ALL_INTERFACES=yes >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo HTTP_PORT=3000 >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo HTTPS_PORT=3443 >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo MYADDR=ServerIP >> /opt/key-networks/ztncui/.env"
Ztncui 运行
进行配置后将.env文件进行权限配置,并将所有权转移给ztncui用户保证其可以访问。通过重启 Ztncui 服务应用配置。
sudo chmod 400 /opt/key-networks/ztncui/.env
sudo chown ztncui.ztncui /opt/key-networks/ztncui/.env
sudo systemctl restart ztncui
Ztncui WebUI 界面配置
进入http://ServerIP:HTTP_PORT,显示如下界面说明已经完成了很大一部分啦!
默认账户密码如下,首次登录后会强制要求修改密码。
- 账号:admin
- 密码:password
点击顶部 Add Network 建立网络。命名后会自动跳转到该虚拟网络的管理页面。之后的操作会在该虚拟网络的管理界面进行。
使用管理界面中的 Easy Setup 配置 IP 地址段。配置正确的第 1 个参数后点击第 2 或 3 个参数的框会自动填充。
Ztncui 私有化 Planet 配置文件生成
使用搭建的 Zerotier-One 客户端加入在 WebUI 中建立的虚拟网络,其中VirtualNetworkID为管理页面上自定义的虚拟网络命名右侧的 16 进制 ID 值。
sudo zerotier-cli join VirtualNetworkID
查看并保存验证密钥对的公钥IdentPubkey,保留用于后续制作 Planet 解析文件。
sudo cat /var/lib/zerotier-one/identity.public
下载 Zerotier 工具包,用于后续使用官方文件用于编译 Planet 解析文件。
git clone https://github.com/zerotier/ZeroTierOne.git
cd ./ZeroTierOne/attic/world
随后通过 Vim 编辑mkworld.cpp,注释掉一组官方服务器并在相应位置填入正在建立的私有 Planet 服务器的信息。下述代码中的IdentPubkey以及ServerIP请自行替换。
roots.push_back(World::Root());
roots.back().identity = Identity("IdentPubkey");
roots.back().stableEndpoints.push_back(InetAddress("ServerIP/9993"));
roots.back().stableEndpoints.push_back(InetAddress("ServerIPv6/9993"));// 如果没有公网 IPv6 地址,请不要添加这一行
编译全新的私有 Plannet 配置文件!
source ./build.sh
./mkworld
mv ./world.bin ./planet
私有化 Planet 配置文件移动到 Zerotier-One 配置文件夹
将私有化 Planet 配置文件移到 Zerotier-One 配置文件夹,并重启 Zerotier-One 服务。
推荐使用 sftp 下载该文件保留备用,用于配置 Zerotier-one 客户端。
cp -r ./planet /var/lib/zerotier-one
sudo systemctl restart zerotier-one
客户端配置
私有化 Planet 配置
将私有化 Planet 配置文件置入各自的 Zerotier-One 配置文件夹中,备份并替换原有 planet 文件。各个系统 planet 文件默认文件夹如下:
- C:\ProgramData\ZeroTier\One
- /var/lib/zerotier-one
- /Library/Application\ Support/ZeroTier/One/
- /etc/config/zero/planet
重启 Zerotier-cli 服务
重启 Zerotier-cli 服务应用配置文件。
net stop ZeroTierOneService
net start ZeroTierOneService
sudo systemctl restart zerotier-one
加入服务器
使用管理员权限加入虚拟网络。请替换为自己的VirtualNetworkID。
zerotier-cli join VirtualNetworkID
Moon 服务端搭建
建立 ZeroTier 的 Moon 服务器可以有效降低内网穿透时的延迟,降低区域跨越导致的高延迟问题,从而提供更好的网络体验。
通过自建服务器,可以将服务器放置在更靠近设备的位置,从而提高网络性能。此外,服务器还能为对应区域的设备提供更高的稳定性和带宽,减少网络中断的风险,并增强对服务器配置和管理的灵活性与控制权。
服务端配置
相对于 Planet 服务器,Moon 服务器的搭建会简单很多,官方的工具已经提供了成熟的指令。所需的相关素材如下:
- 云服务器一台(使用的配置如下,如采用了不同的配置,请自行根据情况调整参数)
- 拥有固定公网 IP
- 操作系统 Debian 12 x86_64
- RAM 1GB
安装 Zerotier-one
安装方式可以参考1.1.1 安装 Zerotier-one (方案 2 选 1)中的方法。
Zerotier-cli 加入虚拟网络
安装后即可对 Zerotier 开始进行配置了,先作为客户端加入网络中,下面命令中的VirtualNetworkID请替换为要加入的虚拟网络的 ID。申请加入后记得在管理 Web 页面通过请求。
sudo zerotier-cli join VirtualNetworkID
200 join OK
Moon 配置模板生成
通过官方工具生成moon.json模板。
cd /var/lib/zerotier-one
sudo su
zerotier-idtool initmoon identity.public >> ./moon.json
exit
Moon 配置模板编辑
使用 Vim 文本编辑器在moon.json模板文件中的"stableEndpoints": []中填入服务器的固定 IP 地址及端口(默认为 9993):"stableEndpoints": ["IP/9993"]
sudo vim moon.json
Moon 配置文件生成及应用
使用官方工具生成 Moon 配置文件,此时会返回生成的 Moon 配置文件文件名及其对应生成时间戳。
sudo zerotier-idtool genmoon moon.json
wrote 000000xxxxxxxxxx.moon (signed world with timestamp yyyyyyyyyyyyy)
将生成的文件移入文件夹moon.d中,并重启 Zerotier-one 服务。
sudo mkdir moons.d
sudo mv ./000000xxxxxxxxxx.moon ./moons.d
sudo systemctl restart zerotier-one
客户端配置
客户端配置就更简单啦~只需要标记 Moon 服务器所在的节点是轨道服务器就可以啦。Linux、Windows 或 MacOS 客户端均可以进入命令行使用以下指令进行配置(均需要 root / 管理员权限),其中moonididid需要替换为 Moon 服务器加入虚拟网络时的节点 ID。
# Linux:
sudo zerotier-cli orbit moonididid moonididid
# Windows:
zerotier-cli orbit moonididid moonididid
核验 Moon 服务器配置
使用 listpeers 查看对应服务器 ip 的节点是否被标记为MOON,也可以直接使用 listmoons 指令。
zerotier-cli listpeers
zerotier-cli listmoons
Zerotier 常用操作指令
服务端
# 启动 Zerotier 服务
sudo systemctl start zerotier-one
# 停止 Zerotier 服务
sudo systemctl stop zerotier-one
# 重启 Zerotier 服务
sudo systemctl restart zerotier-one
# Zerotier 服务状态查询
sudo systemctl status zerotier-one
---
# 列为开机启动服务
sudo systemctl enable zerotier-one
# 取消开机启动
sudo systemctl disable zerotier-one
客户端
# Zerotier 状态查看
zerotier-cli status
# Zerotier 加入、离开虚拟网络
zerotier-cli join xxxxxxxxxxxxxxxx
zerotier-cli leave xxxxxxxxxxxxxxxx
# Zerotier 加入的虚拟网络列表
zerotier-cli listnetworks