Orangenschalen
浅谈如何搭建一个完全私有化的ZeroTier
Orangenschalen
编辑于 2024年08月11日 21:23

之前写过一篇专栏,但我个人觉得质量差强人意,故而重写以纠正错误。

cut-off

开始之前先纠正上次的错误。

ztncui搭建的实际上是ZeroTier Network Controller UI,并没有取代官方的Planet。

这次的专栏教程,我会从搭建控制器、搭建私有Planet一步步讲解。控制器+自建Planet才是真正完全私有化的ZeroTier网络。

cut-off

需要准备的一些工具:

  1. 一台安装Linux系统的主机(教程使用Ubuntu Server 24.04)
  2. OpenSSH、WinSCP、Xshell或别的任意一款远程工具
  3. 如果需要搭建自建Planet或Moon需要主机带有公网IP

cut-off

搭建ztncui,实现控制器私有化

我这里使用Windows自带的OpenSSH登录进服务器中

输入如下命令,下载ZeroTier官方客户端

curl -s https://install.zerotier.com | sudo bash

等待ZeroTier客户端下载并安装完毕后,继续下载ztncui

curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.8.14_amd64.deb

ztncui安装包下载完毕后,选择安装ztncui

sudo apt install ./ztncui_0.8.14_amd64.deb

ZeroTier和ztncui安装完成后,开始配置ztncui

sudo sh -c "echo ZT_TOKEN=`sudo cat /var/lib/zerotier-one/authtoken.secret` > /opt/key-networks/ztncui/.env"
sudo sh -c "echo HTTPS_HOST=192.168.1.7 >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo HTTPS_PORT=3443 >> /opt/key-networks/ztncui/.env"
sudo sh -c "echo NODE_ENV=production >> /opt/key-networks/ztncui/.env"

逐条执行!分别解释下四条命令的含义:

  • 将ZeroTier的授权令牌写进ztncui配置文件,不填写会出现HTTP 403问题。
  • 指定HTTPS服务监听的IP地址,我这里配置的局域网内可访问。
  • 指定HTTPS服务监听的端口,建议高于1024,不超过65535即可。
  • 将Node.js的模式切换为生产环境,如不切换会增加页面加载时间。

注意!如果要将WebUI向互联网开放,请使用HTTPS协议并使用合格CA签发的证书,ztncui自带一张自签发证书,那是不安全的!

现在我们已经配置好ztncui,要授予权限了

sudo chmod 400 /opt/key-networks/ztncui/.env
sudo chown ztncui.ztncui /opt/key-networks/ztncui/.env
sudo systemctl restart ztncui

逐条执行!分别解释下三条命令的含义:

  • 授予.env文件只有文件所有者可以读取的权限。
  • 将文件权限转移到ztncui用户头上。
  • 重启ztncui服务

浏览器输入配置好的IP:Port访问ztncui的WebUI

https://192.168.1.7:3443(举例)

首次登录账号:admin,密码:password

登陆后强制要求修改密码。

注意!如果上一步将WebUI放到互联网访问,密码一定不要设置得过于简单!有被字典爆破的可能,加入网络的设备将面临巨大风险!

登录成功后,选择Add Network新建网络

输入网络名称,单击Create Network

创建网络后,选择Easy Setup配置IP地址段

配置IP地址段,这里使用CIDR表示法。

如果不知道怎么配置,单击Generate Network address随机生成一套吧!

到这里,ztncui就配置完成啦!

Network ID就是网络名称右边的16位ID。

怎么加入网络就不过多赘述了,善用搜索引擎。

cut-off

进行进一步操作之前请先确认如下几点:

  • iOS设备(手机、平板)不支持自建的Planet。
  • 安卓设备使用ZeroTier Fix。
  • Planet需要服务器拥有公网IP。
  • 我没有Mac设备,相关问题请善用搜索引擎。

搭建私有Planet,实现行星节点私有化

如果Planet和ztncui处于一台设备,并且已加入相同网络,可跳过这步。

curl -s https://install.zerotier.com | sudo bash
sudo zerotier-cli join 网络ID

下载完成后,保存identity.public文件中的字符串

sudo more /var/lib/zerotier-one/identity.public

输出的一长串字符串我们需要保存下来,待会要用到。

获取ZeroTier源码,切换文件夹目录,修改mkworld.cpp

cd ZeroTierOne/attic/world
sudo vim mkworld.cpp

官方只设置了四组Planet服务器,所以我估计自定义应该最多也是四组。

私有Planet和官方Planet貌似不能共存,连接上私有的,官方的会-1。

我选择替换掉一组官方服务器,如图所示。

Identity("填写刚刚记录的一长串字符串");

push_back(InetAddress("服务器的公网IP/9993"));

若无IPv6,注释掉IPv6地址的代码段!

“9993”是对外开放的端口,可以修改,端口映射时建议TCP和UDP都打开

编译修改好的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

重启设备,检查Planet是否正确部署

Linux 命令行输入:

sudo zerotier-cli listpeers

Windows 以管理员身份启动命令行:

cd C:\ProgramData\ZeroTier\One
zerotier-cli listpeers

检查标记是Planet的设备,有无IP与服务器相同的设备,若有则启动成功。

cut-off

后记

Controller和Planet搭建完毕后,入网的设备都已经成为脱离官方服务的新“星系”。

摸索的过程离不开这些文档、作者、好朋友的帮助!

https://github.com/key-networks/ztncui
https://github.com/zerotier/ZeroTierOne
https://docs.zerotier.com/

spdkir 老和老和

评论 7
赞与转发 10