ZeroTier is a smart Ethernet switch for planet Earth.
通俗来讲就是 Peer to Peer (P2P) ,ZeroTier 根服务器记录请求路径来做类似于DNS的解析。主要功能,就是可以把多个不同网络的设备连接在一起,用来就像在一个局域网下 如下图
ZeroTier 配置一个虚拟网段172.12.0.0/16,在家中加入这个网络中,即可访问位于公司172.12.0.101
Zerotier 定义了几个专业名词:
PLANET 行星服务器,Zerotier 根服务器
MOON 卫星服务器,用户自建的私有根服务器,起到代理加速的作用
LEAF 网络客户端,就是每台连接到网络节点。
注册 zerotier 服务
https://my.zerotier.com/
内网目标机器安装客户端
Linux
curl -s https://install.zerotier.com | sudo bash
其他操作系统
下载地址:https://www.zerotier.com/download/
客户端加入创建的网络

机器 A(这里选用了云服务器)
内网机器
机器 B跟 C (两笔记本)
1. 生成及修改 moon.json
首先登陆到机器 A 上,前往路径 /var/lib/zerotier-one。运行命令
zerotier-idtool initmoon identity.public >>moon.json
此命令会在当前目录下生成一个文件 moon.json,文件内容如下:
{
"id": "9d2456s2d7",
"objtype": "world",
"roots": [
{
"identity": "9d255ee2d7:0:7f36dcd6a7ef8ee21a0cf801e194a72ef36780b4c8578ff51fjsghfae23fc26da8c1803e7dfd17699226516ece92e752d3999bd14fb23065cf78762cb699bab",
"stableEndpoints": []
}
],
"signingKey": "8060e833f6f0f46068dfdc97545f8c9b1b1a9358fdcf664c64ee9078f5088c48a7806c82e75cbddad898129485444cc7e83db6344d1f2e518b9b9d132c327986",
"signingKey_SECRET": "e70cbfefddac12yh67506f3e54d376bb4c6830d6960e7a153ed0cb9aa6f4af2ecd8d423d4cae59195d2ab0398ede0673cf67h633bce5ec4140493d37d6a50ab9",
"updatesMustBeSignedBy": "8060e833f6f0f46068dfdc97545f8c9b1b1a9358fdcf664c64ee9078f5my6d48a7806c82e75cbddad898129485444cc7e83db6344d1f2e518b9b9d132c327986",
"worldType": "moon"
}
其中 id 为机器 A 在 ZeroTier 中的 id,本文为 9d2456s2d7。
修改 “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
此命令会生成一个签名文件在当前目录下,文件名如 0000009d2456s2d7.moon (机器 A 的 id 为 9d2456s2d7)
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 生成的 0000009d2456s2d7.moon 拷贝进 moons.d 文件夹中,并重启
ZeroTier(此步好像有些许 bug,重启电脑为佳)
4. 将内网机器连接上 moon 节点
方法一
在机器 B、机器 C 中的 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
方法二
在机器 B、机器 C 上执行
zerotier-cli orbit 9d2456s2d7 9d2456s2d7
查看是否连接
在其他机子执行以下命令将会显示该moon服务器:
zerotier-cli listpeers
如果出现下面情况说明连接上
相关博客为
https://mp.weixin.qq.com/s/g3JFEaNGaLJCeDfr-Di0Hg
https://blog.zczc.cz/2018/03/14/ZeroTier-moon-%E8%AE%BE%E7%BD%AE%E6%95%99%E7%A8%8B/