基本概念
ZeroTier is a smart Ethernet switch for planet Earth.
通俗来讲就是 Peer to Peer (P2P) ,ZeroTier 根服务器记录请求路径来做类似于DNS的解析。主要功能,就是可以把多个不同网络的设备连接在一起,用来就像在一个局域网下 如下图
ZeroTier 配置一个虚拟网段172.12.0.0/16,在家中加入这个网络中,即可访问位于公司172.12.0.1
专有名词
Zerotier 定义了几个专业名词:
PLANET 行星服务器,Zerotier 根服务器
MOON 卫星服务器,用户自建的私有根服务器,起到代理加速的作用
LEAF 网络客户端,就是每台连接到网络节点。
开始使用
注册 zerotier 服务
创建网络
配置网络:
注意:设置为公用任何人只要知道你的网络ID就可以加入,设置为私有在有你网络ID的时候需要你在后台同意后才能加入你的私有网络
内网目标机器安装客户端
Linux:
curl -s https://install.zerotier.com | sudo bash
其他操作系统:
下载地址:https://www.zerotier.com/download/
客户端加入创建的网络
网络ID在:
Linux:
zerotier-cli join 159924d630e1083d
windows:
然后点Join即可
zerotier 同意客户端接入
这里要注意啦!! 如果在上面网络设置为PUBLIC则无需在这里设置!
设置为PRIVATE时候 需要在后台允许一下操作方法如下:
如上图,给客户端分配 的局域网 IP, 当然网段可以通过 本页Advanced 调整。
确定网络联通(下图是moon后连接图)
建立MOON
建立中转服务器 moon Zerotier 的官方服务器在国外,国内客户端使用时延迟较大,网络高峰期时甚至各个客户端节点之间访问不了。此时 moon 中转服务器就显得非常重要,它的主要功能是通过自定义的服务器作为跳板加速内网机器之间的互相访问。
准备
搭载moon(卫星级服务器,用户自建的私有根服务器,起到中转加速的作用)
- 机器 A(这里选用了云服务器)内网机器
机器 B跟 C (两台式机)
设置教程
1.生成及修改 moon.json
首先登陆到机器 A 上,前往路径 /var/lib/zerotier-one。运行命令
zerotier-idtool initmoon identity.public >>moon.json
此命令会在当前目录下生成一个文件 moon.json,文件内容如下:
{
"id": "89122e085c",
"objtype": "world",
"roots": [
{
"identity": "89122e085c:0:d9470e28b82a07dd0aefe9138721f8d8aa0a7d37cf58a7c3f8a676d066f97d22c78b235529c7d3e308c2f7a96bc2764e154024cf6970f345c2588f73387319b2",
"stableEndpoints": []
}
],
"signingKey": "eda59632b50c178aee6b9d985a910b380e43769cd52016b6d24e4fc7b8902a511e94fb6f77019434ad46720c670d5def67e9984ce704ca1da5874875c746f2ff",
"signingKey_SECRET": "77efcc9bc6bddc500a731138f758ef370453fb57dd7fa0f2c41207d5b01f6a6ddc78221ecab928f2ab2b1d5cb8a027f71a05cb66a16299ee8b2b111a11564fd6",
"updatesMustBeSignedBy": "eda59632b50c178aee6b9d985a910b380e43769cd52016b6d24e4fc7b8902a511e94fb6f77019434ad46720c670d5def67e9984ce704ca1da5874875c746f2ff",
"worldType": "moon"
}
其中 id 为机器 A 在 ZeroTier 中的 id,本文为 89122e085c。
修改 “stableEndpoints” 为机器 A 的公网的 ip。如:
"stableEndpoints": [ "1.2.3.4/9993","2001:abcd:abcd::1/9993" ]
若公网机器没有 IPv6 地址,则将其修改为
"stableEndpoints": [ "1.2.3.4/9993" ]
2.生成签名文件
修改完 moon.json 后,执行命令
zerotier-idtool genmoon moon.json
此命令会生成一个签名文件在当前目录下,文件名如 00000089122e085c.moon (机器 A 的 id 为 89122e085c)
3.将 moon 节点加入网络
方法一
在机器 A 中的 ZeroTier 目录中建立子文件夹 moons.d
不同系统下的 ZeroTier 目录位置:
Windows: C:\ProgramData\ZeroTier\One
Macintosh: /Library/Application Support/ZeroTier/One (在 Terminal 中应为 /Library/Application\ Support/ZeroTier/One)
Linux: /var/lib/zerotier-one
FreeBSD/OpenBSD: /var/db/zerotier-one
将在机器 A 生成的 00000089122e085c.moon 拷贝进 moons.d 文件夹中,并重启
ZeroTier(此步好像有些许 bug,重启电脑为佳)
方法二
在机器 B、机器 C 上执行
zerotier-cli orbit 89122e085c 89122e085c
查看是否连接
在其他机子执行以下命令将会显示该moon服务器:
zerotier-cli listpeers
如果出现下面情况说明连接上
本站也提供一个国内的MOON文件(已更新,那台服务器放弃了)
请勿用于非法用途!
107 条评论
正需要使用zerotier呢,学习了,谢谢
感谢大佬分享的moon
感谢国内的moon,最近很需要
自建的moon节点,很奇怪主机与moon节点的连接是Relay的而不是Direct的,而在moon节点的服务器上看与各个主机都是直连的。
这个有的时候和网络环境有关 nat穿透还是有一定失败率的
感谢分享境内 MOON 中转,请问如果是通过 orbit 命令方式来使用的话,moon 的地址和种子要怎么填写呢?
我更新到帖子了里面吧
这样的话好像只能添加为LEAF,还是要把文件放到moons.d里面才行。
理论上不用。 没实际测试过
放文件肯定是最好的
机器A按上述配置好MOON之后,机器B上listpeers显示A节点还是LEAF节点,这是什么原因呢?
Moon文件有拷贝到 moons.d目录了么? 然后 重启下 zerotier的服务
学习下
可以使用多个moon作为跳转嘛
可以的。
大佬,请问你搭建moon用的是几M带宽的云服务器?如果只是国内和朋友组局域网联机玩游戏的话,大概需要几M带宽?⌇●﹏●⌇
如果穿透成功,大概需要的带宽1M不到 不过玩游戏不传送文件的话1M也够了。
好的,感谢大佬!大佬,看你评论是有搭建私有的ZeroTier中心节点的想法,我想请教下大概思路是怎么样的?(我在网上搜了几个帖子,大概有两种:1、引入第三方的docker包运行,不太清楚第三方包有没有对源代码做修改,启动后在第三方包实现的控制台(controller)里创建节点。2、自己从GitHub上拉下来ZeroTier的代码,然后改了一下源代码里请求官方IP,改成自己的服务器,然后构建运行。第一种方法,如果有改源码里的请求官方的IP的话,应该是实现私有化目的了,如果没有的话,那感觉就是自己启动了个controller控制台,本质上还是请求官方IP进行创建节点。)另外官网的这个搭建私有节点的帖子让我有点困惑(https://docs.zerotier.com/zerotier/moons/),流程上和大佬你文章里搭建moon节点是一样的。(感觉可能是翻译的问题,网上有帖子把搭建根节点说成私有化了)。问题比较杂乱,还请大佬不吝赐教!
如果你希望完全不被ZeroTier官方影响 可以去琢磨下N2N
按照你的说法 是根节点的私有化, 我还没去实施,有计划提供了,看了下文档说明差不多UI和管理系统要自己开发了。moon 只是一个卫星节点还是依附于官方服务器的。
具体文档:
https://docs.zerotier.com/self-hosting/network-controllers
https://github.com/zerotier/ZeroTierOne/tree/master/controller
https://docs.zerotier.com/service/v1
感谢您分享的国内MOON
节点已更新,之前的作废了
节点可能会失效 晚点我重新建立一个新的给大家。多留意下这个文章
好的,谢谢提醒
说实话我都想在国内搭建一个私有的ZeroTier中心节点了。。
中心节点客户端配置起来复杂一些吧,MOON就可以,国内还可以访问官方中心节点,暂时不是太需要
看情况吧 如果有必要我就去弄个 PS:我也懒得弄