PairMesh是什么?

Pairmesh是一款先进的虚拟局域网(VPN)工具,用来搭建与访问安全,易用,高性能的点对点的软件定义虚拟局域网,为远程办公的网络连接问题提供了开箱即用的解决方案。

拥抱开源,拥抱开放

PairMesh是主要使用go语言开发实现的开源项目,您可以查看并获取PairMesh源代码:https://github.com/pairmesh/pairmesh

这个repo包含了PairMesh的全部三个核心组件。具体的PairMesh服务组件架构如图:

  • Peer Node

    使用者在终端计算设备安装并启动PairMesh应用之后,PairMesh将会创建一个虚拟网络设备,用来进行虚拟局域网内的收发与路由,成为一个终端节点。

  • Portal Service

    Portal Service是集中化的节点元数据管理中心。所有的终端节点需要与其连接来进行验证登录,获取网络接入权限,并定期进行网络拓扑信息更新,从而获得网络内其他节点的信息。除此之外,节点间的实际网络信息传输并不需要经过Portal。同时Portal也负责用户的注册,登录。其前端作为可视化显示面板呈现用户,节点与网络的详细统计信息。Portal的后端元数据管理和前端可视化共同构成PairMesh的Control Plane(控制平面)。

  • Relay Service

    在大多数情况下,终端节点A与B之间可以建立稳定高速的点对点直连网络连接。但是在少数情况下,点对点的连接无法稳定创建,例如节点处于动态SNAT内网环境中。这时我们还拥有relay server作为中转服务器,用来提供可靠的网络转发传输服务。终端节点在此时将会自动切换至relay模式进行网络传输。并且在建立连接时,还会通过内置算法自动寻找最优的relay server,来使得两点间的传输延迟最低。

后现代时代的远程办公

在被Covid-19深刻影响与改变后的世界,我们都看到了远程办公的意义与价值。远程办工/远程协同的能力已成为企业IT基础架构的重要组成部分,并也许将成为衡量企业竞争力与吸引力的标准之一。

在远程办公的场景下,无论在舒适的家里,旅途的火车或飞机上,还是出差会议的酒店,您都想要使用手中的笔记本电脑或者移动设备去快速稳定地访问位于公司内网的资源,例如您在公司内部的专有开发用机,或是公司内部的共享文档系统。

在远程协同的场景下,您的同事也在家里远程办公,并在本地搭建了一个产品原型(例如游戏服务,3D建模,或是商业计划)。而您在自己的家中想要直接访问,试用,评估并推动这个原型的迭代。这甚至不需要同事将产品原型部署到公司的内网中去 - 毕竟,在产品的快速迭代中,提升的效率意味着降低的成本和巨大的价值。

而所有这些,PairMesh都可以为您做到。

点对点的轻巧架构

传统的虚拟局域网(VPN)工具采用中心化架构 - 所有终端都通过加密tunnel(隧道)连接到一个远程服务器gateway server,并由这个服务器统一进行信息解密,转译与分发。这样的架构带来了如下问题:

  • 单点故障问题

    一旦gateway server出现故障,所有连接在其上的VPN用户都将面临连接断开的风险。

  • 扩展性问题

    gateway server的单机性能也是有限的。当连接的终端过多,网络流量和计算的负载过大时,gateway server将会成为性能瓶颈。

  • 网络路径问题

    设想在海淀区的您想要和朝阳区的同事发起视频通话,但是VPN gateway server架设在位于上海的公司总部,那么所有您和同事之间的网络传输将不得不在北京和上海之间辗转折返,从而带来巨大的网络延迟。

随着企业的规模扩大,并随着企业对于远程办公/协作的网络稳定性与性能要求的日益提高,传统的VPN架构面临着来自企业需求的众多挑战。

PairMesh采用最新的点对点分布式架构。只要终端A和终端B都登录进入同一个虚拟网络,并从portal获知对方的存在与相应网络信息,一个加密tunnel便将会在A和B之间直接建立,后续的网络传输将不再需要经过任何中转的gateway server。在这样的由众多点对点直连所构成的mesh(网格)网络下,我们有效解决了传统VPN架构所面临的挑战:

  • 不再有gateway server的单点性能瓶颈

  • 网络性能不再依赖gateway server的地理与网络环境,点对点网络延迟大幅降低

  • 任何一个单点的故障都不会造成整个网络的可用性风险。

*如上文所介绍过,在某些特定环境下,点对点tunnel无法稳定建立,所以我们还有辅助的中转服务器relay service作为备用方案。

您的信息安全,我们最在乎

PairMesh使用最新的 Noise Protocol 协议框架进行加密传输,并且在框架下采用多种安全保障措施,确保您的网络传输安全无虞:

  • 对等公钥和隧道源 IP 地址之间的关联。

  • 使用基于 NoiseIK 的单次往返密钥交换.

  • 使用新的计时器状态机机制对用户透明地处理所有会话创建。

  • 短的预共享静态密钥(Curve25519点)用于 OpenSSH 风格的相互认证。

  • 提供高度的身份隐藏之外,还提供了强大的完美前向保密性。

  • 使用 ChaCha20Poly1305 身份验证加密将数据包封装在 UDP 中可以实现传输速度。

  • 通过 PairMesh 管控面使用非对称加密的方式对 IP 地址签名并包含过期时间,避免 Credential 泄露。

  • 所有从终端节点发起的登录请求,在portal端不仅要进行密保验证,同时也要验证相应的机器信息,才能够被允许接入网络。这样即使密码或Token泄露,非法的节点也无法接入网络。

  • 在切换至中转服务器relay模式时,在终端节点和中转服务器之间的所有TCP连接都需要在握手阶段通过对节点的信息进行验证才能够建立。只要那些已经被portal注册过的节点才能够被允许接入中转服务器,进行后续的网络传输。

  • 连入同一虚拟局域网络的所有终端节点都使用不同的密保密码,并且任意一组点对点连接都使用独一无二的唯一密码进行保护,有效防止密码泄露对于整个网络的安全冲击。

开箱即用的SaaS体验

想要立即开始PairMesh为您带来的高效便利的远程协作体验,您只需要:

  1. 登陆 https://www.pairmesh.com/

  2. 使用GitHub或微信进行注册与登录

  3. 登录之后进入 https://my.pairmesh.com/console/keys 创建属于您的设备密码。

  4. 记得把它保存到一个安全的地方。密码生成之后只会为您显示一次。这也是密码安全保障的措施之一。

  5. 下载与您的终端设备平台与操作系统相匹配的pairmesh应用,并安装运行。

  6. All Set!在 https://my.pairmesh.com/console/devices 中找到在同一个虚拟局域网络中您想要连接的远程地址,用您想要的方式连接它们,即刻开启PairMesh为您带来的可靠快捷的远程办公协同体验!

搭建属于您自己的PairMesh

如果您希望搭建属于自己的一整套PairMesh服务,您可以:

  1. 确保您有完整的golang与nodejs的编译与运行环境。

  2. 获取我们的开源代码:

  3. git clone https://github.com/pairmesh/pairmesh

  4. 执行 make 编译之后,您将获得pairmeshpairrelaypairportal的二进制可执行文件。

  5. pairportal部署在可访问的机器上。使用yaml文件进行相关设置。具体的yaml设置方式与pairportal的启动方式详见repo的README。

  6. 代码库的webui文件夹内是portal的vue前端。部署前端使其与后端pairportal连接,然后通过前端进行用户的注册与登录等初始化管理。

  7. pairrelay部署在可访问的机器上,并通过设置yaml文件使其连接至您的pairportal。具体的yaml设置方式与pairrelay的启动方式请详见repo的README。

  8. pairmesh是您的终端节点应用。将其在需要接入虚拟局域网的终端设备内启动:

export PAIRMESH_GATEWAY_API=<您的portal后端服务部署地址>
export PAIRMESH_GATEWAY_MY=<您的portal vue网站地址>
pairmesh -k <您的密码或token>

即可开始使用您搭建的PairMesh系统。

来和我们一起让PairMesh变得更好

我们相信社区的力量。我们期待您可以帮助PairMesh使它变得更好。您有很多方式可以为PairMesh做出贡献:

  • 参与PairMesh的开发,提交PR至我们的代码repo。在README中您可以看到所有您可以改进优化PairMesh的地方和方式。repo地址:https://github.com/pairmesh/pairmesh

  • 在Github上提交bug report或者feature request让我们看见,我们会第一时间为您做出修补,解答或功能实现。提交地址: https://github.com/pairmesh/pairmesh/issues

  • 参与到我们的社区讨论。欢迎您的发言。社区地址:https://github.com/pairmesh/pairmesh/discussions

  • 发布PairMesh的使用教程和blog,让更多的人可以体验PairMesh服务。

  • 如果喜欢PairMesh的话,记得在repo上给出您的小星星⭐

在使用中,也欢迎您将问题,建议或反馈发邮件给我们。联系方式:contact@pairmesh.com

《酷Go推荐》招募:

各位Gopher同学,最近我们社区打算推出一个类似GoCN每日新闻的新栏目《酷Go推荐》,主要是每周推荐一个库或者好的项目,然后写一点这个库使用方法或者优点之类的,这样可以真正的帮助到大家能够学习到

新的库,并且知道怎么用。

大概规则和每日新闻类似,如果报名人多的话每个人一个月轮到一次,欢迎大家报名!戳「阅读原文」,即可报名

想要了解更多 Golang 相关的内容,欢迎扫描下方

「GoCN酷Go推荐」后现代时代远程办公网络问题的golang开源解决方案 —— PairMesh...相关推荐

  1. 「GoCN酷Go推荐」Golang的Ealstic链接库

    背景介绍 Elasticsearch是一个分布式.高扩展.高实时的搜索与数据分析引擎,用于海量文档的搜索.有些项目会将Elasticsearch当做存储海量数据的数据库使用,可见其查询性能之高效.作为 ...

  2. 「GoCN酷Go推荐」​QQ机器人 go-cqhttp

    什么是 go-cqhttp?✦ QQ机器人,可以做的事儿太多了,比如一个UP主需要群发多个QQ群,以便通知粉丝们开播:再比如可以检测群内或发给自己的消息,而通过代码直接回复做的简单回复.比如检测群内有 ...

  3. 「GoCN酷Go推荐」go语言位操作库 — bitset

    bitset库实现了bitsets数据结构,这是一种正整数和布尔值映射关系的结构,它比map[uint]bool更高效 什么是bitsets✦ bitsets基本思想是用一个bit位来标记某个元素对应 ...

  4. 「GoCN酷Go推荐」高性能内存缓存 ristretto

    背景 ristretto 是 dgraph 团队开源的一款高性能内存缓存库,旨在解决高并发场景下的缓存性能和吞吐瓶颈.dgraph 专攻的方向是高性能图数据库,ristretto 就是其图数据库和 K ...

  5. 「GoCN酷Go推荐」快速搭建私有云服务 go-btfs

    # 1. go-btfs 是什么?# go-btfs 是一个去中心化的文件存储平台,无论图片.文件.视频等等各类文件.每个人都可以在自己电脑上安装部署 BTFS 节点,然后大家的节点相互连接,构成一个 ...

  6. 「GoCN酷Go推荐」JSON 数据获取器 JID

    01 推荐理由   JSON 格式数据适用范围非常广泛,一个内容丰富的json数据可能很大,使用 JID 可以让你非常舒服的获取到想要到数据. 02 简介 JID 是一个过滤JSON格式数据 cli ...

  7. 「GoCN酷Go推荐」Golang轻量级桌面程序wails2教学

    01 推荐理由 不依赖cgo!不依赖cgo!不依赖cgo!真的不依赖cgo,且跨平台,原生渲染 无嵌入式浏览器,轻量级,生成的文件很小,而且只有一个可执行文件就可运行. 02 功能介绍 后端使用标准 ...

  8. 「GoCN酷Go推荐」简单易用的性能分析工具——nitro

    #1 推荐理由 Golang官方在程序性能分析方面提供了用来分析cpu/内存等采样信息的pprof,以及用来追踪和分析运行时事件的trace,这两个工具对于分析程序的性能瓶颈可以说是得心应手.但是,对 ...

  9. 「GoCN酷Go推荐」漏桶限流库 — uber-go/ratelimit

    上次有同学分享了 单机限流器 time/rate 库,讲了 Golang 标准库中基于令牌桶实现限流组件的 time/rate 使用,同时也讲了一些限流算法原理. 这里分享一个 uber 开源的一套基 ...

最新文章

  1. torch.nn.LogSoftmax()与输入具有相同尺寸和形状的张量,其值在[-inf,0)范围内
  2. Touch UI:高质量的移动端UI框架介绍
  3. linux中的vsprintf_Git29 年超 100 万次 commit,Linux 内核何以发展至今?
  4. Java基础--多态
  5. PHP字符串相关函数
  6. “咏刚的家”全新改版
  7. 基于麻雀算法优化的核极限学习机(KELM)分类算法 - 附代码
  8. 编译自己功能定制的Fedora7内核
  9. 喜讯 | 大势智慧获得全球软件领域最高权威CMMI5认证
  10. php laravel 下载远程图片
  11. [原创]MASM32新手指南
  12. matlab泊松分布随机数和图像_常用分布
  13. qt 5.12.1 下载安装详细教程
  14. parallel循环java_使用Java8新特性parallelStream遇到的坑
  15. java毕业设计宠物寄养预约系统Mybatis+系统+数据库+调试部署
  16. 微信第三方平台授权流程说明
  17. 如何用数学课件制作工具画函数切线
  18. P3265 [JLOI2015] 线性基
  19. Python —— 字典攻击
  20. 微服务gomicro搭建

热门文章

  1. 【Nexus】通过Nexus搭建Npm私库
  2. linux双显卡开机界面,红帽linux系统nvidia显卡启动
  3. 高智商翻木块java_高智商游戏翻木块
  4. matlab彩色图像边缘检测,canny算法实现彩色图像边缘检测
  5. 2022年1月23日学习总结
  6. Gmail:如何快速将邮件全部已读
  7. TikTok运营工具精选
  8. 面对技术,你焦虑的是什么?
  9. Python 之 进阶 学习
  10. 朵朵的小三班全体老师致家长一封信