一、简介
ZeroTier 是一个跨平台、虚拟局域网软件(不需要公网 IP,不依赖服务端网络性能)

1、注册(免费套餐能连接 25个设备)
https://accounts.zerotier.com/auth/realms/zerotier/protocol/openid-connect/registrations?client_id=zt-central&redirect_uri=https%3A%2F%2Fmy.zerotier.com%2Fapi%2F_auth%2Foidc%2Fcallback&response_type=code&scope=openid+profile+email+offline_access&state=state
2、下载安装
https://www.zerotier.com/download/
https://download.zerotier.com/
https://github.com/kaaass/ZerotierFix #修改官方apk,允许加入moon
3、管理
https://my.zerotier.com/network
二、搭建私有planet(解除官方的设备连接数限制;提升手机客户端连接的稳定性)
planet:核心角色,官方不允许自建私有,zerotier 的行星服务器,用于管理全球所有的 zerotier 客户端的地址信息,帮助建立客户端间的直接链接,以及在无法建立直接链接时,作为中继服务器转发设备间的流量。
https://zhuanlan.zhihu.com/p/573746661
1、搭建私有 planet
docker run -d \
--name zt-ui \
-v /home/docker/zt-ui/zerotier-one:/var/lib/zerotier-one \
-v /home/docker/zt-ui/ztncui/etc:/opt/key-networks/ztncui/etc \
-p 4000:4000 \
-p 9993:9993 \
-p 9993:9993/udp \
-e MYADDR=1.1.1.1 \ #1.1.1.1公网
-e HTTP_PORT=4000 \
-e HTTP_ALL_INTERFACES=yes \
-e ZTNCUI_PASSWD=admin123 \
--restart=always \
hausen1012/ztncui
docker exec -it zt-ui bash /tmp/patch.sh && \ #生成 planet 文件
docker restart zt-ui
docker exec -it zt-ui zerotier-cli listmoons #测试
# 显示如下内容则表示搭建成功
[
{
"id": "00000004e3b1b4b0",
"roots": [
{
"identity": "04e3b1b4b0:0:ea0c548b45efcc701c052305f06568c749a4647b9a5b111e2b372c05f7c3ed56ae1009c29cb1aa51d95057bf1b65b3a2f7b01d129437f6b72efd08f68281fb52",
"stableEndpoints": [
"1.1.1.1/9993"
]
}
],
"signature": "b4f539ef93e198203d9e270c155d091769408ff98489d83bcf6444d2a95112ca7369138b98d42512caa3c878f3eff2c27ecada28f549ea19e3a407e71bbeb008d51f6ba92af17e8b6e4c1b8eacbd4abc42f0f639746ea924cffb99b539f94e2b",
"timestamp": 1665642068786,
"updatesMustBeSignedBy": "7fcb120079801a1ddde8c1fb6657365351bca7279e8470728f4cf01fb5efc81b57cde03338b4ea76dfd39570f74f2654d8d52a22613e77ed2e4cbb46a648a42d",
"waiting": false
}
]
2、访问 http://公网ip:4000,账号密码:admin/admin123
3、客户端配置
docker run -d \
--name=zt-cli \
--device=/dev/net/tun \
--net=host \
--cap-add=NET_ADMIN \
--cap-add=SYS_ADMIN -d \
-v /home/docker/zt-client/zerotier-one:/var/lib/zerotier-one \
--restart unless-stopped \
hausen1012/zerotier
将服务器下载的 planet 文件上传到客户端的 /home/docker/zt-client/zerotier-one 目录
docker restart zt-cli #重启客户端
docker exec -it zt-cli zerotier-cli listpeers #查看 planet
docker exec -it zt-cli zerotier-cli join 8b8b9ed58a10bd45 #加入网络
把服务器上的planet文件覆盖客户端C:\ProgramData\ZeroTier\One
net start ZeroTierOneService
net stop ZeroTierOneService
zerotier-cli.bat listpeers #查看planet
C:\ProgramData\ZeroTier\One\zerotier-one_x64.exe -q listpeers #查看planet
教程使用Ubuntu Server 24.04),OpenSSH、WinSCP、Xshell或别的任意一款远程工具
##zerotier安全组说明
#ztncui Web控制面板使用的端口TCP:3443
# Zerotier节点与控制器通讯的端口TCP:9993
#MOON节点与控制器通讯的中继端口UDP:9993
# 更新服务器缓存和软件依赖
sudo apt update
sudo apt upgrade
# 下载c++需要的编译环境
sudo apt install gcc gcc-c++ vim wget git -y
# 如果需要使用json编辑器
sudo apt install json-devel -y
#下载安装ZeroTier和ztncui
#ztncui 需要在同一台机器上安装ZeroTier One 。它将作为网络控制器运行以建立 ZeroTier 网络。
#ztncui 是在 Linux 平台上开发的,并且期望 ZT 主目录位于/var/lib/zerotier-one。
curl -s https://install.zerotier.com | sudo bash
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
sudo sh -c "echo ZT_TOKEN=`sudo cat /var/lib/zerotier-one/authtoken.secret` > /opt/key-networks/ztncui/.env" #authtoken.secret里的字符串
sudo sh -c "echo HTTPS_HOST=127.0.0.1 >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo HTTPS_PORT=3443 >> /opt/key-networks/ztncui/.env" #默认是 TCP port 3000
sudo sh -c "echo NODE_ENV=production >> /opt/key-networks/ztncui/.env"
#sudo sh -c "echo "ZT_ADDR=127.0.0.1:9993 >> /opt/key-networks/ztncui/.env" #默认是 localhost:9993
#sudo sh -c "echo HTTP_ALL_INTERFACES=yes >> /opt/key-networks/ztncui/.env" #使应用程序监听所有接口的 HTTP 请求,http是未加密的
#授予权限
sudo chmod 400 /opt/key-networks/ztncui/.env
sudo chown ztncui.ztncui /opt/key-networks/ztncui/.env
sudo systemctl restart ztncui
#访问ztncui的WebUI,创建网络ID
https://192.168.1.7:3443(举例)
首次登录账号:admin,密码:password
#查看字符串
sudo zerotier-cli join 网络ID
sudo more /var/lib/zerotier-one/identity.public
#获取ZeroTier源码,切换文件夹目录,修改mkworld.cpp
cd ZeroTierOne/attic/world
sudo vim mkworld.cpp
// 自己的
roots.push_back(World::Root());
roots.back().identity = Identity("字符串"); #根服务器的identity.public里的字符串C:\ProgramData\ZeroTier\One\identity.public或/var/lib/zerotier-one/identity.public
roots.back().stableEndpoints.push_back(InetAddress("14.103.249.84/9993"));#根服务器的公网ipv4
//roots.back().stableEndpoints.push_back(InetAddress("2407:c080:801:fffe::3ccc:f8e4/9993"));#根服务器的公网ipv6
#编译修改好的mkworld.cpp
source ./build.sh
./mkworld
mv ./world.bin ./planet
#将编译好的planet文件分发到每个设备,重启服务生效
cp -r ./planet /var/lib/zerotier-one
Windows Planet文件位置:C:\ProgramData\ZeroTier\One
Linux Planet文件位置:/var/lib/zerotier-one
三、搭建moon
moon:官方允许自建私有,作为离客户端更近的中继服务器存在,可以使转发的效率更高,需要一个具有公网 IP 地址的服务器以及开放 UDP 9993 端口,是通过 UDP 打洞实现的。
1、 Linux下搭建moon
curl -s https://install.zerotier.com | sudo bash
cd /var/lib/zerotier-one
zerotier-idtool initmoon identity.public >>moon.json
"stableEndpoints": ["60.204.248.228/9993","2407:c080:801:fffe::3ccc:f8e4/9993"] #60.204.248.228和2407:c080:801:fffe::3ccc:f8e4是你服务器公网IP的ip4和ip6,9993是UDP端口(防火墙注意放行)
sudo zerotier-idtool genmoon moon.json
mkdir moons.d
mv 000000ddb0158c86.moon /moons.d/ #请输入自己的文件名,或者用tab自动补全
/etc/init.d/zerotier restart
zerotier-cli listpeers
2、 Windows下搭建moon
注意如果服务器是win server系统,只能选择1.6.6版本安装,官方的后续版本都不支持server系统。
https://download.zerotier.com/RELEASES/1.6.6/dist/ZeroTierOne.msi
cd C:\ProgramData\ZeroTier\One\
zerotier-one_x64.exe -i initmoon identity.public >>moon.json
"stableEndpoints": ["60.204.248.228/9993","2407:c080:801:fffe::3ccc:f8e4/9993"] #60.204.248.228和2407:c080:801:fffe::3ccc:f8e4是你服务器公网IP的ip4和ip6,9993是UDP端口(防火墙注意放行)
#生成MOON签名,如果未生成相应文件,检查上一步的标点符号""格式是否正确,最好从原文中复制
zerotier-one_x64.exe -i genmoon moon.json
md moons.d
xcopy 0000005d45b4cf37.moon C:\ProgramData\ZeroTier\One\moons.d\
#运行下列命令重启服务生效,或打开任务管理器选择服务ZeroTierOneService重启即可
net stop ZeroTierOneService
net start ZeroTierOneService
#查询<ZeroTier Moon ID>,以便客户端连接,5d45b4cf37就是id
zerotier-one_x64.exe -q info
200 info 5d45b4cf37 1.6.6 ONLINE
3、客户端配置
window客户端
https://download.zerotier.com/RELEASES/1.14.1/dist/ZeroTierOne.msi
cd C:\ProgramData\ZeroTier\One\
zerotier-one_x64.exe -q orbit 5d45b4cf37 5d45b4cf37 #连接moon,zerotier-cli orbit <world ID> <seed>
zerotier-one_x64.exe -q listpeers #检查是否成功连接moon服务器
安卓手机客户端
https://github.com/kaaass/ZerotierFix/releases
保存服务器生成的0000005d45b4cf37.moon到安卓手机,然后点击moon入轨,从文件导入即可,若成功可从结点列表看到moon中转信息。