在zerotier网络中,有三种节点,PLANET、MOON、LEAF,其中PLANET是官方运行的顶级根节点,MOON是用户自建的辅助根节点,LEAF是普通节点,是网络中接入的终端设备(电脑、手机、服务器等)。PLANET服务器都在国外,如果LEAF之间不能直连,就需要通过PLANET起中继作用,而官方的PLANET都在国外,延迟很大。用户可以自建MOON服务器作用中继。本文记录了MOON的建立方法和使用。

自建MOON不需要额外安装软件。本步骤需要在ZeroTier安装目录里进行。
Windows下路径为 C:\Program Files (x86)\ZeroTier\One,命令在管理员模式下的powershell中执行 ,Linux 下安装路径是 /var/lib/zerotier-one

部署MOON服务端

要求有一台有公网 IP 的云服务器(如腾讯云、阿里云),配置要求很低(1核1G即可),
防火墙中放行 UDP 9993 端口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 进入配置目录并生成配置文件
cd /var/lib/zerotier-one
# 生成身份密钥对(identity.secret 和 identity.public)
sudo zerotier-idtool generate identity.secret identity.public

# 基于公钥生成 moon.json 配置文件
sudo zerotier-idtool initmoon identity.public > moon.json
# 修改配置
# 编辑 moon.json,找到 "stableEndpoints": [],填入服务器公网IP,可直接用nano,
# 服务器ip/9993要用引号包起来
sudo sed -i 's/"stableEndpoints": \[\]/"stableEndpoints": ["云服务器公网IP\/9993"]/g' moon.json

# 生成签名文件并部署
sudo zerotier-idtool genmoon moon.json
sudo mkdir -p moons.d
sudo mv *.moon moons.d/
sudo systemctl restart zerotier-one

# 记下 Moon ID(后续客户端要用)
# 执行 cat moon.json,复制 id 字段(一串10位字符)

客户端配置

在任一客户端上执行即可。
在Windows下,用管理员模式的powershell打开C:\Program Files (x86)\ZeroTier\One目录,
执行./zerotier-cli.bat orbit <Moon ID> <Moon ID>(ID 输入两次),id前后不需要引号。

验证

执行zerotiter-cli.bat listpeers,若服务器角色显示为 MOON 且延迟较低,即代表成功。

执行zerotiter-cli.bat peers,可看到节点间的连接状态,

标记MOON的正是云服务器,标记LEAF的是普通节点。
linux下进入/var/lib/zerotier-one,执行./zerotiero-cli listpeers./zerotiero-cli peers。这是在云服务器(MOON)上的执行结果。