×

Zerotier - 分分钟组网工具最全食用方案

hqy hqy 发表于2022-12-09 13:58:38 浏览484 评论0

抢沙发发表评论

mpty, ); --tw-ring-offset-width:0px; --tw-ring-offset-color:#fff; --tw-ring-color:rgba(59,130,246,0.5); --tw-ring-offset-shadow:0 0 transparent; --tw-ring-shadow:0 0 transparent; margin: 0px 0px 40px; padding: 0px; height: 1px; width: 820px; background: rgba(151, 151, 151, 0.21);">

之前一直在用v2ray 服务器在内网开端口,相当于通过代理的方式访问内网,利用内网的 openwrt 中 smartdns 做 dns 解析服务。

同事最近买了个群晖,但是家里没有公网 IP,所以一直在用 Frp 做内网穿透。但是 FRP 使用过的比较清楚,速度依靠公网服务器的带宽,而且每起一个服务都要暴露一个端口。

在此之上,我进行了一番搜索,发现了一个新东西——Zerotier。

这是一个类似于 ZooKeeper 的工具,一款异地组网工具。每台服务器上只需要安装对应的客户端,连接到同一个网络,就可以实现 IP 互相访问。在此之上,还有自定义 DNS 服务器的功能,将通过 IP 这个步骤转换为通过域名进行访问,相当实用。

纵观国内的文章,基本都是上来就一步一步搭建,没有任何解释性说明。在几天的折腾后,搞了篇解释比较强的文章。

根据 Zerotier 的官方简介,是这个意思:

Connect team members from anywhere in the world on any device.

ZeroTier creates secure networks BETween on-premise, cloud, desktop, and mobile devices.

概念

所有的设备都是客户端,连接方式是点对点。在路由器下面的话是用 uPnP 的方式进行转发实现客户端到客户端的直接连接。如果 uPnP 没有开启,会通过传统的服务器转发的方式进行连接。

Earth

根据其介绍,将地球上的所有设备连起来。那这里的 Earth 指的就是整体的一个服务。

Network

每一个 Network 包含的所有设备都在同一个网络里。每个网络有一个 Network ID。各客户端通过这个 ID 连接到此网络。当然,一个账号是可以创建多个网络的。

网络氛围 Public 和 Private。一般我们自己组网是要用 Private,需要在页面授权设备才可以进行访问。Public 权限好像不太有人会需要吧..

以下介绍的所有概念都是属于 Network 下的。

Planet

星球嘛。指的是官方提供的服务器节点。各客户端都是通过这些服务来互相寻址的。相当于 zookeeper 的不同节点。

Moon

自定义的 Planet。由于 Zerotier 没有国内节点,在两个设备刚开始互连的时候有可能需要通过国外的节点寻址(不过我没发现有什么慢的)导致创建连接的速度偏慢。在自己的网络里搭建 Moon 可以使连接提速。

Leaf

客户端。就是连接到网络上的每一个设备。其实经过测试,Moon 也是客户端的一种。这里特指没有额外功能,单纯用于连接的客户端。

开始使用

Zerotier 支持基本所有设备:Windows、MacOS、iOSAndroid、Linux、FreeBSD、Synology、QNAP、WD MyCloud、OpenWRT。再不济,支持 Docker,凡是能跑 Docker 能联网的设备都可以用。

其中 iOS 不支持自定义 Moon,Android 的自定义 Moon 要下载非官方的 App。

本着不给自己找麻烦的原则,能用 ui 就用 ui,能一键搭建就一键搭建。给了 docker-compose 就直接用,不要折腾乱七八糟的东西。

注册账号

官方网站登录,我直接用 Github 登录。登录后发现我两年前玩过这个东西…

创建网络

不用输入任何没用的信息,上来直接创建网络,只需一次点击,网络就创建好了。

记住这个 Network ID,以后会经常见到。

点击网络进去,默认配置基本够用。

连接客户端

MacOS

官方下载链接

安装好后,启动。

在下面输入网络 ID,点击 Join Network 即可。

Windows 的 UI 跟这个一毛一样。

iOS

AppStore 搜索 Zerotier,下载。点击右上角加号,输入网络 ID,OK。

Linux

根据官网给的说明,直接运行脚本即可。

如果你安装了 GPG 密钥验证,用下面这条命令

脚本会自动将 Zerotier 的源添加到 apt/yum 里并安装。

安装好后,运行命令

即可。

群晖

DSM 7 不支持 root 安装第三方程序,因此官网建议使用 Docker 来实现。英文文档在这里:https://docs.zerotier.com/devices/synology/

简单说就是 ROOT 权限。

首先,将虚拟网卡添加到启动项:

以上执行后就有虚拟网卡了。然后创建 docker 容器:

启动后,执行以下加入网络

有 compose 的话,我是这么操作的:

加入网络:

OpenWRT

软路由上,有一个 Zerotier 工具,启用,输入网络 ID,保存并启用即可。

Docker

首先启用虚拟网卡(跟群晖一样,这步我还不知道怎么搞)

用以下 docker compose 文件:

我不知道为什么网上的人都爱用第三方很久不更新的镜像。用官方的不香吗。

直接启动即可。

授权

每一次添加了客户端后,在控制面板上会显示新设备加入,勾上前面的勾表示对这个设备授权,会给其分配 IP,显示 zerotier 客户端的版本号和物理地址。

免费版最多一个网络可以有 50 个设备。真大方.. 怎么用都够用了。

使用

好了,这回,只要输入对应的虚拟 IP,就可以访问对应的设备了。这些设备相当于都处于同一个局域网下了。你会发现,速度相当快了。

状态管理

命令行的使用

所有的设备都是使用 zerotier 相同源码编译的客户端。我们平时主要操作的就是 zerotier-cli。其他的,zerotier-one 是运行程序,zerotier-idtool 是生成客户端 id 使用的。zerotier-cli 要使用root权限运行。

查看所有设备

zerotier-cli peers

Path 指的是连接时连接到的 IP 地址。这台机器是我最头疼的一台,它给 zerotier 的地址都是 ipv6 的,导致它的节点与其他 ipv4 的节点没办法互联,搞了我好几天了。

不过也可以看见,同一内网下的话,IP 会使用内网的 IP,不需要再经历转发的流程。

其中 link 代表了连接状况。DIRECT 代表可以直接连接,RELAY 代表需要转发。转发的速度当然会慢一些,因此尽量保证你的 NET 类型为 A/B。(跟 switch 学来的)这里我还没有细致研究,不过只要你的路由器支持 uPnP,一般都是直连。

这里有连接方式的官方介绍,我懒得看:https://docs.zerotier.com/zerotier/troubleshooting#recommended-local-network-and-internet-gateway-configuration

查看网络

zerotier-cli listnetworks

这里有以下信息:网络 ID、名称、本机的虚拟 IP 地址,和网络状态。其中,网络状态 OK 表示正常,REQUEST_CONFIGURATION 表示没有 uPNP,连不上,ACCESS_DENIED 表示还没有授权。其他的状态我还没见过。

查看连接情况

zerotier-cli info

高级

自定义 Moon

任何一个节点都可以作为 Moon 使用。当然,正常的我们肯定会选择公网 IP 的节点,一般都会使用云服务器。

官方文档在这里:https://docs.zerotier.com/zerotier/moons

那么第一步就是搞一台云服务器,在上面连接好网络。

进入配置文件夹,linux 上的是。执行

打开的文件大概长这个样子:

在其中的数组中填上本机的,一般端口都是 9993。如果你服务器支持 ipv6,填上 ipv6 也是不错的。

服务器要打开 9993 端口!

然后执行:

会生成一个 000xxxx.moon 的文件,将其放在 moons.d 文件夹中。

这个 000xxx 就是此 mood 的 id。

在与其连接的客户端上,执行:

其中,第一个是 Word ID,第二个是 moon id。不用考虑细节,两个一样就对了。

这样,在连接的时候,就可以看到这台机器已经从 LEAF 变成了 MOON。

自定义 controller

Controller 就相当于一个完整的 zerotier 服务。由于 iOS 端不支持自定义 controller,我也没做这个东西。等我把家里的网络重新整理一遍再来玩这个。

自定义 dns

使用 zerotier/zeronsd 来进行 DNS 的设置,官方文档在这里:https://docs.zerotier.com/zeronsd/quickstart

这个功能目前还是 BETA 版,我将在把家里的网络整理好后再来配置 DNS。

这个 DNS 处于网络的里面,主要用于避免客户端以 IP 进行访问,太复杂了。



打赏

本文链接:https://www.kinber.cn/post/3214.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客