软媒设计
[Zerotier-One]使用云服务器搭建Moon节点 加速中转速度

算是zerotier-one的重度用户了,虚拟网络功能真的太好用了!但是p2p中转模式有点弱鸡,打算自建moon节点加速无法直连场景的网速问题。

国内的云服务器的网络带宽是真的贵,去年重金购入的阿里云的轻量云香港节点,峰值带宽30M每月1T流量,网络延迟只有40ms;好用的不行。

0x01 安装zerotier-one

各版本系统安装命令参考官方页面 Zerotier-One Download

0x02 初始化moon配置

  1. 初始化配置

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

    identity.public公钥文件,在zerotier的安装目录下。通常是在/var/lib/zerotier-one下;如果找不到可使用 whereis zerotier-idtool

  2. 增加公网ip配置

    一定是外网ip,不要使用0.0.0.0等通用ip,否则会失败。

    在生成的moon.json中增加stableEndpoints配置节点,9993为默认端口号,可以修改。

    "stableEndpoints": ["47.xxx.xxx.xxx/9993"]
    ## 如果要修改端口,需要增加primaryPort配置,同时stableEndpoints中的端口号也要改成对应的。
    "primaryPort": "10086"
    
  3. 生成签署配置

    > zerotier-idtool genmoon moon.json 
    wrote 0000009fxxxxx93.moon (signed world with timestamp 1598935041657)
    

    执行完erotier-idtool genmoon命令后,会生成0000009fxxxxx93.moon的文件,需要将这个文件放到zerotier-one目录下的moons.d/目录里。

  4. 重启服务

    > service zerotier-one restart
    

0x03 客户端增加moon节点

配置方法1(推荐):

在客户端上执行 zerotier-cli orbit <world ID> <seed> world ID和seed可通过在moon节点服务器上执行 zerotier-cli info 命令查看,通常这两个值是一样的。

## 在moon节点服务器上次查询world ID
> zerotier-cli info
200 info 9fxxxxx93 1.4.6 ONLINE

## 在客户端上执行orbit命令,加入moon节点
> zerotier-cli orbit 9fxxxxx93 9fxxxxx93
200 orbit OK

## 查看moon节点是否添加
> zerotier-cli listpeers
200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers 9fxxxxx93 47.xxx.xxx.xxx/9993;3676;2056 53 1.4.6 MOON

到此节点添加完成,此方法的好处是,不需要操作文件,一个命令全搞定。

配置方法2:

将在moon节点端生成的0000009fxxxxx93.moon复制到本地的zerotier-one的安装目录下的moons.d/文件夹中,然后重启服务即可。

此方法不推荐使用,操作繁琐还容易出错。

0x04 奇怪的bug

在macos上安装的zerotier-one,会导致无法连接到网络,杀进程、脱离网络甚至重启都没用!至今已经遇到了两次!每次都是干等,大概20分钟左右恢复!
杀掉进程瞬间网络短暂恢复!!!目前无新版本可更新!!!!

0x05 参考引用

  1. 官方文档手册:Zerotier Manual
  2. CSDN:ZeroTier-One配置moon心得
  3. zerotier-cli命令帮助
zerotier-cli info	             #查看当前zerotier信息
zerotier-cli listpeers	             #列出所有的peers
zerotier-cli listnetworks	     #列出加入的所有的网络
zerotier-cli join <network>	     #加入某个网络
zerotier-cli leave <network>	     #离开某个网络
zerotier-cli listmoons	             #列出加入的Moon节点
zerotier-cli orbit <world ID> <seed> #加入某个Moon节点
zerotier-cli deorbit <world ID>      #离开某个Moon节点