🔥 还在忍受 Zerotier 官方服务器延迟高、不稳定、限制设备使用?想拥有更快、更安全、完全可控的内网穿透体验? 本期视频带来超详细的 Zerotier 私有 PLANET 服务器保姆级部署教程,
手把手教你从零开始搭建属于自己的 PLANET 节点!告别官方服务器,完全可控私有化部署,突破官方设备限制,让你想加多少设备就加多少设备。
🎯 本教程适合谁?
* 需要稳定高速内网穿透/异地组网的用户 (访问NAS、远程桌面、联机游戏等)
* 对 Zerotier 官方节点速度不满意,想要自建Zerotier服务器的
* 注重数据安全和网络隐私,希望流量更可控
* 技术小白也能跟着操作!(UP主已把踩过的坑都填平了)
主要内容分为:
ZeroTier PLANET 5分钟 快速私有化部署(docker)教程
ZeroTier(及控制台) 发布教程
服务端及客户端使用教程及演示
服务器选择指南(想要ZeroTier 性能最强,那么服务器选择非常重要)
ZeroTier 与其他国产p2p内网穿透
🚀 私有化部署(PLANET)对比官方的优势:
⚡ *显著提升连接速度和稳定性!** 告别卡顿和延迟,完全告别官方服务器。(自建moon节点任然会与官方PLANET 节点通信)
🔒 *增强安全性与隐私性!** 所有节点掌握在自己手中。
🛡️ *网络自主可控!** 不再依赖第三方公共服务器。
💰 *依然是免费的!** (服务器成本需自行承担,通常非常低)
💰*突破设备限制!** 让你随心所欲加设备,创建网络
项目地址:https://gitee.com/little-dark-tony/docker-zerotier-palnet
ZZeroTier PLANET 快速私有化部署(docker)教程
服务器配置说明:
docker部署教程
安装docker
见本站docker安装教程:https://halo.blog360.sbs/archives/dockeran-zhuang-jiao-cheng
ZeroTier 镜像下载容器启动
下载项目源码
官方地址
git clone https://gitee.com/little-dark-tony/docker-zerotier-palnet.git
执行安装脚本
进入项目目录
cd docker-zerotier-planet
运行 deploy.sh
脚本
./deploy.sh
根据提示来选择即可,操作完成后会自动部署
欢迎使用zerotier-planet脚本,请选择需要执行的操作:
1. 安装
2. 更新
其他任意键退出
整个脚本预计需要 3-10 分钟,具体需要看网络与机型
过程中可能出现问题:
alpinelinux.org包下载失败,原因为镜像源不可用
=> ERROR [builder 4/5] RUN mkdir -p /var/cache/apk && chmod 777 /var/cache/apk && sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories 1.3s
------
> [builder 4/5] RUN mkdir -p /var/cache/apk && chmod 777 /var/cache/apk && sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories && apk update && mkdir -p /usr/include/nlohmann/ && cd /usr/include/nlohmann/ && wget https://ghproxy.markxu.online/https://github.com/nlohmann/json/releases/download/v3.10.5/json.hpp && apk add --no-cache git python3 npm make g++ zerotier-one linux-headers && mkdir /app -p && cd /app && git clone --progress https://ghproxy.markxu.online/https://github.com/key-networks/ztncui.git && cd /app/ztncui/src && cp /app/patch/binding.gyp . && echo "开始配置npm环境" && npm install -g --progress --verbose node-gyp --registry=https://registry.npmmirror.com && npm install --registry=https://registry.npmmirror.com && echo 'HTTP_PORT=3443' >.env && echo 'NODE_ENV=production' >>.env && echo 'HTTP_ALL_INTERFACES=true' >>.env && echo "ZT_ADDR=localhost:9995" >>.env && echo "9995" >/app/zerotier-one.port && cp -v etc/default.passwd etc/passwd:
0.457 fetch https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.17/main/x86_64/APKINDEX.tar.gz
0.885 fetch https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.17/community/x86_64/APKINDEX.tar.gz
0.887 WARNING: updating and opening https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.17/main: Permission denied
1.217 WARNING: updating and opening https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.17/community: Permission denied
修改Dockerfile为阿里mirrors.aliyun.com或者其他国内镜像源
ghproxy.markxu.online github加速代理不可以。
=> ERROR [builder 4/5] RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk update && mkdir -p /usr/include/nlohmann/ && cd /usr/i 2.4s
------
> [builder 4/5] RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk update && mkdir -p /usr/include/nlohmann/ && cd /usr/include/nlohmann/ && wget https://ghproxy.markxu.online/https://github.com/nlohmann/json/releases/download/v3.10.5/json.hpp && apk add --no-cache git python3 npm make g++ zerotier-one linux-headers && mkdir /app -p && cd /app && git clone --progress https://ghproxy.markxu.online/https://github.com/key-networks/ztncui.git && cd /app/ztncui/src && cp /app/patch/binding.gyp . && echo "开始配置npm环境" && npm install -g --progress --verbose node-gyp --registry=https://registry.npmmirror.com && npm install --registry=https://registry.npmmirror.com && echo 'HTTP_PORT=3443' >.env && echo 'NODE_ENV=production' >>.env && echo 'HTTP_ALL_INTERFACES=true' >>.env && echo "ZT_ADDR=localhost:9995" >>.env && echo "9995" >/app/zerotier-one.port && cp -v etc/default.passwd etc/passwd:
0.463 fetch https://mirrors.aliyun.com/alpine/v3.17/main/x86_64/APKINDEX.tar.gz
1.202 fetch https://mirrors.aliyun.com/alpine/v3.17/community/x86_64/APKINDEX.tar.gz
2.250 v3.17.10-89-gdbdf15a18fd [https://mirrors.aliyun.com/alpine/v3.17/main]
2.250 v3.17.10-83-g9fde517a01c [https://mirrors.aliyun.com/alpine/v3.17/community]
2.250 OK: 17824 distinct packages available
2.346 wget: bad address 'ghproxy.markxu.online'
修改代理源或者直接访问下载:
国内代理源可以去2025年07月更新!18个Github镜像站,国内更快部署下载或者Github Proxy 文件代理加速修改可用镜像源
ZeroTierOne核心部件丢失
=> ERROR [builder 5/5] RUN cd /app && git clone --progress https://gh.bugdey.us.kg/https://github.com/zerotier/ZeroTierOne.git --depth 1 && zerotier-one -d && sleep 5s 53.4s ------ > [builder 5/5] RUN cd /app && git clone --progress https://gh.bugdey.us.kg/https://github.com/zerotier/ZeroTierOne.git --depth 1 && zerotier-one -d && sleep 5s && ps -ef |grep zerotier-one |grep -v grep |awk '{print $1}' |xargs kill -9 && cd /var/lib/zerotier-one && zerotier-idtool initmoon identity.public >moon.json && cd /app/patch && python3 patch.py && cd /var/lib/zerotier-one && zerotier-idtool genmoon moon.json && mkdir moons.d && cp ./*.moon ./moons.d && cd /app/ZeroTierOne/attic/world/ && sh build.sh && sleep 5s && cd /app/ZeroTierOne/attic/world/ && ./mkworld && mkdir /app/bin -p && cp world.bin /app/bin/planet && TOKEN=$(cat /var/lib/zerotier-one/authtoken.secret) && echo "ZT_TOKEN=$TOKEN">> /app/ztncui/src/.env:
0.316 Cloning into 'ZeroTierOne'...
2.105 remote: Enumerating objects: 1497, done.
remote: Counting objects: 100% (1497/1497), done.
remote: Compressing objects: 100% (1192/1192), done.
remote: Total 1497 (delta 253), reused 1128 (delta 215), pack-reused 0 (from 0)
Receiving objects: 100% (1497/1497), 9.57 MiB | 264.00 KiB/s, done.
Resolving deltas: 100% (253/253), done.
45.03 修改后的moon
45.03 {'id': 'cacc42ed55', 'objtype': 'world', 'roots': [{'identity': 'cacc42ed55:0:a25e32013f135605e3445af56834e635e4482826cc40e030eb9bb5729b63f015c469d201578cfb38329445a56e71e87ef2f906516c2dc5945457f35d0803bd42', 'stableEndpoints': ['1.1.1.1/9995']}], 'signingKey': 'e9646b76f7975c83654f68ca51e3218dd86bd3d19491fa8e558d41beacbe3e0a0fee552578c5127df107ad3cf93bc04023b9b9f9b653d17e049592bed8ebb5ed', 'signingKey_SECRET': '5ad947f13202dd75ddb4fceed73fcb9ea7a30fa10e5a7d6c578daa13c7c57d290ce9faf244523a6d5414f61108cd979893633a0b91c294783c6a38fed07ab9c1', 'updatesMustBeSignedBy': 'e9646b76f7975c83654f68ca51e3218dd86bd3d19491fa8e558d41beacbe3e0a0fee552578c5127df107ad3cf93bc04023b9b9f9b653d17e049592bed8ebb5ed', 'worldType': 'moon'}
45.05 wrote 000000cacc42ed55.moon (signed world with timestamp 1752806183405)
45.06 cc1plus: fatal error: ../../node/C25519.cpp: No such file or directory
45.06 compilation terminated.
53.27 mkworld.cpp:46:10: fatal error: node/C25519.hpp: No such file or directory
53.27 46 | #include <node/C25519.hpp>
53.27 | ^~~~~~~~~~~~~~~~~
53.27 compilation terminated.
ZeroTierOne默认下载为dev分支可能是bug或者更新了给核心部件C25519.hpp没了,clone指定版本tag --branch 参数
添加--branch 1.14.2 最新tag版本到git命令中
调整完成DockerFile
FROM alpine:3.17 as builder
ARG ZT_PORT
ENV TZ=Asia/Shanghai
WORKDIR /app
ADD . /app
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update\
&& mkdir -p /usr/include/nlohmann/ && cd /usr/include/nlohmann/ && wget https://github.com/nlohmann/json/releases/download/v3.10.5/json.hpp \
&& apk add --no-cache git python3 npm make g++ zerotier-one linux-headers\
&& mkdir /app -p && cd /app && git clone --progress https://github.com/key-networks/ztncui.git\
&& cd /app/ztncui/src \
&& cp /app/patch/binding.gyp .\
&& echo "开始配置npm环境"\
&& npm install -g --progress --verbose node-gyp --registry=https://registry.npmmirror.com\
&& npm install --registry=https://registry.npmmirror.com\
&& echo 'HTTP_PORT=3443' >.env \
&& echo 'NODE_ENV=production' >>.env \
&& echo 'HTTP_ALL_INTERFACES=true' >>.env \
&& echo "ZT_ADDR=localhost:${ZT_PORT}" >>.env\
&& echo "${ZT_PORT}" >/app/zerotier-one.port \
&& cp -v etc/default.passwd etc/passwd
RUN cd /app && git clone --branch 1.14.2 --progress https://github.com/zerotier/ZeroTierOne.git --depth 1\
&& zerotier-one -d && sleep 5s && ps -ef |grep zerotier-one |grep -v grep |awk '{print $1}' |xargs kill -9 \
&& cd /var/lib/zerotier-one && zerotier-idtool initmoon identity.public >moon.json\
&& cd /app/patch && python3 patch.py \
&& cd /var/lib/zerotier-one && zerotier-idtool genmoon moon.json && mkdir moons.d && cp ./*.moon ./moons.d \
&& cd /app/ZeroTierOne/attic/world/ && sh build.sh \
&& sleep 5s \
&& cd /app/ZeroTierOne/attic/world/ && ./mkworld \
&& mkdir /app/bin -p && cp world.bin /app/bin/planet \
&& TOKEN=$(cat /var/lib/zerotier-one/authtoken.secret) \
&& echo "ZT_TOKEN=$TOKEN">> /app/ztncui/src/.env
FROM alpine:3.17
WORKDIR /app
COPY --from=builder /app/ztncui /app/ztncui
COPY --from=builder /app/bin /app/bin
COPY --from=builder /app/zerotier-one.port /app/zerotier-one.port
COPY --from=builder /var/lib/zerotier-one /var/lib/zerotier-one
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update\
&& apk add --no-cache npm zerotier-one
VOLUME [ "/app","/var/lib/zerotier-one" ]
CMD /bin/sh -c "cd /var/lib/zerotier-one && ./zerotier-one -p`cat /app/zerotier-one.port` -d; cd /app/ztncui/src;npm start"
当您看到类似如下字样时,表示安装成功
启动服务
3b59df95edabeabbf19aa6605b28704608710719bdf7c6e7612d75d01ede8f48
Preparing to copy...
Copying from container - 512B
Copying from container - 769B
Copying from container - 1.024kB
Copying from container - 1.536kB
Successfully copied 2.048kB to /tmp/planet
planet文件路径为 /tmp/planet
planet server端口为: 9994, 请在防火墙放行该端口的tcp和udp协议
enjoy~
下载 planet
文件
脚本运行完成后,会在 /tmp/
目录下有个 planet
文件
下载该文件以备用
ZeroTier(及控制台) 发布教程
开放端口说明
web端口发布
在/etc/nginx/sites-available添加新域名配置文件,*vim 你的域名*
server {
listen 80;
server_name test.blog360.sbs;
# return 404; # managed by Certbot
location / {
client_max_body_size 50m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://172.30.0.2:3443/; #后端 真实服务器
index index.html index.htm A1-index.html;
}
}
建立软连接
ln -s /etc/nginx/sites-available/你的域名 /etc/nginx/sites-enabled/你的域名
web端口申请免费证书(ssl证书可选)
安装Certbot工具
# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx
# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx
申请ssl证书(nginx)
sudo certbot --nginx -d your-domain.com
替换
your-domain.com
为你的域名
验证
页面打开 访问 http://ip:3443 进入controller页面
任意服务器telnet
telnet ip 9993
服务端及客户端使用教程及演示
服务端使用教程
登录控制面板,修改密码
页面打开 访问 http://ip:3443 进入controller页面,默认使用默认账号为:admin
默认密码为:password
登录完成后修改且保存密码
创建网络
创建网络,输入名称:
得到网络 id
修改网络配置
与官方一致,按需参照以下配置修改
客户端使用教程
支持的客户端
除了IOS 其他与官方支持基本一致
安卓使用教程
下载非官方客户端ZerotierFix,前往GitHub下载地址:Releases · kaaass/ZerotierFix
安装app,配置自建PLANET节点接入
导入PLANET文件,配置自建planet节点
点击入轨,配置自建moon节点
linux\win\mac\FreeBSD 使用教程
使用方法一致,前往安装路径,备份官方的planet文件,导入自建的planet文件,系统默认安装路径如下:
重启服务:
win重启服务
Win+S 搜索 服务
找到ZeroTier One,并且重启服务
linux重启服务
进入服务器,配置文件重启
cd /var/lib/zerotier-one
# 替换目录下的 planet 文件
# 重启 zerotier-one 服务(service zerotier-one restart)
systemctl restart zerotier-one
mac重启服务
#进入 /Library/Application\ Support/ZeroTier/One/ 目录,并替换目录下的 planet 文件
#重启 ZeroTier-One:cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill
cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill
加入网络
使用命令行或者界面操作
zerotier-cli join 网络 id
验证
执行命令
zerotier-cli peers
<ztaddr> <ver> <role> <lat> <link> <lastTX> <lastRX> <path>
fcbaeb9b6c 1.8.7 PLANET 52 DIRECT 16 8994 1.1.1.1/9993
fe92971aad 1.8.7 LEAF 14 DIRECT -1 4150 2.2.2.2/9993
仅有一个PLANET节点,且该节点为你的公网服务器ip和端口,连接方式均为 DIRECT(直连),及为配置完成
服务器选择指南
硬件需求
所以说任意云服务器厂商所提供的vps都可以满足需求
网络选择
在所有配置中,网络是影响性能的最大因素,以表格优先级排行
影响延迟因素:地域 > 运营商 > 带宽 在一定情况下例如同一地域下:运营商 > 地域 > 带宽
例1
场景:
公司A部门在深圳,主要宽带使用的是电信宽带
2. 公司B部门在广州佛山,主要宽带使用的是电信宽带
3. A部门宽带直pingB部门宽带临时ip延迟为20 ms
那么在这个场景下,应当选择广州/电信 宽带或者云服务器,假设A部门宽带直ping云服务器为25 ms,B部门宽带直ping云服务为19 ms
结果:
以下为理论结果,实际会有20%左右波动
注意:客户端执行zerotier-cli peers
命令即可查看客户端网络状态
网络延迟波动图 (单位:ms)
50 ┼ ╭─╮
45 ┼ ╭─╮ ╭─╮ ╭─╯ │
44 ┼╭─╮ │ ╰╮ ╭─╮ │ ╰╮ ╭─╯ │ 最差阈值(RELAY)
40 ┼│ ╰╮ │ │ ╭╯ ╰╮ │ ╰╮ │ │
35 ┼│ │ ╭╯ │ │ │ ╭╯ ╰╮ │ │
30 ┼│ ╰╮ │ │ ╭╯ │ │ │ ╭╯ │
25 ┼│ │ ╭╯ ╰╮ │ ╰╮ │ │ │ │
20 ┼╯ ╰──────╯ ╰─────╯ ╰────╯ ╰───────╯ ╰── 最佳阈值(DIRECT)
15 ┼
0 ┼───────────────────────────────────────────────────────────
0 5 10 15 20 25 30 35 40 45 50 55 60 (时间/秒)
例2
场景:
A小伙伴在深圳,主要宽带使用的是电信宽带
B小伙伴在长沙,主要宽带使用的是长沙联通
C小伙伴在北京,主要使用的是北京移动
A宽带直pingB宽带临时ip延迟为50 ms
B宽带直pingC宽带临时ip延迟为60 ms
A宽带直pingC宽带临时ip延迟为70 ms
那么在这个场景下,最佳选择有
广州/电信 宽带或者云服务器
长沙/联通 宽带或者云服务器
北京/移动 宽带或者云服务器
假设我们选择了1广州/电信 宽带或者云服务器,且ABC到服务器带宽 20 ms、40 ms、60 ms
A小伙伴结果:
以下为理论结果,实际会有20%左右波动
注意:客户端执行zerotier-cli peers
命令即可查看客户端网络状态