受疫情影响,远程办公还得维持数周,各位老师需要的资料越来越多,访问公司内网变得十分必要。春节期间,刚好看过一个内网穿透访问NAS的视频。配置简单,方便使用,就搭在了内网服务器上,供各位老师使用。可好景不长,没过一会儿就有人反应网速慢,甚至连不上的情况。ping 了一下, 下至500ms,上至丢包的延迟实在是让人头疼。


查了一番资料,发现原来软件根服务器在国外,这就意味着在使用的过程中,你先得去连上国外的根服务器,然后才能从国外服务器上连到内网中。跑了这么一大圈,怪不得这么慢。


幸好的是,这款软件提供了使用自建辅助根服务器的方式来减少延迟。接下来,我们就来说说怎么搭建根服务器。


噢对了,这么半天还没说这个软件叫什么呢。ZeroTier。这款软件我们上边也提到了,使用非常简单,这也是我选用它最重要的原因,所以我就多啰嗦怎么安装了,你一定会。


我们直奔主题,搭建Zerotier的根服务器。


在ZeroTier中,根服务器被称为 Moon 。所以你在查资料的时候,碰到的 ZeroTier Moon 说的也就是这回事。


首先呢你需要一个额外带有公网IP的服务器,这个服务器装上 ZeroTier 上后不需要加入之前的网络节点,它只用来中转请求。


接下来就该配置 ZeroTier 让它不再是一台普通节点的机器,而是成为 Moon。
为了方便,我们切到 ZeroTier 的目录中。

cd /var/lib/ZeroTier/


然后生成 Moon.json 用来配置根服务器的IP。

zerotier-idtool initmoon identity.public >>moon.json

在生成的 Moon.json 文件中的 "stableEndpoints" 中加入你的公网IP

{
  "id": "deadbeef00",
  "objtype": "world",
  "roots": [
    {
      "identity": "deadbeef00:0:34031483094...",
      "stableEndpoints": [ "8.8.8.8/9993" ]
    }
  ],
  "signingKey": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
  "signingKey_SECRET": "ffc5dd0b2baf1c9b220d1c9cb39633f9e2151cf350a6d0e67c913f8952bafaf3671d2226388e1406e7670dc645851bf7d3643da701fd4599fedb9914c3918db3",
  "updatesMustBeSignedBy": "b324d84cec708d1b51d5ac03e75afba501a12e2124705ec34a614bf8f9b2c800f44d9824ad3ab2e3da1ac52ecb39ac052ce3f54e58d8944b52632eb6d671d0e0",
  "worldType": "moon"
}

其中公网IP后的9993是端口号。默认就是9993。
配置好 Moon.json 后,就可以用 zerotier-idtool genmoon moon.json 生成最终的配置文件。

随后将生成好的这个文件,复制到软件目录下的 moons.d 目录中。


重启服务即可。


接下来就是将这个 Moon 加入到每一个需要使用这个根服务器的节点中。也就是在内网中以及需要访问的内网的机器中执行 zerotier-cli orbit deadbeef00 deadbeef00。其中deadbeef00是你Moon的节点,也就是之前生成Moon.json中的ID。


至此,所有的工作就完成了。你可以使用 zerotier-cli listpeers  命令来验证是否完成。如果最后一行多出你配置的Moon就算成功。


在我配置好以后,延迟降到了50ms以下。由于我Moon服务器的带宽太小,访问查看小文档没什么大问题,一碰到上传下载就有点费劲了。


最后。以上的配置在Linux中可以,但是在Windows中没能成功。如果你在Windows上成功配置了Moon,记得告诉我。