利用ZeroTier组建国内虚拟局域网


基本概念

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/

客户端加入创建的网络


Linux

zerotier-cli join 17d7123456c1ed14b #上图创建网络生成的16位ID


windows

在这里插入图片描述

或者是cmd 后出入跟 linux一样


在这里插入图片描述

zerotier 同意客户端接入
点击第二部创建的网络,进入网络详情 ,同意客户端

如上图,给客户端分配 的局域网 IP, 当然网段可以通过 本页Advanced 调整。

确定网络联通(下图是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": "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://blog.csdn.net/dingjianjin/article/details/104235222