再探:创建 zerotier moon 其实很简单

现在回过头来,发现上次 zerotier 的 moon 确实没有成功,完成了一半。昨天再次,应该是再再次实验,这回是真的成功了,不信我也不想管你了。下面与大家分享一下正确的过程。老规矩,怎么建立 zerotier 网络,不是本文的范围。而我在这里只是简单强调的一点就是,下面 moon 的建立,这里不需要做特别的设置,按照官方默认的设置好即可。

第一步,基础:建立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,下载到本地电脑上,使用 Editplus 之类的文本编辑器打开如下

{
  "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 标志性文件。

将修改后的 moon.json 再上传到搬瓦工原目录,覆盖掉原来的文件。并运行下面的语句建立该 zerotier 标志性文件。

zerotier-idtool genmoon moon.json

第四步、将该标志性文件拷贝/或传送到所有机器上去(2021-12-7 修正)。
运行上面的命令以后,就会在该文件夹下生成类似这样的一个新文件: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

在该语句中,284b515a17 是在做 moon 的机器(搬瓦工)上,通过下面的命令得到的:

zerotier-cli info

做 moon 的机器,可以不用加入我们的网络而独立存在,只需使用上面的 orbit 命令做我们的 moon 即可。因此如果你愿意,可以把 id (这里是 284b515a17) 共享给别人使用。

第五步、完成及测试
在非 moon 的机器上(路由器和群晖)运行

zerotier-cli listpeers

当你看到某一行(例如本例中的板瓦工) 后面带有 moon 字样,就证明 moon 已被本机标识了(本机不能看自己,所以只能上别的机器上看)。下面语句较短者表示该机器离线或者连接质量不佳; 除了我们自己的机器, 官方至少会有3台机器位于我们的 peer 列表里。语句末尾的 PLANET 在 1.1.0 版本里显示的是 ROOT,是官方的根服务器。

root@NATCAP:~# 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

啰嗦的话留以后再说吧,。。。。。。


82.93%(34)

17.07%(7)
1 2下一页
发表评论?

54 条评论。

  1. 发现用动态域名作为moon的地址不行,最后listmoons得到的stableEndpoints节点是空的,就好像没配置一样样

  2. 给大家伙提个醒,zerotier-one 1.2.8 有bug,要到1.2.10才会修复。 所有这个版本的moon 怎么弄都是不会成功的。
    https://github.com/zerotier/ZeroTierOne/issues/744

  3. 这个zerotier可用来翻#墙吗

  4. 如果要更改moon的默认端口9993到其他端口,应该怎么操作呢?
    客户端又要做什么更改呢?

    • 改端口是一个比较麻烦的事情,涉及的面比较多。
      针对linux类,在 zerotier-one 的帮助里面已经说了,怎么修改。
      但是对于手机,我看了下,好像没有这样的设置项,你又怎么修改?
      而windows,我没有认真研究过,目前没有环境,不太清楚。

      除了手机,可能另外一个方法就是修改安装目录下 zerotier-one.port 指定的端口。你可以试试。

      不知不同的设备设置使用不同的端口是否能正常工作,需要验证。

      我觉得最好的方法就是直接在官网上修改,大家一切变化。

      如果你还有新的更进一步的问题,最好求助于官方帮助,我也实践不深。

  5. 有偿安装zerotier moon 可以么

    • 一般不提供有偿服务。
      要真收费,估计我的胃口不会小。
      告诉我你的联系方式吧,帮你试试。

    • 在windows 10下面加入 moon 时,遇到这样的错误提示

      missing authentication token and authtoken.secret not found (or readable) in /var/lib/zerotier-one

      最后以管理员账户重新登录windows 10,就一切正常了。

  6. 差不多弄懂了。主要还是因为英语太差了。官方其实说的已经比较详细了。我说几点吧。首先,moon server不需要做任何配置,也不需要加入任何网络。其次,stableEndpoints是moon的公网ip。然后,重启服务用这条命令/etc/init.d/zerotier-one restart,文章中说的命令好像不能完全重启。最后,在其他客户端orbit moon的id moon的id 就可以加进去了,运行zerotier-cli listmoons就能看到moon。最后,roots指的是moon群,root是moon群中的seed,当然一般我们只需要一个moon就够用了。

    • 说明一下,按照官方教程,moon和其他机器一样,都是要先加入自己的网络里。

      就像我们平时用zerotier网络一样,先把自己该建立的网络建起来,然后再是设置其中的某些机器为moon就可以了。

      • 对,可以这样,但是如果earth连不上去了,moon就无法和围绕moon转的客户端通信了。
        最好的方式,是moon配置的时候用公网ip。然后其他客户端添加moon的时候,通过earth中介找到moon。之后,就算earth连不上了,但是只要客户端有moon的公网ip,一样也可以和其他绕moon转的客户端通信。
        如果moon添加的是内网的ip,虽然也能加速,但是如果earth连不上的话,其他客户端需要借助earth来解析moon的ip地址,此时就连不上moon了。
        我就是添加的公网moon的,没有问题。

    • 这样的话做一个roots群可以给多个网络做转发服务吧。可以支持更大的流量转发服务

  7. 还有,你把284b515a17加为moon,为什么最后显示的moon是42b9e61f30?

  8. 增加里面的IP地址信息如下,这个为什么加这个ip是怎么来的没有说啊

  9. 请问zerotier moon 服务器需要加入 Network ID吗?

  10. 192.168.191.2这个是怎么设置的呢?

回复给 lucktu ¬
取消回复

*