安装 Zerotier
准备一台带公网IP的云主机,配置不用高,我用的是Ubuntu 22.04系统。
进入命令终端,使用以下命令进行安装(同样适用于Debian系统)1
curl -s https://install.zerotier.com | sudo bash
或者如果有装 GnuPG
这是更安全的安装方法
curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import && \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi
默认安装在 /var/lib/zerotier-one/
目录中
制作 planet 文件
新建脚本文件 make_planet.sh
#!/bin/bash
ip=`wget http://ipecho.net/plain -O - -q ; echo`
addr=$ip/9993
identity=`cat /var/lib/zerotier-one/identity.public`
apt-get -y install build-essential git nlohmann-json3-dev
git clone -b 1.12.2 --depth 1 https://github.com/zerotier/ZeroTierOne.git
cd ./ZeroTierOne/attic/world/
sed -i '/roots.push_back/d' ./mkworld.cpp
sed -i '/roots.back()/d' ./mkworld.cpp
sed -i '86i roots.push_back(World::Root());' ./mkworld.cpp
sed -i '87i roots.back().identity = Identity(\"'"$identity"'\");' ./mkworld.cpp
sed -i '88i roots.back().stableEndpoints.push_back(InetAddress(\"'"$addr"'\"));' ./mkworld.cpp
source ./build.sh
./mkworld
mv ./world.bin ./planet
cp -r ./planet /var/lib/zerotier-one/
systemctl restart zerotier-one.service
执行脚本
sudo bash make_planet.sh
部署网络控制器UI
下载 ztncui
的源码
git clone https://github.com/key-networks/ztncui.git
安装 nodejs
版本至少 14
以上2
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - &&\
sudo apt-get install -y nodejs &&\
sudo npm install -g node-gyp pm2
准备运行参数3
cd ztncui/src/
secret=`cat /var/lib/zerotier-one/authtoken.secret`
echo "ZT_TOKEN=$secret" >>./.env
echo "HTTP_PORT=80" >>./.env
echo "HTTP_ALL_INTERFACES=yes" >>./.env
echo "NODE_ENV=production" >>./.env
ln -s /var/lib/zerotier-one/planet public/planet
安装依赖包
npm install
运行
pm2 start bin/www --name ztncui
pm2 startup
pm2 save
浏览器输入http://<服务器IP>
,使用默认帐号 admin
密码 password
登录
使用网络控制器
新建网络,取一个网络名字
点击 Easy setup
按钮进入ip地址池配置
点击 Generate network address
自动生成配置
客户端加入网络
参考上文完成客户端的安装,从 http://<服务器IP>/planet
这个网址下载 planet
文件,替换掉安装目录的 planet
文件,然后重启客户端。
使用命令或UI加入新创建的网络
zerotier-cli join <网络ID>
到网络控制台打开新节点的 Authorized
为啥不用Docker
用 Docker 总感觉隐藏了很多令人不安的因素,所以我喜欢自己捣腾,本文所有源码和应用包都来自官方版本,原汁原味。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。