前言
ZeroTier 是一个优秀的虚拟网络解决方案,可以让分布在全球各地的设备通过互联网建立安全的点对点连接。然而,使用官方服务存在一些限制:免费版本只能连接25台设备,付费版本成本较高,而且数据需要经过第三方服务器。
本文将手把手教你如何使用 Docker 部署属于自己的 ZeroTier 私有网络,不依赖官方服务,实现全球设备自由互联,无限制、高安全、低延迟!
什么是ZeroTier Planet?
ZeroTier的架构中包含三个核心组件:
-
Planet:根服务器,负责设备发现和网络协调
-
Moon:中继服务器,帮助无法直连的设备建立连接
-
Leaf:客户端设备,实际使用网络的终端
官方的 Planet 服务器位于国外,自建 Planet 可以获得更好的网络性能和完全的数据控制权。

准备工作
系统要求
-
一台具有公网IP的
Linux服务器 -
Docker环境 -
docker-compose -
开放9993(UDP)--作为客户端设备连接Docker自建planet(虚拟组网直连SSH无需开放公网22端口)
-
9995端口(UDP)--自建planet/moon
环境准备
# 安装Dockercurl -fsSL https://get.docker.com | shsudo systemctl start dockersudo systemctl enable docker
# 安装Docker Composesudo curl -L
"https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)"
-o /usr/local/bin/docker-composesudo
chmod +x /usr/local/bin/docker-compose
部署步骤
1. 克隆项目并准备环境
# 克隆项目git clone https://github.com/Jonnyan404/zerotier-planetcd zerotier-plane
t# 创建必要的目录mkdir -p zerotier-one ztncui/etc
2. 配置Docker Compose
编辑 docker-compose.yml 文件:
### date:2021年11月29日
### author: www.mrdoc.fun | jonnyan404
### 转载请保留来源
### update:2022年08月14日#version: '2.0'services:
ztncui:
container_name:ztncui
restart:always
environment:
-MYADDR=你的服务器公网IP
# 修改为实际公网IP
-HTTP_PORT=4000
-HTTP_ALL_INTERFACES=yes
-ZTNCUI_PASSWD=你的管理密码
# 设置管理密码
ports: -'4000:4000'
# web控制台入口
-'9995:9993'
# ZeroTier服务端口
-'9995:9993/udp'
# UDP端口
-'3180:3180'
# planet/moon文件下载入口
volumes:
-'./zerotier-one:/var/lib/zerotier-one'
-'./ztncui/etc:/opt/key-networks/ztncui/etc'
# 按实际路径挂载卷, 冒号前面是宿主机的, 支持相对路径
image:keynetworks/ztncui
3. 启动服务
# 修改配置文件中的IP和密码vim docker-compose.yml
# 启动服务docker-compose up -d
# 查看服务状态docker-compose ps -a
4. 生成Moon配置文件
# 进入容器docker exec -it ztncui bash
# 在容器内操作cd /var/lib/zerotier-onels -l
# 生成moon配置文件zerotier-idtool initmoon identity.public > moon.jsonchmod 777 moon.json
5. 修改Moon配置
在宿主机上编辑moon.json文件:
# 编辑moon.json,修改stableEndpointsvim ./zerotier-one/moon.json
在moon.json中找到 stableEndpoints 部分,修改为:
"stableEndpoints": ["你的公网IP/9995"]
6. 生成Moon文件
# 回到容器内docker exec -it ztncui bashcd /var/lib/zerotier-one
# 生成moon文件zerotier-idtool genmoon moon.jsonmkdir moons.dcp *.moon moons.d/
7. 生成Planet文件
在宿主机上操作:
# 下载mkmoonworld工具wget https://github.com/kaaass/ZeroTierOne/releases/download/1.10.2-patch1/mkmoonworld-x86_64chmod +x mkmoonworld-x86_64
# 复制moon.json到当前目录cp ./zerotier-one/moon.json ./
# 生成planet文件./mkmoonworld-x86_64 ./moon.jsonmv world.bin planet
# 复制planet文件到容器内docker cp ./planet ztncui:/var/lib/zerotier-one
# 验证文件完整性md5sum planet
8. 重启服务
# 重启容器docker restart ztncui
# 验证服务状态docker exec -it ztncui bashcd /var/lib/zerotier-one
# 查看ZeroTier信息zerotier-cli infozerotier-cli listmoons
配置客户端
1. 下载Planet文件
通过以下方式获取planet文件:
-
直接从服务器下载:
http://你的服务器IP:3180/planet -
或者从服务器复制之前生成的planet文件
2. 备份并替换Planet文件
Windows客户端:
# 停止ZeroTier服务net stop ZeroTierOneService
# 备份原始文件copy "C:\ProgramData\ZeroTier\One\planet" "C:\ProgramData\ZeroTier\One\planet.bak"
# 替换为新的planet文件copy "planet" "C:\ProgramData\ZeroTier\One\planet"
# 重启服务net start ZeroTierOneService
Linux客户端:
# 停止ZeroTier服务sudo systemctl stop zerotier-one
# 备份原始文件sudo cp /var/lib/zerotier-one/planet /var/lib/zerotier-one/planet.bak
# 替换为新的planet文件sudo cp planet /var/lib/zerotier-one/planet
# 重启服务sudo systemctl start zerotier-one
macOS客户端:
# 停止服务sudo launchctl unload /Library/LaunchDaemons/com.zerotier.one.plist
# 备份并替换sudo cp "/Library/Application Support/ZeroTier/One/planet" "/Library/Application Support/ZeroTier/One/planet.bak"sudo cp planet "/Library/Application Support/ZeroTier/One/planet"
# 重启服务sudo launchctl load /Library/LaunchDaemons/com.zerotier.one.plist
安卓客户端:安卓端需要使用 ZeroTier-Fix
-
设置--勾选启动自定义Planet
-
导入Planet文件,并在网页管理端勾选认证即可。
创建和管理网络
1. 访问管理界面
打开浏览器访问: http://你的服务器IP:4000
使用之前在docker-compose.yml中设置的密码登录。
2. 创建网络
-
点击"Add Network"创建新网络
-
设置网络名称和描述
-
配置IP地址范围(如:192.168.100.0/24)
-
保存网络ID,客户端加入时需要使用
3. 客户端加入网络
在已经替换planet文件的客户端上执行:
# 加入网络sudo zerotier-cli join 你的网络ID
# 查看连接状态sudo zerotier-cli statussudo zerotier-cli listnetworks
4. 授权设备
-
在管理界面中找到对应的网络
-
在"Members"部分可以看到申请加入的设备
-
勾选"Authorized"来授权设备加入网络
-
可以为设备分配固定IP地址
高级配置
1. 验证Moon节点状态
# 进入容器查看moon状态docker exec -it ztncui bashcd /var/lib/zerotier-one
# 查看ZeroTier信息zerotier-cli infozerotier-cli listnetworkszerotier-cli listmoonszerotier-cli peerszerotier-cli listpeers
2. 防火墙配置
# 开放必要端口4000/tcp
# Web管理界面9995/tcp
# ZeroTier服务端口9993/udp、9995/udp
# ZeroTier UDP端口3180/tcp
# 文件下载端口,可不开放,通过服务器ftp下载
3. 客户端Moon配置(可选)
如果需要客户端连接到Moon节点:
# 将moon文件复制到客户端sudo cp 0000005979756b76.moon /var/lib/zerotier-one/moons.d/
# 重启客户端服务sudo systemctl restart zerotier-one
# 查看moon连接状态sudo zerotier-cli listmoons
4. 监控和日志
# 查看容器日志docker logs ztncui
# 查看ZeroTier运行状态docker exec -it ztncui zerotier-cli infodocker exec -it ztncui zerotier-cli listpeers
5. 数据备份
# 备份重要数据cp -r ./zerotier-one ./zerotier-one-backupcp -r ./ztncui ./ztncui-backup
常见问题解决
1. 容器无法启动
# 检查端口占用netstat -tulpn | grep -E "(4000|9995|3180)"
# 检查Docker服务sudo systemctl status docker
# 查看容器日志docker logs ztncui
2. 客户端无法连接到Planet
检查服务端:
# 验证服务状态docker exec -it ztncui zerotier-cli info
# 检查端口监听docker exec -it ztncui netstat -tulpn | grep 9993
检查客户端:
# 验证planet文件是否正确替换sudo zerotier-cli infosudo zerotier-cli listpeers
# 检查配置文件ls -la /var/lib/zerotier-one/planet
3. 设备加入网络后无法通信
-
检查网络配置中的IP地址范围
-
确认设备已在管理界面中授权
-
验证防火墙规则是否正确
4. Moon节点连接失败
# 检查moon文件是否正确生成docker exec -it ztncui ls -la /var/lib/zerotier-one/moons.d/
# 验证moon配置docker exec -it ztncui zerotier-cli listmoons
5. 管理界面无法访问
-
检查4000端口是否被防火墙阻止
-
确认ZTNCUI_PASSWD环境变量设置正确
-
验证容器网络配置
安全建议
- 定期备份:备份planet-data和controller-data目录
- 访问控制:使用防火墙限制管理端口访问
- HTTPS配置:为web控制面板配置SSL证书
- 监控日志:定期检查服务日志,及时发现异常
总结
通过使用keynetworks/ztncui镜像自建ZeroTier Planet,我们可以获得:
技术优势:
-
完全私有的网络控制权,数据不经过第三方
-
不受25台设备的限制,可以连接任意数量设备
-
自定义端口配置,避免默认端口冲突
-
集成Web管理界面,便于网络管理
实际收益:
-
更好的网络性能和较低的延迟
-
完整的数据安全保障和隐私保护
-
灵活的网络配置和管理权限
-
无需支付订阅费用的长期成本优势
部署要点:
- 确保服务器有稳定的公网IP和足够的带宽
- 正确配置防火墙,开放必要端口
- 注意备份重要的配置文件和密钥
- 定期检查服务状态和日志
- 路由器一定一定要开启UPnP功能!!!
这个方案特别适合企业内网互联、远程办公、个人实验室或需要稳定、快速、高度定制化的网络环境。虽然初期部署需要一定的技术投入,但长期来看具有很高的性价比和灵活性。
评论 (0)
还没有评论,快来抢沙发吧!