Zerotier 异地组网方案初探

前言

我之前想要异地组网的话,一般都采用内网穿透的方法,但是这个内网穿透有弊端就是都是要通过公网服务器转发流量,对于大流量的传输就比较不方便,我发现了Zerotier 这个工具非常的好用,是基于p2p的

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

概念

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

Earth

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

Network

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

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

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

Planet

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

Moon

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

Leaf

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

网络拓扑

Zerotier 对于客户端支持的非常全面,几乎包括了大部分系统

客户端下载地址:Download

docker客户端(docker compose)

version: '3'
services:zerotier:image: zerotier/zerotiernetwork_mode: hostcontainer_name: zerotiercap_add:- NET_ADMINdevices:- /dev/net/tunvolumes:- ./zerotier-one:/var/lib/zerotier-onecommand:- 网络id

我在linux中使用的时候喜欢用docker部署,因为非常的方便,我也推荐大家在linux环境下使用docker部署

注册并且登录 网站:ZeroTier Central 

我推荐使用微软账户登录

他提供的第三方登录有谷歌登录,Github和微软

谷歌不用说了肯定是访问不了的,Github不定时抽风,所以最好还是微软账户登录

虽然微软在国内的访问速度也是比较迷

进入之后点击Create A Network 创建一个网络,设置的话不用改默认就行了,记下网络id就行

将docker容器和windows客户端分别启动,并且加入网络,在网站下点击你创建的网络,最下面看下在线的设备

 如果发现没有的话,我们可以看看linux下的docker容器日志

docker compose logs -f zerotier

日志最后输出一行 zerotier  | 200 join OK 代表已经加入网络成功了

测试

在最上面设备的图中我们看到linux服务器的虚拟ip是172.27.14.177 ping一下试试

C:\Users\Administrator>ping 172.27.14.177正在 Ping 172.27.14.177 具有 32 字节的数据:
来自 172.27.14.177 的回复: 字节=32 时间=19ms TTL=64
来自 172.27.14.177 的回复: 字节=32 时间=4ms TTL=64
来自 172.27.14.177 的回复: 字节=32 时间=6ms TTL=64
来自 172.27.14.177 的回复: 字节=32 时间=4ms TTL=64

在服务器端linux中ping下异地的windows客户端

[root@localhost ZeroTier]# ping 172.27.16.228
PING 172.27.16.228 (172.27.16.228) 56(84) bytes of data.
64 bytes from 172.27.16.228: icmp_seq=1 ttl=64 time=3.84 ms
64 bytes from 172.27.16.228: icmp_seq=2 ttl=64 time=3.78 ms
64 bytes from 172.27.16.228: icmp_seq=3 ttl=64 time=4.49 ms
64 bytes from 172.27.16.228: icmp_seq=4 ttl=64 time=5.82 ms
64 bytes from 172.27.16.228: icmp_seq=5 ttl=64 time=3.98 ms
64 bytes from 172.27.16.228: icmp_seq=6 ttl=64 time=5.93 ms
64 bytes from 172.27.16.228: icmp_seq=7 ttl=64 time=4.27 ms
64 bytes from 172.27.16.228: icmp_seq=8 ttl=64 time=4.62 ms
64 bytes from 172.27.16.228: icmp_seq=9 ttl=64 time=4.02 ms
64 bytes from 172.27.16.228: icmp_seq=10 ttl=64 time=20.2 ms
64 bytes from 172.27.16.228: icmp_seq=11 ttl=64 time=4.25 ms
64 bytes from 172.27.16.228: icmp_seq=12 ttl=64 time=3.85 ms
64 bytes from 172.27.16.228: icmp_seq=13 ttl=64 time=10.6 ms

发现也是通了,组网成功

刚开始的时候延迟会比较大,等待一会就慢慢会降下来

那现在只能两个设备互访,那如何访问服务器所在的局域网内的所有设备呢???

我目前的方案是  SSH代理

可以参考我之前的文章

http://t.csdnimg.cn/8juHT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/758208.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

驶向高效巅峰:Nginx高并发性能优化实战指南与场景案例拆解

身处瞬息万变的互联网世界,高并发场景下服务器的性能优化尤为重要,而Nginx正是这一领域的超级舵手。本文将深入浅出地揭示Nginx在高并发环境下的性能优化之道,并通过具体场景配置案例,助你掌握这一关键技术,提升服务器…

静态网络配置

一、查看网络命令 1.命令行查看网络配置 1、查看ip\硬件设备-网卡 ifconfig -a ifconfig ens160 网卡名称 ip addr show ip addr show ens160 nmcli device show ens160 nmcli con up ens160 2、主机名称 hostname hostname hfj.huaxia.com 3、查看路由和网关 rou…

慎投!共10本「On Hold」期刊被剔除,2本中科院TOP仍在调查中!

2024年3月18日,科睿唯安本年度第三次更新了Web of Science核心期刊目录。 此次SCIE/SSCI期刊目录共8本期刊发生变动,情况如下: 经小编查询,此次更新后,共有7本“On Hold”期刊被数据库剔除,其中还包括2024年…

手撕算法-最长公共子序列(二)

最长公共子序列(二) 分析:典型的动态规划,直接看代码了。 代码: import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** longest common sub…

VS+QT Debug正常但Release无法识别头文件

!!!,这个问题一般是在第一次编译的时候遇见的,包括之前使用debug也是 在Qt Installation一定要修改成自己版本的编译器,修改一次以后基本是不用再修改的

【机器学习】TinyML的介绍以及在运动健康领域的应用

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

全球盲盒火热下,海外盲盒APP助力我国盲盒出海

盲盒具有不确定性,与各类热门影视动漫合作推出的专属盲盒商品,吸引了无数年轻人,成为了年轻人的娱乐消费首选方式。 在互联网电商的推动下,盲盒在全球内的市场规模迅速扩大。受到市场增长的影响,各类资本公司也纷纷进…

深入浅出前端本地储存(1)

引言 2021 年,如果你的前端应用,需要在浏览器上保存数据,有三个主流方案: CookieWeb Storage (LocalStorage)IndexedDB 这些方案就是如今应用最广、浏览器兼容性最高的三种前端储存方案 今天这篇文章就聊一聊这三种方案的历史…

基于python的4s店客户管理系统

技术:pythonmysqlvue 一、背景 进入21世纪网络和计算机得到了飞速发展,并和生活进行了紧密的结合。目前,网络的运行速度以达到了千兆,覆盖范围更是深入到生活中的角角落落。这就促使管理系统的发展。网上办公可以实现远程处理事务…

pyvista可视化代码优化

同时显示多组点云 import os import glob import randomimport pyvista as pvdef display_multi_mesh(meshes: list, titlesNone, point_size3, opacity0.9):num len(meshes)pl pv.Plotter(shape(1, num))pl.set_background([0.9, 0.9, 0.9])for i in range(num):pl.subplo…

jmeter打开文件报异常无法打开

1、问题现象: 报错部分内容: java.desktop does not export sun.awt.shell to unnamed module 0x78047b92 [in thread "AWT-EventQueue-0"] 报错部分内容: kg.apc.jmeter.reporters.LoadosophiaUploaderGui java.lang.reflect.Invo…

docker小白第十四天之Portainer与CIG

Portainer简介 Portainer是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。 Portainer命令安装 # 一个容器可以同时起多个-p端口,restartalways表示随时在线,重启机器后也…

5 Redis主从集群

文章目录 Redis主从集群1.1主从集群搭建1.1.1 伪集群搭建与配置1.1.2 分级管理1.1.3 容灾冷处理 1.2主从复制原理1.2.1 主从复制过程1.2.2 数据同步演变过程 2.1 哨兵机制实现2.1.1 简介2.2.2 Redis 高可用集群搭建2.2.3 Redis 高可用集群的启动2.2.4 Sentinel 优化配置 3.1 哨…

数字化转型急迫推进,效益提升却难见明显成效!

数字化现已不再是一种选择,而是企业适应市场环境、保持竞争力的必然要求。但是,企业在投入大量人力、物力进行数字化转型后,却常常面临效益不明显的问题,这种现象值得我们深入剖析与探讨。 我们需要明白数字化转型并非简单地购置先…

如何使用ArkUI从0-1写一个开发购物应用程序(下)

接下来我们继续学习如何用ArkUI来开发一个购物应用程序(下半部分) 底部组件是由一个横向的图片列表组成,iconPath是底部初始状态下的3张图片路径数组。遍历iconPath数组,使用Image组件设置图片路径并添加到List中,给每…

【RabbitMQ】【Docker】基于docker-compose构建rabbitmq容器

本文通过docker-compose构建一个单体的rabbtimq容器。 1,docker、docker-compose环境 首先需要有docker和docker-compose环境,docker安装[1],docker-compose安装[2]。 通过下列命令确定docker、docker-compose是否安装成功。 [root192 ge…

【大屏设计】如何进行软件系统网站大屏页面设计?不限于智慧城市、物联网、电商、园区领域

【大屏设计】如何进行软件系统网站大屏页面设计?不限于智慧城市、物联网、电商、园区领域 一、什么是网站大屏设计二、网站大屏设计原型素材三、网站大屏设计设计素材四、他山之石 一、什么是网站大屏设计 网站大屏设计是网站设计中至关重要的一部分,因…

8种Kubernetes集群中Pod处于 Pending状态的故障排除方法

文章目录 一、Pod与容器二、Pod的阶段(状态)三、Pod 状态故障排除3.1 检查 Pod 事件3.2 检查资源可用性3.3 检查污点和容忍度3.4 检查节点亲和性设置3.5 检查持久卷声明3.6 检查配额和限制3.7 验证 Pod 和容器映像3.8 分析调度程序日志 四、用于排查 Pen…

Django动态路由实例

Django动态路由实例 先说需求&#xff1a; 比如我前端有两个按钮&#xff0c;点击按钮1跳转到user1的用户信息页面&#xff0c;按钮2跳转user2用户信息页面&#xff0c;但是他俩共用同一个视图层 直接上代码 路由层 urlpatterns [path(user/<str:username>/, views…

Swift 结构化并发之全局 Actor 趣谈

概览 在 Swift 结构化并发构成的体系中,一个称为“演员”(Actor)的成员扮演了非常重要的角色,它被用来隔离和同步执行中的数据。 除了普通 Actor 以外,还有一个全局“演员”(Global Actor)的概念,它是做什么的?又有什么与众不同的长处呢? 在本篇博文中,您将学到如…