Zerotier 是一个开源的软件平台,旨在简化虚拟专用网络 (VPN) 和软件定义网络 (SDN) 的部署。它允许用户通过互联网创建和管理其自己的私有网络,就像局域网 (LAN) 一样。
Zerotier 提供了一种点对点的网络连接方式,支持端到端加密,确保数据传输的安全性。用户可以在不同设备和操作系统之间快速建立安全的连接,适用于远程办公、物联网设备管理以及分布式团队合作等多种场景。通过其用户友好的界面和广泛的应用支持,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 | https://pugjs.org/api/express.html | 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 |
# 参考文献
Ztncui | ZeroTier network controller user interface
ZeroTier | Global Networking Solution for loT, SD-WAN, and VPN
浅谈如何搭建一个完全私有化的 ZeroTier - 哔哩哔哩