搭建记录
更新:建议使用docker安装zerotier的Planet,使用docker安装planet很简单,坑少。MOON不需要。完成本文的操作需要云服务器。
感觉有用,请点个赞
1、Zerotier原理
参考链接:Zerotier 搭建私有根服务器及创建虚拟局域网完整教程
1.1概念
- planet:核心角色,官方不允许自建私有,zerotier 的行星服务器,用于管理全球所有的 zerotier 客户端的地址信息,帮助建立客户端间的直接链接,以及在无法建立直接链接时,作为中继服务器转发设备间的流量。
- moon:官方允许自建私有,作为离客户端更近的中继服务器存在,可以使转发的效率更高。
Planet有私有实现:zerotier-planet
- 解除官方的设备连接数限制
- 提升手机客户端连接的稳定性
- 官方不允许自建私有planet,这里的是官方网站注册leaf,无法用私有planet,如果用私有planet,就别去官网注册leaf,moon了。
- 私有planet优点是,可以突破数量限制,还很稳定,不需要再整私有moon。缺点是,需要买一个云服务器,但好在一年也没多钱,而且因为有了公网IP,还能做很多别的事。
2、安装
2.1 Planet (Server)
- 2.1节的planet安装方法 我用着有问题 不知道怎么解决 建议参考:下文第4节docker-zerotier-planet的方法,这个方法开源在gthub,应用 docker 安装,简单稳定。
- 如果建私有planet,可以不需要moon了,不用在进行2.3节的操作。
2.1.1 安装私有的Planet
构建Zerotier私有根服务器(Planet),实现比MOON更稳定的内网穿透
需要有一个云服务器
私有的Planet就是平替的官网界面,云服务器防火墙需要把3443的tcp和9993的UDP开放。
1、在云服务器上ssh等方式登录,下载运行
wget https://gitee.com/opopop880/zerotier_planet/raw/master/zerotier_planet_debain.sh && chmod +x zerotier_planet_debain.sh && ./zerotier_planet_debain.sh
2、保存Planet
在下载好后,在root
权限下cd /root
能看到生成的planet
文件。保存出来,给各个client留用。
3、安装成功后,登录ztncui
- https://你的云服务器ip或者域名:3443
- 登录用户名 admin 密码默认 password
- 进入界面的,登录在最右上角。
4、进入planet界面后:
- 需要创建新网络。
- 添加成员,Moon也可以添加。
- 简易安装,设定网段,之后会自动给成员分配IP。
- 保留网络的ID
2.2 leaf (Client)
有windows端 Linuex端等。
官方下载地址
2.2.1 windows端:
- 安装zerotier终端
win + R
打开services.msc
,找到zerotier
对应位置文件位置。将之前保留的planet
复制进文件夹,替换原有的planet。- 重启zerotier服务。
- 然后
Join New Network
,添加之前保留的网络ID。 - 管理员权限打开
powershell
,运行zerotier-cli listpeers
看下是否连上Planet
2.2.2 Linux端:
参考:Linux/Ubuntu中安装ZeroTier
类似windows
- 到/var/lib/zerotier-one替换planet
- 重新启动zerotier
sudo systemctl restart zerotier-one
- 加入网络
sudo zerotier-cli join your-networkid
2.2.3 路由器端:
手里有GL-iNET路由器,加入私有zerotier Planet也是替换planet
文件。
路由器的应用运行文件在/tmp/lib
,路由器每次重启都会,重置这个路径下的文件。
所以开机自启动脚本,完成操作。
GL-iNET路由器是openwrt改的,openwrt的软路由应该类似。
1、生成一个/root/zerotier.sh
注意:前文私有planet生成的planet文件,放在/root/planet
#!/bin/sh
sleep 18;
# 复制文件
cp /root/planet /tmp/lib/zerotier-one_gl #只是参考下,把原有planet覆盖掉,我的gl路由器有两个文件夹有,所以就都覆盖了
cp /root/planet /tmp/lib/zerotier-one
sleep 1;
# 查找并终止 zerotier-one 进程
pid=$(ps | grep 'zerotier-one' | grep -v 'grep' | awk '{print $1}')
# 因为路由器上的zerotier在覆盖planet后,需要重新启动。
# 发现杀掉进程,会重新自动启动zerotier,所以就这么处理了
# -----
# 如果找到 zerotier-one 进程,杀掉它。
if [ -n "$pid" ]; then
echo "Killing process: $pid"
kill $pid
else
echo "No zerotier-one process found."
fi
2、设置脚本 zerotier.sh
开机自动运行
/etc/rc.local
是 OpenWrt 系统中常用的启动脚本,适合简单地运行脚本或命令。
- 编辑
/etc/rc.local
文件:
vi /etc/rc.local
- 在
exit 0
之前添加运行脚本的命令:
/path/to/zerotier.sh
示例:
/root/zerotier.sh
exit 0
- 保存并退出。
- 确保脚本具有执行权限:
chmod +x /root/zerotier.sh
- 重启系统测试。
- 参考linux方法,将路由器zerotier添加入私有planet。
2.2.3 移动端:
ZerotierFix 是一个基于官方Zerotier客户端进行非官方补丁修改的Android应用程序。它允许你在Android设备上自定义和管理Zerotier网络,提供了额外的功能如自我托管的Moon
支持、通过文件和URL添加定制planet
配置等。此项目遵循GPL-2.0许可证,核心代码通过反向工程自官方Android客户端,并且完全由Java开发。
链接:ZerotierFix
Features
- Self-hosted
Moon
Support - Add custom
planet
config via file and URL - View peers list
- Chinese translation
2.3 Moon
云服务器在安装planet后,不用重复安装moon
现在需要的是配置私有moon
2.3.1 配置私有moon
- 进入 ZeroTier 配置文件目录。
cd /var/lib/zerotier-one
- 生成 moon.json 签名文件。
zerotier-idtool initmoon identity.public >>moon.json
- 编辑 moon.json
{
"id": "0123456789",
"objtype": "world",
"roots": [
{
"identity": "xxxxxxxx:0:xxxxxxxx",
"stableEndpoints": []
}
],
"signingKey": "xxxxxxxx",
"signingKey_SECRET": "xxxxxxxx",
"updatesMustBeSignedBy": "xxxxxxxx",
"worldType": "moon"
}
找到 "stableEndpoints": []
。
添加 "IPv4地址/9993"
或者 "IPv4地址/9993"
,"IPv6地址/9993"
。
- 生成 .moon 签名文件 0000006xxxxxxxxx.moon
zerotier-idtool genmoon moon.json
mkdir /var/lib/zerotier-one/moons.d
cp 0000006xxxxxxxxx.moon moons.d/
- 重启 ZeroTier 服务
/etc/init.d/zerotier-one restart
2.3.2 设备连入 moon 服务器
2.3.2.1 自动配置
- 输入命令
Linux
sudo zerotier-cli orbit [moon.json 文件中的 id] [moon.json 文件中的 id]
Windows 有一点不同,需要使用管理员权限的 PowerShell 输入:
zerotier-cli orbit [moon.json 文件中的 id] [moon.json 文件中的 id]
3、路由器端配置局域网穿透
将zerotier配置在路由器上后,路由器下的设备可以依托路由器的zerotier实现穿透。
本文使用的路由器是GL-iNET-AXT1000,zerotier是安装好的。
Step 1. 参考2.2.3节配置好后,参考下图,比如是openwrt的话,在网上查,把允许LAN远程访问打开。并添加Network ID。注意途中的LAN后面的Destination和Via,后面要用。
Step 2. 配置 NAT
在私有Planet的Routes中配置。官方的应该不一样吧,网上查查,都有。192.168.6.0/24那行是后添加的,10.5.5.0是原来就有的。
注意target和gateway都是什么,这里的原理就是NAT。
这之后,外网装有zerotier的设备,可以通过路由器分配给下面的设备的IP,实现外网访问。
现在路由器下的设备是PVE,NAS,可以外网访问了。
4、补充:docker-zerotier-planet
建议使用docker安装zerotier,使用docker安装planet很简单,坑少。MOON不需要。
两个环节
1、云服务器上安装私有Planet,
2、将终端加入私有Planet
参考: 1、docker-zerotier-planet 在云服务器上安装私有的planet。2、zerotier使用 将LEAF终端加入Planet。