Linux VPS搭建ZeroTier的Moon中转服务器

大伟哥 提交于 2020-01-29,周三, 10:59

春节期间外面武汉冠状病毒肆虐,适宜呆在家里折腾自己喜欢的东西。继上次使用Zerotier组建可以穿透内网的虚拟局域网之后,大伟哥这次要做的就是使用现有的阿里云ECS服务器搭建ZeroTier的Moon中转服务器。

Moon是什么?为什么需要Moon?

ZeroTier通过自己的多个根服务器帮助我们建立虚拟的局域网,让虚拟局域网内的各台设备可以打洞直连。这些根服务器的功能有些类似于通过域名查询找到服务器地址的DNS服务器,它们被称为Planet。然而这里存在一个非常严重的问题,就是Zerotier的官方行星服务器都部署在国外,从国内访问的时候延迟很大,甚至在网络高峰期的时候都没法访问,这也会导致我们的虚拟局域网变得极不稳定,经常掉链子。

为了应对网络链接的延迟和不稳定,提高虚拟局域网的速度和可靠性,Zerotier允许我们建立自己的moon卫星中转服务器。

作为Moon服务器不需要具备太强大的CPU性能/内存空间和存储空间,虚拟机、VPS、或者云服务器甚至一个树莓派都行,当然,这台服务器需要长时间可靠在线并且具有静态IP地址(ZeroTier官网上说公网IP或者内网IP都可以,只是如果用的是内网IP的话,在外网的设备就只能依靠Planet而不能使用moon了)。

大伟哥这里使用的是阿里云提供的ECS服务器,操作系统是Ubuntu Server Linux。阿里云是国内首屈一指的云计算服务商,也是大伟哥推荐的唯一国内云计算服务商,使用多年来一直非常稳定。

Moon服务器配置过程

1. 首先需要和普通设备一样,下载并安装ZeroTier:

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

安装完成后得到一个ID:

*** Success! You are ZeroTier address [ 9c960b9ac2 ]

2. 加入网络:

sudo zerotier-cli join 3efa5cb78a961967
200 join OK

3.进入ZeroTier的默认安装目录,生成moon配置文件:

cd /var/lib/zerotier-one
sudo zerotier-idtool initmoon /var/lib/zerotier-one/identity.public >> moon.json
bash: moon.json: Permission denied
sudo su
zerotier-idtool initmoon identity.public > moon.json

注意,这里如果使用sudo命令提示权限不够,需要使用sudo su命令切换到root用户进行操作,才能生成moon.json文件。

4.修改moon.json文件。

生成的文件样式如下:


 "id": "9c960b9ac2",
 "objtype": "world",
 "roots": [
  {
   "identity": "9c960b9ac2:0:daca38dfc5f3a5e2113178cbecda4b741c85cc3aa6fff9ab86285146bb0c7030a604be1d8fc5489bb54a30c30933ae1a700fb9197cd3905eb8e230200e68f3c8",
   "stableEndpoints": []
  }
 ],
 "signingKey": "676f0c29eb8d6f2f00ce22ee2082b3ec15b21e95dd2f1305d5066c43372c4060fe34379de508b4ecfbcff768629b6e217c07228f80687f77970bfd87b067ed6c",
 "signingKey_SECRET": "39de9f7ab16d0adb035276b7281f73344a0df8af59cf937d4b032078037fd0f97c1006e050c2805882a6807cb636240de1a49797580a24b575ad7d944a17613d",
 "updatesMustBeSignedBy": "676f0c29eb8d6f2f00ce22ee2082b3ec15b21e95dd2f1305d5066c43372c4060fe34379de508b4ecfbcff768629b6e217c07228f80687f77970bfd87b067ed6c",
 "worldType": "moon"
}

这里我们需要根据自己服务器的公网静态IP,修改stableEndpoints那一行格式如下,其中11.22.33.44为你的公网IP,9993是默认的端口号:

"stableEndpoints": [ "11.22.33.44/9993" ]

5. 根据之前修改的moon.json文件生成真正需要的签名文件:

root@daweibro:/var/lib/zerotier-one# zerotier-idtool genmoon moon.json
wrote 0000009c960b9ac2.moon (signed world with timestamp 1580398410930)

可以看到生成的文件名称是和服务器之前是到的ID是对应的。

6.创建moons.d文件夹,并把签名文件移动到文件夹内:

sudo mkdir moons.d
sudo mv 0000009c960b9ac2.moon moons.d/

7.只需要重启ZeroTier服务就好了,没必要重启电脑,服务器如果做点什么配置更改都要重启的话那就搞笑了。到这里,moon服务器的配置就算全部完成了。

8.其他机器如果要使用moon服务器,必须要在本地加入之前生成的moon签名文件并重启服务才能生效。有两种方法。一种是在本机的Zerotier安装目录创建moons.d文件夹,然后下载该签名文件放在创建的moons.d目录里,重启服务。另一种是直接使用命令zerotier-cli orbit

sudo zerotier-cli orbit 9c960b9ac2 9c960b9ac2
200 orbit OK
sudo service zerotier-one restart
zerotier-one stop/waiting
zerotier-one start/running, process 18347
sudo zerotier-cli listpeers
200 listpeers     
200 listpeers 34e0a5e174 147.75.92.2/9993;3061;2939 123 - PLANET
200 listpeers 3a46f1bf30 185.180.13.82/9993;7565;7794 271 - PLANET
200 listpeers 778cde7190 103.195.103.66/9993;7566;7693 373 - PLANET
200 listpeers 992fcf1db7 195.181.173.159/9993;3063;7158 396 - PLANET
200 listpeers 9c960b9ac2 121.41.23.39/9993;3052;3052 11 1.4.6 MOON
200 listpeers af415e486f 35.236.47.35/31469;3063;7873 192 1.4.1 LEAF

上面可见,moon服务器已经可以被其他常规节点访问到了。

大伟哥亲测发现,不管是Linux还是Windows,使用zerotier-cli orbit命令行都是最简便快捷的办法,只要一行命令就能省去下载再上传的复杂步骤。

有了Moon服务器,效果怎么样?不得不说,改善非常明显。之前用putty通过移动宽带SSH连接到长城宽带后的机器的时候卡的厉害,有时候刚进入系统还来不及输入下一条命令就没反应了,现在用起来和在同一个局域网内一样,完全感觉不到延迟。这简直可以算得上是鼠年来的第一个小成就了!

添加新评论

此字段内容将保密,不会被其他人看见。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。
验证码
发布评论前,请通过下面的验证,以免被当作垃圾评论机器人屏蔽。
2 + 11 =
计算出这道简单的算术题并键入答案。例如、1+3,就输入 4。