前言

很多时候我们需要异地组网,例如公司和家里(或者总公司和子公司)电脑有时候需要组建出一个内网,方便管理和随时连接使用两方的资源,例如远程桌面、文件共享、内网通信软件等等。

市面上可以实现的方式有很多,例如蒲公英异地组网,问题是无论是购买硬件还是接入费用成本要求都比较高。所以一般中小企业或者个人用户,建议使用zerotier即可满足大部分要求(免费用户为50台主机),蒲公英的免费版本组网虽然简单,可是网速很低,所以推荐有服务器的还是自行搭建比较好。

网络上很多关于zerotier教程的概念和描述都比较模糊,也没详细解释相关流程操作,本文会尽可能修正和解释。

原理思路

  • 由于zerotier官方服务是在国外的服务器,有些地区可能会有连接慢、无法连接的情况。所以这里组合部署为:官方服务 + 私有云服务器(有公网IP的实体服务器) + 客户端,即私有云服务器作为moon中转节点使用。
  • 在官方服务使用连接有问题时,可以经由私有云作为中转,从而提升zerotier的稳定性。

行星服务器 Planet 和 月亮服务器 Moon 区别

ZeroTier 对于此的描述是这样的(机器翻译):

一个行星 Planet 上的所有 ZeroTier 节点有效地居住在一个单一的数据中心内。这使得它很容易直接连接任何地方的设备,但它的缺点是没有互联网连接就无法工作。网络连接远非完全可靠,有时出于安全原因,用户可能希望将一组节点与互联网的其他部分完全 "隔空"。
我们引入了添加你自己的用户定义的根服务器的能力。由于我们居住的数据中心是行星 Planet ,所以用户定义的根的集合被称为月球 Moon。当一个节点 "环绕 "一个月球 Moon 时,它会将月球的根添加到它的根服务器集。围绕行星 Planet 运行的节点仍将使用行星根,但如果它们看起来更快或者没有其他可用的根,它们将使用月球的根。

1. 配置zerotier网络

1.1. 到https://my.zerotier.com/ 注册账号
1.2. 创建网络,随后获得并记下网络ID
1.2. 配置都比较简单,新手一切按默认即可,你也可以设置你所需要的其他类型的IP地址

2. 安装、搭建Linux moon端

2.1. 运行官方安装脚本:curl -s https://install.zerotier.com/ | sudo bash
2.2. 启动并开启zerotier服务 :systemctl enable --now zerotier-one.service
2.3. 测试是否安装成功:zerotier-cli -v,成功的话则会显示版本号。

3. 配置moon服务端

3.1. 首先把本moon中转服务器加入到在开始时zerotier所创建的网络ID:zerotier-cli join 网络ID,运行:zerotier-cli info,如果显示:200 info 网络ID 软件版本号 ONLINE则表示成功。此时,在zerotier web管理界面里面的Members项目中应该就可以看见本服务器已经加入了,勾选:Auth?允许该设备连接即可。

3.2. moon配置
3.2.1.进入zerotier的配置文件目录: cd /var/lib/zerotier-one
3.2.2. 生成配置文件sudo zerotier-idtool initmoon identity.public > moon.json
3.2.3. 随后在该目录会新装一个:moon.json文件,编辑:nano moon.json

  • "id"这行中记下该moon ID,
  • 找到:"stableEndpoints": ["xxx.xxx.xxx.xxx/xxxx"],把[]内容按照实际修改成:["你的moon服务器公网IP地址/端口号(UDP)"],同时,必须保证服务器防火墙已经开放了该UDP端口(默认是9993)。
  • 保存该文件
  • 生成签名文件:sudo zerotier-idtool genmoon moon.json,然后在cd /var/lib/zerotier-one目录下可以发现新增了一个文件,如:000000moonID.moon
  • mkdir moons.d新建一个用于存放签名文件的目录,mv /var/lib/zerotier-one/000000moonID.moon /var/lib/zerotier-one/moons.d把该签名文件移动进去。
  • 重启zerotier:systemctl restart zerotie-one
  • 查看是否配置成功:zerotier-cli listmoons,若成功则显示详细配置信息,否则只会显示:[]

至此,moon中转服务器端已经配置完成

4. 配置客户端

在加入网络后,客户端都会新建一个虚拟网卡用作连接,如无必要的话暂时不需要更改该网卡的设置

4.1. Windows

4.1.1. 下载Windows客户端:https://www.zerotier.com/download/
4.1.2. 安装后在图形界面,加入网络ID,之后在以下两种方法中任选其一

  • 打开服务程序services.msc, 找到服务"ZeroTier One", 并且在属性内找到该服务可执行文件路径:C:\ProgramData\ZeroTier\One\, 打开该文件夹, 并且在其下建立moons.d文件夹,然后将moon服务器下载000moonID.moon文件,拷贝到此文件夹。再重启该服务即可(计算机右键管理-找到服务双击打开-找到zerotier one右键重新启动即可)

  • 以管理员身份运行powershell,运行zerotier-cli orbit moonID moonID

4.3. Linux

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

4.3.2. 加入网络ID:zerotier-cli join 网络ID,之后在以下两种方法中任选其一

  • 以root身份运行powershell,运行zerotier-cli orbit moonID moonID
  • 直接在moon服务器端的/var/lib/zerotier-one目录下下载000000moonID.moon文件。然后在客户端主机的/var/lib/zerotier-one创建moons.d文件夹,并且将生成的000000moonID.moon文件拷入,并重启服务即可。

4.2 测试客户端和服务器连接

  • 首先,在客户端和服务器都得知正确的虚拟内网IP,然后,如有需要,可以现在修改虚拟内网IP网段。

在客户端运行:zerotier-cli listpress,显示:

200 listpeers <ztaddr> <path> <latency> <version> <role>
200 listpeers moon中转服务器公网IP/端口;10238;7922 4 1.8.6 MOON

从以上内容得知,服务器IP出现在内容组并已经被设定成MOON类型.此时在zerotier web界面把需要连接的客户端勾选上auth?即可。

  • 从客户端ping一下服务器的虚拟内网IP,如果能ping通则表明搭建已经成功,随后可以进一步测试其他内网服务如tightVNC、内网通等内网软件。

若不成功,则尝试重启客户端的zerotier服务后再试

补充

  • zerotier的基本命令
    
    Available switches:
    -h                      - Display this help
    -v                      - Show version
    -j                      - Display full raw JSON output
    -D<path>                - ZeroTier home path for parameter auto-detect
    -p<port>                - HTTP port (default: auto)
    -T<token>               - Authentication token (default: auto)

Available commands:
info - Display status info
listpeers - List all peers
peers - List all peers (prettier)
listnetworks - List all networks
join <network ID> - Join a network
leave <network ID> - Leave a network
set <network ID> <setting> - Set a network setting
get <network ID> <setting> - Get a network setting
listmoons - List moons (federated root sets)
orbit <world ID> <seed> - Join a moon via any member root
deorbit <world ID> - Leave a moon
dump - Debug settings dump for support

Available settings:
Settings to use with [get/set] may include property names from
the JSON output of "zerotier-cli -j listnetworks". Additionally,
(ip, ip4, ip6, ip6plane, and ip6prefix can be used). For instance:
zerotier-cli get <network ID> ip6plane will return the 6PLANE address
assigned to this node.


- 各个操作系统的配置文件路径:

Windows: C:\ProgramData\ZeroTier\One
Macintosh: /Library/Application Support/ZeroTier/One
Linux: /var/lib/zerotier-one
FreeBSD/OpenBSD: /var/db/zerotier-one



- 如果在web界面删除过接入的客户端设备,则会在短时间内无法在客户端自主加入到服务器,而需要在web界面MANUALLY ADD MEMBER中填写并加入客户端的设备码。客户端获取自身设备码方法:在客户端本机运行zerotier-cli info

- 在Windows中,所谓重启服务并不是关闭、打开zerotier的图形软件,而是在任务管理器-服务中找到ZerotierOneService右击选中重启

往下滑,显示更多内容