使用ZeroTier搭建虚拟局域网,完成虚拟局域网内直连

2023-05-16

此文章涉及:
Zerotier速度慢的解决办法
Zerotier实际应用展示
Zerotier简单实用教程

技术背景

在经过接近一个学期的互联网安全的学习,我接触到了网络的很多种攻击,渗透与防守的方式。从这个学习的过程中,我深刻的了解到,如果想要对网络主机进行渗透,首先要对网络结构运行的原理掌握的非常透彻,才能够从中找出攻击和防守的办法。网络上的攻防,主要是利用网络本身的特性与协议设计时的缺陷等来进行的。
另外,从互联网安全的攻防的实践出发的话,主动防守的话如果没有攻击方的话看不出来效果,主动攻击的话,由于目前IPv4的地址池缺少等问题,大部分个人主机都处于路由器NAT的保护下,并不会对公网开放网络接口,因此主要的攻击手段主要为使用木马,病毒等方式感染目标机,令目标机主动接受控制指令。如果只使用单纯的网络攻击的话,目前大部分拥有公网IP的主机都是服务器。在没有向服务器管理人员取得渗透测试许可的话,直接对他人服务器进行渗透工作属于违法行为。因此直接在公网进行渗透,不仅可能有违法风险,同时服务器的安全措施一般来说都非常严密,很有可能无功而返。
因此,本论文主要讨论搭建虚拟局域网的工作,一是可以为接下来的渗透测试工作可以穿过公网,有更好的借鉴意义,二是虚拟局域网本身就具有一定的实用性,如在宿舍或外出时使用虚拟局域网连接工作主机或NAS服务器,进行继续工作等。

技术介绍

虚拟局域网实质上是一种内网穿透,而内网穿透实际上是一个存在了很久的技术。但Zerotier和传统的内网穿透技术有着很大的不同。类似于FRP、Ngrok
这样的反向代理程序,通过服务器转发数据来达到外网访问的目的,这样就需要自己有个
VPS,或者使用他人搭建的服务,据我所知的免费服务都是限速的,要是自己搭建的话,体验就要看服务器的网络质量了。
Zerotier在连接的过程,服务器不起到一个中转的作用,只是起到了一个认证的作用,其在工作的时候为每一台虚拟局域网设备做认证,如果有一台虚拟局域网内的主机打算访问另一台虚拟局域网内的主机的话,其会访问Zerotier的服务器,服务器获取两台主机的信息,并为他们做好自动的打洞,让主机双方可以拿到一个临时的公网IP,然后Zerotier服务器不再干涉后续的数据传输,两台主机实际上是P2P传输,可以达到很高的带宽,不受中转服务器的速度限制,也不吃中转服务器的带宽。
需要注意的是,服务器为双方主机打通P2P通道需要网络环境协议的支持,如果存在某一方主机无法打洞获得临时公网地址,那么将无法建立P2P连接,Zerotier会作为传统的中继服务器为双方保持通信,这会导致网络质量的急速下降,我们在设计的时候应该要极力避免这种情况。

环境搭建

Zerotier支持多种平台,如Windows,Linux,Android和Mac。在这里我们使用最为常见的Windows平台做虚拟局域网的主要平台,需要在官网进行下载并安装。此时安装完毕后Zerotier将作为一个系统服务运行,同时会在网络适配器中增加Zerotier的虚拟网卡。在这个测试环境中我安装完成后的软件版本信息如下。注意所有需要加入虚拟局域网的主机设备都需要安装该软件。

软件信息

在软件安装完成后,我们需要创建一个属于自己的虚拟局域网。在创建之前我们先需要在官网创建我们的账号。创建账号的过程较为简单在此不再赘述。免费的账号可以允许局域网里面加入50台主机,对于个人而言是完全够用的。创建账号完成后我们需要为其创建一个虚拟局域网络。点击该软件右键,点击Zerotier
Central即可进入账户的控制面板,点击上方的Network,点击Add
Network,输入虚拟局域网的名称即可创建好一个虚拟局域网。

进入中心

在网络创建完成后,服务器会为这个网络分配一个网络ID,然后我们需要在我们的客户端右键中点击Join
Network,输入我们刚刚创建的网络ID,就可以申请加入。如果我们在创建网络的时候选择认证方式为Public的话,那么网络就已经加入完成了。该网络可以由任何人加入,会缺少安全保障。因此大部分网络创建的时候是private形式的。如果是private形式的网络,我们还需要在刚刚的网络中心里点击刚刚创建的网络,在里面的控制面板中允许刚刚我们加入的主机的Noid
ID,这样就可以控制局域网的私有性。

网络环境优化

由于前面所提到的,Zerotier是利用P2P连接,最大化提升虚拟局域网的带宽,因此,P2P的链接是否能够成功建立对网络环境的影响至关重要。可以在开始菜单右键,点击"命令提示符(管理员)"或是管理员权限的powershell打开一个系统终端,输入zerotier-cli
peers
查看虚拟局域网内各主机的链接状态,DIRECT说明是成功建立P2P链接的,如果出现RELAY或不能获取到对方主机的ip地址的话,这说明P2P并没有成功建立,当前由Zerotier在进行中继链接。如果发生了中继链接的话延迟会大大的提高,ping指令的延迟会达到1000ms以上,甚至超时,无法胜任虚拟局域网的大部分工作。以下是几种避免中继的方法:

  1. uPnP。Zerotier的P2P连接是通过uPnP协议来进行握手的。目前大部分路由器都会有upnp的选项,如果发生了连接中继,我们应该在所有的终端主机的路由器上确认upnp是否打开。

  2. NAT等级。路由器的NAT等级也会影响p2p连接穿透的效果,如果路由器的NAT使用的是Full
    Cone NAT,那么连接是最为可靠稳定的。如果发现当前所处的网络环境属于Symmetric
    NAT 的话,则基本是没有办法在IPv4上打洞的。

  3. IPv6。如果前面的网络环境都没有办法改善(如没有路由器网关的控制权限等),但主机可以拥有IPv6的话,可以试图使用IPv6来进行工作。由于IPv6的地址池庞大,且当前地址池可以允许全球拥有IPv6地址,所以使用IPv6来建立Zerotier连接,实际上是不需要穿透的,因为大家都可以互相获得IPv6的工作地址。如果要启用IPv6,需要确定路由器,ISP,以及自己的主机设备都要支持且开启IPv6相关服务。软件如果可以通过IPv6通信,会进行自动切换。

  4. 自建中转。如果上面的方式都无法成功的建立,只能使用RELAY方式的话,由于Zerotier的官方服务器在外国,中继延迟会十分的高,我们可以使用自定义Zerotier中转服务器来提高中转的效率,在直连的时候还可以提高P2P握手的效率。

使用效果展示

在搭建完成并建立P2P链接后,即可以使用最高性能的虚拟局域网进行业务通信了,下面将进行网络延迟,网络带宽,实际体验三方面进行展示。

测试环境参数

主机1:学校内宿舍电信网络主机,带宽100M,Windows环境,IP:192.168.191.3
主机2:学校内教研室教育网教研室主机,带宽未知,Windows环境,IP:192.168.191.2

延迟测试

在命令提示符下使用指令ping 192.168.191.2 -t获得结果如下,以百度(www.baidu.com)的延迟测试作为对比。

延迟效果

在这里插入图片描述

可以看到,P2P状态下,虚拟局域网的访问延迟还低于百度的延迟,由于百度有做CDN和负载均衡等网络加速,其基本代表外网访问延迟的较低者,P2P效果可以得到比外网低延迟还低的性能。

网络带宽

在Windows
SMB共享文件系统下,主机1访问主机2的共享文件夹并复制一个压缩包,以平均文件传输速度判断带宽。

文件传输速度

可以看到文件的传输速度维持在3MB/s,相当于24Mbps宽带的速度,没有达到宿舍电信网络主机的最高性能,但优于绝大多数的中继式内网穿透服务。速度没有跑满的原因是可能教研室的网络负载较重,教研室主机分到的带宽不足所导致的。

实际体验

实际体验主要分为远程连接服务,远程虚拟机服务,以及局域网文件传输服务。由于局域网传输在网络带宽项进行了测试。因此主要测试前两项。
远程连接服务:使用Windows自带的RDP协议远程连接,在使用前需要先配置好主机允许远程连接。日常使用基本感觉不到延迟,只有在看视频等显示画面变化幅度较快且变化画幅较大的时候偶尔会产生掉帧现象。

远程连接

远程虚拟机:教研室电脑作为虚拟机服务器,开放虚拟机访问权限,远程电脑可以通过ip地址连接服务器,并远程连接上该电脑里的虚拟机,不需要本机存放虚拟机。虚拟机远程运行后,日常操作基本感觉不到卡顿和延迟,可以识别本地机上的USB设备并连接到远程虚拟机上。

远程虚拟机

结束语

经过对各台主机进行虚拟局域网的搭建,主机之间的通信效率大大提高,生产,工作更为方便,我们可以在任意一台主机上远程快速访问所有的虚拟局域网内的主机,访问各台电脑的共享文件夹
在搭建的过程中,我们了解了P2P协议建立的各种方法,如uPnP,自建中继服务器,IPv6等相关知识,在实践过程中对这些协议有了更深入的了解。
域网内的主机,访问各台电脑的共享文件夹
在搭建的过程中,我们了解了P2P协议建立的各种方法,如uPnP,自建中继服务器,IPv6等相关知识,在实践过程中对这些协议有了更深入的了解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用ZeroTier搭建虚拟局域网,完成虚拟局域网内直连 的相关文章

  • SocketCAN学习笔记

    1 对SocketCAN的理解 69条消息 对Socket CAN的理解 xff08 1 xff09 CAN总线原理 yuzeze的博客 CSDN博客 can socket 对Socket CAN的理解 xff08 2 xff09 Sock
  • Golang写Post请求并获取返回值

    直接上代码 xff0c 其中可以在下面代码中添加 package main import fmt net http io ioutil net url func main 需要post的数据 以key value形式提交 data 61 m
  • postMan 汉化

    1 下载postman解压安装 xff0c 下载地址Postman 2 下载汉化包 Release 9 2 0 hlmd Postman cn GitHub 选择postMan对应的版本 3 找到postman根目录我的在c盘 xff0c
  • 2022 小学组试题

    1 史密斯数 若一个合数的质因数分解式逐为位相加之和等于其本身逐位相加之和 则称这个数为smith数 如4937775 3 5 5 65837 而3 5 5 6 5 8 3 7 42 4 9 3 7 7 7 5 42 所以4937775是s
  • usaco 1 回文素数快速筛选

    求指定区间的回文素数 include lt bits stdc 43 43 h gt define N 10000010 using namespace std bool st N int cnt 61 0 primes N n m voi
  • C++ STL 学习笔记

    MAP的用法 xff1a 389找不同 给定两个字符串 s 和 t xff0c 它们只包含小写字母 字符串 t 由字符串 s 随机重排 xff0c 然后在随机位置添加一个字母 请找出在 t 中被添加的字母 示例 输入 xff1a s 61
  • 大模型平台

    大模型训练平台的算力急速增长 xff1a 据报道 xff0c GPT3 5 的训练使用了微软专门建设的 AI 计算系统 xff0c 由 1 万个 V100 GPU 组成的高性能网络集群 xff0c 总算力消耗约 3640 PF days 即
  • Float IP 浮动IP地址

    xfeff xfeff 就是多个主机工作在 同一个集群中 xff0c 即两台主机以上 每台机器除了自己的实IP外 xff0c 会设置一个浮动IP xff0c 浮动IP与主机的服务 xff08 HTTP服务 邮箱服务 xff09 绑在一起的
  • linux 下安装 c++编译器的方法

    xfeff xfeff 假设你的电脑能够访问internet xff0c 这个命令会自动从网络下载并把软件安装到本地 超级用户权限 xff1a yum y install gcc c 43 43 另外一定不要天真的认为linux 下面 编译
  • linux 内核编译错误的原因

    xfeff xfeff 直接编译centos 7 内核目录下的代码出现如下错误 xff1a root 64 localhost 3 10 0 123 el7 x86 64 make make 1 No rule to make target
  • ifconfig 看到Rx error overrun 如何解决

    xfeff xfeff 一台机器经常收到丢包的报警 xff0c 先看看最底层的有没有问题 ethtool em2 egrep 39 Speed Duplex 39 Speed 1000Mb s Duplex Full ethtool S e
  • AES-GCM算法

    AES GCM算法简介 AES GCM算法是带认证和加密的算法 xff0c 同时可以对给定的原文 xff0c 生成加密数据和认证码 参数如下 xff1a 1 xff09 带加密的原文 2 xff09 存储加密后密文 3 xff09 IV向量
  • cmake 编译c++项目

    分两步 xff1a CMakeLists txt文件编写结束以后就可以对工程进行编译了 xff0c 进入build目录 并执行cmake和make指令 xff0c 如下 xff1a 第一步 cmake span class token pu
  • sshd 无法启用的问题 Could not load host key: /etc/ssh/ssh_host_rsa_key Could not load host key: /etc/ssh/ss

    原文链接 xff1a http blog csdn net lynn kong article details 9112009 1 问题现象 版本 xff1a Grizzly master分支代码2013 06 17 部署 xff1a 三个
  • iptables nat

    NAT一般情况下分为SNAT xff0c DNAT和PNAT 此篇主要讲述的是使用iptables配置NAT xff0c 所以这3种NAT的区别和应用场景就简单的说明一下 SNAT xff1a 源地址转换 目标地址不变 xff0c 重新改写
  • Qt 的Cmake方式如何创建资源文件和添加类

    今天看到有人问Qt 的Cmake方式如何创建资源文件 xff0c 这个问题和添加类都是一样的 xff0c 也有朋友问如何添加类 xff0c 百度的回答是把cmake改成Qmake 这样等于没有回答 xff0c 根据自己的经验我在这里回答一下
  • ajax 请求头Authorization 添加账号密码访问

    在header中添加 34 Authorization 34 字段 xff0c 值为 34 api key api secret 34 进行base64加密后 在前面加入 34 Basic 34 Basic后有空格 字符串 最后形式为 34
  • Authorization—权限控制流程

    本篇是对Shiro体系架构的介绍 xff0c 本栏目大部分内容来自于Shiro官网 翻译过程中已经尽量保证用词的准确性和易懂性 xff0c 如有不准确或者不确切的地方 xff0c 请联系作者加以修改 本篇内容翻译自Authorization
  • C语言在头文件中用extern架起变量沟通的桥梁

    span class hljs comment a c span span class hljs keyword int span foo span class hljs keyword int span bar span class hl
  • 【C语言】5. 指针free后为什么要刻意指向NULL、野指针(原因、解决)、悬垂指针

    目录 1 指针free后为什么还要刻意指向NULL xff1f 2 野指针2 1 什么是野指针 xff1f 2 2 野指针形成的原因2 3 如何避免野指针 3 悬垂指针3 1 什么是悬垂指针 xff1f 3 2 示例代码3 3 解决方法 1

随机推荐

  • 【QT】UDP通信QUdpSocket(单播、广播、组播)

    目录 1 UDP通信概述2 UDP消息传送的三种模式3 QUdpSocket类的接口函数4 UDP单播和广播代码示例4 1 测试说明4 2 MainWindow h4 3 MainWindow cpp4 4 界面展示 5 UDP组播代码示例
  • Fiddler 调试HTTP工具,帮助Debug HTTP连接的免费工具

    Fiddler是一个C 实现的浏览器抓包和调试工具 xff0c fiddler启用后作为一个proxy存在于浏览器和服务器之间 xff0c 从中监测浏览器与服务器之间的http https级别的网络交互 目前可以支持各种主要浏览器如IE C
  • 对话框使用VIEW (转)

    现在的程序功能越来越复杂 xff0c 很多功能要求能在对话框中实现复杂的功能 xff0c 而在对话框中使用视图不像使用一些诸如静态控件 xff0c 编辑控件等那么方便 xff0c 下面文章用实例说明如何在对话框中使用视图 正文 http w
  • ubuntu系统下安装putty

    1 打开终端 xff0c 使用下面的命令来安装putty xff1a 1 1 sudo apt get update 1 2 sudo apt get install putty 上面两步成功则说明putty安装成功 2 接下来配置putt
  • 改变linux shell的输出效果

    文本终端的颜色可以使用 ANSI非常规字符序列 来生成 举例 xff1a echo e 34 033 44 37 5m ME 033 0m COOL 34 以上命令设置背景成为蓝色 xff0c 前景白色 xff0c 闪烁光标 xff0c 输
  • GNU ARM 汇编指令

    原文地址 http blog sina com cn s blog 59b189220100au1k html 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C 43 43 编写程序很方便 xff0c 但汇编源程序用于系统最
  • 什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,如何解决?

    什么是序列化 序列化 xff1a 把对象转换为字节序列的过程称为对象的序列化 反序列化 xff1a 把字节序列恢复为对象的过程称为对象的反序列化 怎么序列化 实现Serializable接口 xff0c 指定serialVersionUID
  • 寻迹小车笔记——红外对管(TCRT5000)原理

    一 概述 深色 xff08 黑色 xff09 的是发射端 xff0c 白色 xff08 透明 xff09 的是接收端 中间蓝色的是可以调节灵敏度的旋钮 TCRT5000光电传感器模块是基于TCRT5000红外光电传感器设计的一款红外反射式光
  • C语言判断一个数是否是水仙花数

    水仙花数是指一个N位正整数 xff08 N 3 xff09 xff0c 它的每个位上的数字的N次幂之和等于它本身 例如 xff1a 153 61 1 3 43 5 3 43 3 3 include lt stdio h gt int nar
  • C语言分类统计字符个数

    题目来源 xff1a 分类统计字符个数 PTA 本题要求实现一个函数 xff0c 统计给定字符串中英文字母 空格或回车 数字字符和其他字符的个数 函数接口定义 xff1a void StringCount char s 其中 char s
  • MIPS单周期CPU的设计——I型指令的设计

    一 一些概念 1 单周期CPU 指令周期 xff1a CPU从内存取出一条指令并执行这条指令的时间总和 CPU周期 xff1a 又称机器周期 xff0c CPU访问一次内存所花的时间较长 xff0c 因此用从内存读取一条指令字的最短时间来定
  • MIPS单周期CPU设计——lw和sw指令的设计

    1 lw xff0c sw指令格式及功能 指令 31 26 25 21 20 16 15 0 意义lw100011rsrtoffset从数存 xff08 数据存储器 xff09 中取数据写进寄存器sw101011rsrtoffset将寄存器
  • 计算机网络传输层概念及其协议

    一 概念 链路层保证的是点到点的可靠传输 xff0c 传输层保证端到端的可靠性 传输层是进程之间的通信 传输实体 xff1a 在收 发两端的传输层实现对等实体通信的硬件或软件 实现TCP协议的用户进程或者硬件称为TCP的传输实体 二 TCP
  • C++big three(构造函数、拷贝构造函数,拷贝赋值函数)

    一个类中只要带有指针类型的成员 xff0c 就必须自己写出big three xff08 构造函数 拷贝构造函数 xff0c 拷贝赋值函数 xff09 xff0c 如果没有指针类型的成员 xff0c 大部分情况下可以用默认的 字符串类是一个
  • 电网中DTU FTU RTU TTU的区别

    FTU xff08 Feeder Terminal Unit xff09 xff1a 馈线开关监控终端是装设在10KV断路器 负荷开关的开关监控装置 主要作用是采集各开关所在线路的电气参数 xff0c 并将这些信息向上级系统传输 xff1b
  • 他山之石可以攻玉

    计算之外的喜欢这一栏创建很久了 xff0c 但是一直没有内容 xff0c 目前勉强能够记录的大概就是我这一年里 xff08 2021 2022 xff09 读的书吧 人的一生很短暂 xff0c 也很宝贵 xff0c 能够在太平时节经历喜怒哀
  • 关于天干地支及其计算

    以天干地支计算日期是我国悠良的传统文化 xff0c 最近在看如何计算人的生辰八字 xff0c 写了个程序 xff0c 但是只能算年的干支 xff0c 月 日的干支计算方法太复杂了 xff0c 望之只能却步 xff0c 还是乖乖去查万年历比较
  • petalinux配置的系统启动出现cannot set terminal process group (-1): Inappropriate ioctl for device的问题解决小记

    配置好的系统在启动的时候出现cannot set terminal process group 1 Inappropriate ioctl for device 随后无法正常启动系统 经过判断后觉得是vivado生成的文件导入到petali
  • VL53L1X移植到STM32实战记录,使用软件IIC(附源代码)

    序言 VL53L1X是一个很小又很优秀的测距传感器 xff0c 它相比于上一代VL53L0X有着不小的提升 xff0c 这次毕业设计打算将这个传感器用起来 xff0c 就来移植了一下 xff0c 遇到的坑怎么说还是有一些 xff0c 故在此
  • 使用ZeroTier搭建虚拟局域网,完成虚拟局域网内直连

    此文章涉及 xff1a Zerotier速度慢的解决办法 Zerotier实际应用展示 Zerotier简单实用教程 技术背景 在经过接近一个学期的互联网安全的学习 xff0c 我接触到了网络的很多种攻击 xff0c 渗透与防守的方式 从这