自建根服务器
对于 zerotier 根服务器在国外,高延迟且连接不稳定的问题,此前尝试过自己部署 moon 节点,不过虚拟局域网内的设备想要通过 moon 节点直连还是需要先通过根服务器与 moon 节点取得联系(仅仅是取得联系即可,对带宽延迟都没有太大要求,所以之前处在勉强可用的状态)然而最近 zerotier 的官方根服务器似乎彻底被墙死,moon 节点也几乎不可用。为了继续正常使用 zerotier,开始考虑自建 zerotier 根服务器的方案。
最终找到了基于 ztncui 优化而来的 zerotier-planet 项目,简单而言就是用 docker 部署一个独立的 zerotier 虚拟网络。
部署这个项目的全部准备只有在你的公网服务器上安装好 docker 和 docker-compose
jonnyan404 已经写好了 zerotier-planet 的 docker 配置脚本,我们只需要从 gitee 上 clone 下来即可
git clone https://gitee.com/Jonnyan404/zerotier-planet
然后进入相应文件夹
cd zerotier-planet
修改配置文件
vi docker-compose.yml
填写你的服务器的公网 ip 地址
然后就可以通过 docker-compose 启动 docker
docker-compose up -d
此时可以通过 http://ip:4000 访问后台页面(记得开放服务器 4000 端口)
后面的操作就和 zerotier 部署一样了
替换 planet 文件
此时你自建的根服务器已经可以正常运行了,但是如果你使用 zerotier-cli peers
查看虚拟局域网中的设备,你会发现你自己的根服务器是以leaf的身份运行的,而官方的根服务器依旧在设备列表中占据了 planet 的位置。虽然完全不影响使用,但是看着终归有些不爽。
这时候你需要重新编译并替换局域网中所有设备的 planet 文件
查看认证信息
进入 docker 挂载的 zerotier-one 目录
查看 identity.public
和 authtoken.secret
中记录的认证信息,记录下来
编译 planet 文件
- 下面的步骤可以在任意一台机子上完成,只需要最后编译好的 planet 文件
- 如果不想在云服务器上编译,完全可以在自己的 linux 虚拟机中进行
先下载 zerotier 源码
git clone https://github.com/zerotier/ZeroTierOne
进入源码目录
[root@cloud zerotier-one]# ls
authtoken.secret controller.d identity.public identity.secret networks.d planet zerotier-cli zerotier-idtool zerotier-one ZeroTierOne zerotier-one.pid zerotier-one.port zerotier-one.te
进入目录ZeroTierOne
[root@cloud zerotier-one]# cd ./ZeroTierOne
[root@cloud ZeroTierOne]# ls
artwork controller Dockerfile.ci java make-mac.mk one.cpp RELEASE-NOTES.md tcp-proxy zeroidc
attic ...
进入attic/world
[root@cloud ZeroTierOne]# cd attic/world/
[root@cloud world]# ls
build.sh current.c25519 mkworld mkworld.cpp planet previous.c25519 README.md world.c
修改 mkworld.cpp
[root@cloud ZeroTierOne]# vim mkworld.cpp
找到其中的 roots.push_back
,这里的四个就是默认的根服务器
将他们都注释掉,添加你自己的:
将之前记下的 identity.public 中的字符串写入 Identity 中
InetAddress写服务器公网ip,端口为9993
roots.push_back(World::Root());
roots.back().identity = Identity("identity.public中的字符串");
roots.back().stableEndpoints.push_back(InetAddress("公网IP/9993"));
回到 world 目录下,执行:
source ./build.sh
./mkworld
mv ./world.bin ./planet
你就会得到新的 planet 文件
将虚拟局域网内设备 zerotier 根目录下的 planet 文件用这份新的 planet 文件替换后重启服务
- Windows下planet位置:C:\ProgramData\ZeroTier\One
- Linux下planet位置:/var/lib/zerotier-one
再使用zerotier-cli peers
命令,就会发现 planet 变为你自己的服务器了