服务器安装Zerotier

公网服务器,需要有固定IP,一条命令安装Zerotier:

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

出现如下提示则代表安装完成:

*** Enabling and starting ZeroTier service...
Synchronizing state of zerotier-one.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable zerotier-one

*** Waiting for identity generation...

*** Success! You are ZeroTier address [ 515xxxxxxx ].

生成Moon配置文件

cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon identity.public > moon.json
# 然后编辑该配置文件
sudo nano moon.json

默认该配置文件是如下内容:

{
 "id": "515xxxxxxx",
 "objtype": "world",
 "roots": [
  {
   "identity": "515xxxxxxx:0:e4d8xxxxxx11d962bb14771fa1e9bf1e10f9519c82590c372abbad4c6b2b473f27c389f6f7c8c328d513ce449xxxxxxe4956a318af32e16df>
   "stableEndpoints": []
  }
 ],
 "signingKey": "54685533b0ef4fc66f92e6a010dc304c4531acdd68a4486d800436d42aabfc5a9eed745cb9b7a3fe0983f521adc672f5b153bed420782d431c35058e3110c3>
 "signingKey_SECRET": "3325fd28ec1ec8ae058c255825bc3259d1935bf4bb2b23e361eefec5729337e0f196caba311ba42245f2b77d707f04f5ed33c81b8bf74d31189524c>
 "updatesMustBeSignedBy": "54685533b0ef4fc66f92e6a010dc304c4531acdd68a4486d800436d42aabfc5a9eed745cb9b7a3fe0983f521adc672f5b153bed420782d431c3>
 "worldType": "moon"
}

其中"id"是本机器在zerotier中的id,此处默认无需修改
"stableEndpoints"需要填写服务器的公网IP(假设此处我们的服务器公网IP为114.114.114.114,默认9993端口, 且是UDP协议的, 此处在防火墙上需要开放UDP,否则其他设备连接不上Moon
"stableEndpoints": ["114.114.114.114/9993"]
仅需修改这一条后保存退出。

生成签名文件

sudo zerotier-idtool genmoon moon.json

运行后提示类似wrote 000000515xxxxxxx.moon (signed world with timestamp 1640010832xxxx)表示签名完成。文件名去掉开头的00000就是机器的ID

将 moon 节点加入网络

在/var/lib/zerotier-one中新建一个moons.d的目录,我们默认目前依旧在/var/lib/zerotier-one目录下,然后将刚才签名好的moon文件移动道moons.d中

sudo mkdir moons.d
sudo mv 000000515xxxxxxx.moon moons.d

重启zerotier服务以应用配置

sudo service zerotier-one restart 

此时,Moon服务器已经配置完成、正常运行,并且可以接受客户端的连接请求了
下一步准备配置客户端,首先通过SFTP或者其他方式,将刚刚生成的000000515xxxxxxx.moon下载到本地。

配置OpenWRT软路由

我们前提默认OpenWRT已经安装了Zerotier并且已经配置完毕
ssh登录OpenWRT后,在zerotier的目录下创建moons.d目录

mkdir /etc/config/zero/moons.d

加入MOON服务器方式一(推荐)

通过SFTP将moon服务器中的000000515xxxxxxx.moon文件上传到刚刚创建的moons.d目录中

加入MOON服务器方式二

如果不方便上传文件,那么可以简单通过命令加入:

zerotier-cli orbit 515xxxxxxx 515xxxxxxx

后面两串数字是MOON服务器的ID,两个的原因是orbit参数支持同时连接两台MOON服务器(同样,通过moon签名文件的方式也可以连接多个MOON服务器),本文中我们仅配置了一台MOON服务器,因此两个ID相同即可。
重启软路由,输入zerotier-cli listpeers以检查zerotier目前已经连接的节点是否包含我们刚刚配置好的moon服务器。
如果不出意外,反馈的应该是这样的:

200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers 296cxxxx17 192.168.2.191/29994;12457;5030 21 1.8.3 LEAF
200 listpeers 515xxxxxxx 114.114.114.114/9993;2347;2073 27 1.8.4 MOON
200 listpeers 61dxxxxx89 - -1 1.4.6 LEAF
200 listpeers 61dxxxxxcb 50.7.73.34/9993;2347;1448 905 - PLANET
200 listpeers 62fxxxxx71 50.7.252.138/9993;2347;1078 1266 - PLANET
200 listpeers 778xxxxx90 103.195.103.66/9993;2347;2050 285 - PLANET
200 listpeers 992xxxxxb7 195.181.173.159/9993;2347;2066 279 - PLANET

其中role列为MOON的那一条如果显示出IP与版本号,说明已经成功连接了。latency为MOON服务器的延迟。MOON为用户自建节点服务器,PLANET为官方节点服务器,LEAF为客户端。

疑问:MOON服务器本身,是否需要加入我们自己组建的Zerotier局域网呢?
答案:不需要且不能加入。因为加入之后,这台服务器就的角色就变成了LEAF。