前言
很多时候我们需要异地组网,例如公司和家里(或者总公司和子公司)电脑有时候需要组建出一个内网,方便管理和随时连接使用两方的资源,例如远程桌面、文件共享、内网通信软件等等。
市面上可以实现的方式有很多,例如蒲公英异地组网,问题是无论是购买硬件还是接入费用成本要求都比较高。所以一般中小企业或者个人用户,建议使用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
右击选中重启