什么是Moons节点?
Moons节点是ZeroTier网络中的特殊节点,它可以作为私有网络中的中继器,帮助其他节点发现并连接到网络。通过部署Moons节点,可以提升网络的稳定性、可靠性和覆盖范围。对我们来说,就是解决网络不稳定、经常中断的问题。
根据官方手册推荐,Moons节点最好有固定的公网IP(因为配置的时候需要一个固定IP),而且最好只做Monns节点使用。
实际中,可以是在用的planet节点(即设备节点)做Moons节点,而且固定IP也不一定非得是公网IP,私网IP也是可以使用的。使用私网IP这点官方文档有说明,在私网不通的时候,会使用官方的行星节点建立网络。利用可以设置私网IP这一点,不知是否对国内网络有所裨益,通过官方行星节点打通网络后,如果私网moons节点可以生效,那么使用动态外网IP的moons节点,理论上就可以用来做数据转发,将很大的提高国内网络的稳定性,针对这一点还在测试中,目前还没结果。
创建Moons节点步骤:
0、环境确认
首先要安装ZeroTier客户端,一般会被安装在 /var/lib/zerotier-one/ 位置,该目录下包含自己的身份信息文件 identity.public 和 identity.secret (相当于公钥和私钥)。
1、生成moon.json
zerotier-idtool initmoon /var/lib/zerotier-one/identity.public >> moon.json
使用上面的命令,在当前目录生成moon.json文件,文件内容如下:
{
"id": "deadbeef00",
"objtype": "world",
"roots": [
{
"identity": "**hidden**",
"stableEndpoints": [""]
}
],
"signingKey": "**hidden**",
"signingKey_SECRET": "**hidden**",
"updatesMustBeSignedBy": "**hidden**",
"worldType": "moon"
}
2、添加固定IP信息
编辑上面的 moon.json 文件中的 stableEndpoints 部份,添加固定的IP地址信息。比如外网IP是1.1.1.1,内网是10.0.0.1,IPv6地址是2001:abcd:abcd::1,那么添加稳定节点后的moon.json看起来是这样:
{
"id": "deadbeef00",
"objtype": "world",
"roots": [
{
"identity": "**hidden**",
"stableEndpoints": ["1.1.1.1/9993","10.0.0.1/9993","2001:abcd:abcd::1/9993"]
}
],
"signingKey": "**hidden**",
"signingKey_SECRET": "**hidden**",
"updatesMustBeSignedBy": "**hidden**",
"worldType": "moon"
}
3、生成moon文件
zerotier-idtool genmoon moon.json
执行上面命令,将生成一个名为000000deadbeef00.moon
的文件,它不包含密钥,但由 JSON 文件中的密钥签名。注意这里的ID deadbeef00
,后面对应的命令都应该使用正确的ID来进行替换。
4、Moons节点生效
现在转到zerotier配置所在的根目录(linux通常在/var/lib/zerotier-one
/),查看是否有名为moons.d
的目录,如果没有就自行创建一个。将上面得到的moon 文件复制到moons.d文件夹里面,最后重新启动zeronter-one服务。
mv 000000deadbeef00.moon /var/lib/zerotier-one/moons.d/
5、其他节点加入Moons节点
zerotier-cli orbit deadbeef00 deadbeef00
如果moon节点没问题,执行上面的代码后,等一段时间后,执行zerotier-cli listpeers
命令,就可以看到对应的deadbeef00节点是MOON而不是LEAF了。
PS:第一个参数是世界 ID(我们可以通过删除前导零来缩短它),第二个参数是其任何根的地址,没有特殊改动这俩是一样的。如果根在线且可访问,这将联系根并从中获取完整的世界定义。