第一步,基础:建立zerotier网络的硬件情况。
在不同的地方的三台机器:群晖DS712+(DSM5.2)、搬瓦工(ubuntu16.04)、MTK7620A(LEDE)路由器(下面的叙述简称他们为群晖、搬瓦工、路由器)。它们安装的 zerotier 都是1.2.4版本(要1.2以后的版本才支持moon, 第一次努力没有成功也缺乏这个条件)。要建立moon,必须要有一台拥有外网IP的机器,并且完全受控(主要就是外网可以通过"IP+端口"的方式访问到, 官方默认的端口是9993),我这里选搬瓦工做 moon,群晖和路由器都处于内网上, 没有外交权。
第二步,生成moon.json。
在做 moon 的机器上(搬瓦工),使用ssh的方式(Putty),进入 /var/lib/zerotier-one 文件夹,运行下面的语句
zerotier-idtool initmoon identity.public >>moon.json
即会在此目录下产生一个新文件 moon.json,使用 vi打开如下
cat moon.json
{
"id": "284b515a17",
"objtype": "world",
"roots": [
{
"identity": "284b515a17:0:d0a811e14c:0:5634a0ef9680b49d7fa518b3a013ffc61315fe24c0b4750edba82ed28e7d3936634365517f1e8a94eb28eac63f8c59b4c1a8f4e908bb5f65e95e9d0793afd641",
"stableEndpoints": []
}
],
"signingKey": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"worldType": "moon"
}
增加做 moon 机器的IP地址信息如下,IPv6的地址可以不设(用 zerotier-cli listnetworks 可以查询到)
{
"id": "284b515a17",
"objtype": "world",
"roots": [
{
"identity": "284b515a17:0:d0a811e14c:0:5634a0ef9680b49d7fa518b3a013ffc61315fe24c0b4750edba82ed28e7d3936634365517f1e8a94eb28eac63f8c59b4c1a8f4e908bb5f65e95e9d0793afd641",
"stableEndpoints": [ "192.168.191.2/9993" ]
}
],
"signingKey": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"signingKey_SECRET": "ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3",
"updatesMustBeSignedBy": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
"worldType": "moon"
}
官方给出的带 IPv6 的示例是这样的
"stableEndpoints": [ "10.0.0.2/9993","2001:abcd:abcd::1/9993" ]
第三步、建立私有网络的 zerotier 标志性文件。
运行下面的语句建立该 zerotier 标志性文件。
zerotier-idtool genmoon moon.json
第四步、将该标志性文件拷贝/或传送到所有机器上去。
运行上面的命令以后,就会在该文件夹下生成类似这样的一个新文件:000000284b515a17.moon。然后把他们拷贝到做 moon 机器的 /var/lib/zerotier-one/moons.d 目录里去(这个目录是拷贝之前手工建立的),然后重启 zerotier-one。
killall -9 zerotier-one
zerotier-one -d
除了做 moon 的机器以外,还有其他一些普通的机器,也可以按照上面的方法拷贝完成,然后重启 zerotier-one 使之生效。但也可以使用下面的语句自动完成。
zerotier-cli orbit 284b515a17 284b515a17
在该语句中,最后两组数据中, 前面一组是 moon.json 文件中"id"后面的数据,即“world ID”,后面一组可以在任意一个自己的做 moon 的机器上运行下面的代码得到,也可以在官网上 moon 机器的 Address 列上得到(连接机器列表里)。
zerotier-cli info
第五步、完成及测试
在非 moon 的机器上(路由器和群晖)运行
zerotier-cli listpeers
当你看到某一行 后面带有 moon 字样,就证明 moon 已被本机标识了(本机不能看自己,所以只能上别的机器上看)。下面语句较短者表示该机器离线或者连接质量不佳; 除了我们自己的机器, 官方至少会有3台机器位于我们的 peer 列表里。语句末尾的 PLANET 在 1.1.0 版本里显示的是 ROOT,是官方的根服务器
# zerotier-cli listpeers
200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers 3sa8ecf110 - 0 - LEAF
200 listpeers 42b9e61f30 - 0 - LEAF
200 listpeers 284b515a17 - 660 1.2.4 MOON
200 listpeers 8056c2e21c 178.63.17.204/41945;8057;8057;1.00 309 1.2.5 LEAF
200 listpeers 8841408a2e 45.32.248.87/9993;7073;6973;1.00 286 1.1.5 PLANET
200 listpeers 8bd5124fd6 5.135.180.76/59948;476;476;0.97 337 1.2.5 LEAF
200 listpeers 9d219039f3 128.199.197.217/9993;2077;1897;1.00 456 1.1.5 PLANET