WireGuard 系列文章(五):Netmaker 简介 - 创建和管理 WireGuard 网络的平台

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: WireGuard 系列文章(五):Netmaker 简介 - 创建和管理 WireGuard 网络的平台

Netmaker 是一个使用 WireGuard 创建和管理快速、安全和动态虚拟 overlay 网络的平台。

关于 Netmaker

什么是 Netmaker?

Netmaker 是创建和管理虚拟 overlay 网络的工具。如果您至少有两台机器与互联网接入,您需要连接到一个安全的隧道,Netmaker 将为您服务。如果您有成千上万的服务器分布在多个位置、数据中心或云上,Netmaker 也适合您。无论机器在哪里,Netmaker 都能安全地连接它们。

Netmaker 使用这些机器并创建了一个平面(flat)网络,这样它们就可以轻松安全地相互通话。如果你熟悉 AWS,它就像一个 VPC,但是由任意的计算机组成。从机器的角度来看,所有这些其他的机器都在同一个街区,即使它们分布在世界各地。

让 Netmaker 与众不同的是它的速度和灵活性。Netmaker 更快,因为它使用内核 WireGuard。它更加动态,因为服务器和代理是完全可配置的,这使您可以处理各种不同的用例。

如何使用 Netmaker?

依靠 WireGuard 在机器之间创建通道。Netmaker 的核心是管理跨机器的 WireGuard,以创建合理的网络。从技术上讲,Netmaker 是两个东西:

  • 管理服务器,称为 Netmaker
  • Agent,称为 Netclient

作为网络管理服务器,您与服务器交互以创建和管理网络和设备。服务器持有这些网络和设备的配置,这些配置可以由 netclients (agent) 检索。

Netclient 安装在任何你想添加到给定网络的机器上,无论这台机器是虚拟机、服务器还是物联网设备。Netclient 与服务器联系,服务器告诉它应该如何配置网络。通过在许多机器上同时进行这些操作,我们创建了一个动态的、完全可配置的虚拟网络。

Netmaker 服务器通常不路由流量。否则,这将是一个中心辐射(hub-and-spoke)模型,这是非常慢的。相反,Netmaker 只是告诉网络上的机器它们如何能够直接到达彼此。这就是所谓的 全网状(full mesh)网络,速度要快得多。即使服务器宕机,只要现有的机器没有实质性的改变,你的网络仍然可以正常运行。

🧠 备注

Netmaker 之于 WireGuard,类似于 Istio 之于 Envoy。

Netmaker 是控制面,负责帮你创建、管理和控制 Wireguard 的所有复杂的网络配置。

WireGuard 是数据面,负责具体的网络流量路由。

而这也是我们决定使用 Netmaker 的原因:帮助我们从管理 WireGuard 配置,使我们从复杂的 WireGuard 配置中解放出来。

Netmaker 架构

Netmaker 架构

Netmaker 核心概念

WireGuard

就不用过多介绍了。这是真正的工作核心。

Mesh 网络

即 Full mesh:

Netmaker Full Mesh

更多细节参见:全网状网络(Full mesh)

网状网络通常比其他拓扑结构更快,但是建立起来也更复杂。WireGuard 本身提供了在设备之间创建加密隧道的方法,但是它没有提供建立完整网络的方法。这就是 Netmaker 的用武之地。

Netmaker

Netmaker 是一个基于 WireGuard 的平台,它允许用户在他们的设备之间创建网状网络。Netmaker 可以根据用例创建 完全 部分的网状网络

Netmaker 做了很多工作来为您设置配置,这样您就不必设置配置了。这包括像 WireGuard 端口 (port)、端点 (endpoint)、公共 ip(public ip)、密钥和对等节点(peer)之类的内容。Netmaker 的工作就是尽可能抽象网络管理,这样你就可以简单地点击创建网络,点击添加机器到网络就可以完成网络的创建工作。也就是说,每台机器(节点)是不同的,可能需要特殊的配置。这就是为什么 Netmaker 设置了实用的默认设置,而 Netmaker 中的所有内容都是完全可配置的。

Node

Netmaker 网络中由 Netclient 管理的机器称为 Node,正如您将在 UI 中看到的那样。Node 可以是一个虚拟机、一个裸机服务器、一台台式计算机、一台物联网设备,或者安装了 netclient 的任何其他连接到互联网的机器。节点只是网络中的一个端点,它可以向所有其他节点发送流量,并接收来自所有其他节点的流量。

🧠 备注

Netmaker 的 node 就是 WireGuard 的 Peer/Node/Device,只不过在该 node 上,除了安装有 wireguard 之外,还会安装有 netclient。

SystemD

就是 Linux 系统中常见的 SystemD。

Netmaker 的 netclient (控制所有节点上的网络的 agent) 可以作为 CLI 或系统守护进程运行。在 Linux 上,默认情况下它作为守护进程运行,这需要 systemd。随着 Netmaker 的发展,systemd 将成为可能的服务管理选项之一,允许 netclient 在更广泛的设备上运行。但是,就目前而言,netclient 应该在不运行 systemd 的系统上运行「 unmanaged」(netclient join-daemon=off) ,其他一些方法可以像 cron job 或自定义脚本一样使用。

🧠 备注

比如我的 NAS 没有 SystemD,那么就需要 netclient join-daemon=off,同时需要配置 crontab 以实现定时 checkin

在 0.8 版本中,Mac 和 Windows 都得到了支持。在这些操作系统上,netclient 分别使用 LaunchD 和 windowsservice 启动守护进程,而不是使用 SystemD。

Netmaker 组件

Netmaker Server

Netmaker 服务器的核心是一个 golang 二进制文件。源代码可以在 GitHub 上找到。二进制文件本身可以为大多数系统编译。如果您需要在一个特定的系统上运行 Netmaker 服务器,那么它很可能可以正常工作。在典型的部署中,它作为一个 Docker 容器运行。它也可以作为一个 systemd 服务运行。

Netmaker 服务器充当前端的 API,以及网络中计算机的 GRPC 服务器。GRPC 比标准的 API 调用更快、更高效,这提高了事务的速度。出于这个原因,Netmaker 服务器公开了两个端口:API 的默认端口是 8081,GRPC 的默认端口是 50051。

Netmaker 网络模式包括客户端模式和 dns 模式。这两者中的任何一个都可以被禁用,但默认情况下是启用的。客户端模式允许您将 Netmaker 主机(操作系统)视为网络节点,安装 netclient 并控制主机网络。DNS 模式具有 coreddns 的服务器写配置设置,这是一个单独的组件和 nameserver,它选择配置设置来管理节点 DNS。

Netmaker 服务器与 sqlite (默认)、 postgres 或者作为其数据库的分布式版本 sqlite 进行交互。这个 DB 保存有关节点、网络、用户和其他重要数据的信息。此数据是配置数据。在大多数情况下,Netmaker 向 Nodes 提供配置数据,告诉它们应该如何配置自己。Netclient 是实际执行该配置的 agent。

Netclient

Netclient 的核心是一个 golang 二进制文件。源代码可以在 Netmaker GitHub Repository 的 netclient 文件夹 中找到。二进制文件本身可以为大多数系统编译。但是,这个二进制文件被设计用来管理一定数量的操作系统。从 0.8 版本开始,netclient 可以作为 linux 发行版上使用 systemd 的系统守护进程运行,也可以作为非 systemd 发行版上的「 unmanaged」客户端运行。Windows 和 Mac 的 netclient 将分别作为 Windows 服务或 LaunchDaemon 运行。

Netclient 通过一个简单的 bash 脚本安装,该脚本提取最新的二进制文件并运行 registerjoin 命令。

命令将一个 WireGuard 隧道直接添加到 netmaker server,用于所有后续的通信。

join 命令试图使用合理的默认值将机器添加到 Netmaker 网络中,可以使用配置文件或环境变量覆盖默认值。假设 netclient 有一个有效的密钥(或者网络允许手动注册节点) ,它将被注册到 Netmaker 网络,并返回必要的配置细节,以便如何设置其本地网络。

Netclient 然后设置系统守护进程(如果在守护进程模式下运行) ,并配置 WireGuard。所以首先应该 安装好 Wireguard

如果在守护进程模式下运行,netclient 将定期执行 check in (签到或签入)。它将通过服务器进行身份验证,并检查网络中是否有任何更改。如果有的话,它也会发布关于它自己的本地配置的更改。如果发生了更改,服务器将返回新的配置,netclient 将重新配置网络。如果不在守护进程模式下运行,则由操作人员手动执行签入 (netclient checkin-n <network name>)。

签入过程允许 Netmaker 创建动态网状网络。在网络上添加、删除和修改节点时,会通知其他节点,并进行适当的更改。

数据库 (sqlite、 rsqlite、 postgres)

在 v0.8 中,Netmaker 默认使用 sqlite 作为数据库。它也可以使用 PostgreSQL 或 rsqlite,一个分布式 (RAFT 共识)数据库。Netmaker 与此数据库交互,以存储和检索关于节点、网络和用户的信息。

对于特殊用例,额外的数据库支持(除了 sqlite 和 rsqlite) 非常容易实现。Netmaker 使用简单的 键值 查找来运行网络,而且数据库设计为可扩展的,因此可以通过更改单个文件来支持键值存储和其他基于 sql 的数据库。

Netmaker UI

Netmaker UI 是一个基于 reactjs 的静态网站,可以在标准的 web 服务器上运行,比如 Nginx 或 Caddy。源代码可以在 这里 找到。在典型的配置中,Netmaker UI 作为 Docker 容器在 Caddy 上运行。

🧠 备注

Caddy 是一个新流行的基于 go 的 web server,自动化(比如自动申请并配置 SSL 证书)、简单、好用,这里挖个坑,后续有空补个 Caddy 的介绍文章。

Netmaker 可以在没有用户界面的情况下完全使用,但是用户界面使得大多数用户的使用变得更加容易。它有一个合理的流程和布局,用于管理网络、节点、访问密钥和 DNS。

CoreDNS

Netmaker 允许用户为他们的节点提供和管理私有 DNS。这需要一个 nameserver,而 coredns 是被选中作为 nameserver。coredns 是轻量级的,可扩展的。coredns 从一个由 Netmaker 管理的简单文件加载 DNS 设置,并为托管节点提供 DNS 信息。DNS 可能很复杂,目前只有少数设备支持 DNS 管理,特别是那些运行 systemd-resolved 的设备。但是,Netmaker CoreDNS 实例可以手动作为 nameserver 添加到其他设备。DNS 模式也可以关闭。

External Client 外部客户端

外部客户端只是一个手动配置的到你的网络的 WireGuard 连接,Netmaker 帮助管理。

大多数机器都能运行 WireGuard。建立到单个端点的 WireGuard 连接相当简单。但是建立网状网络和其他拓扑,如站点到站点变得复杂。

Mac、 Windows 和 Linux 由 Netclient 直接处理。

Netmaker 可以发出「外部客户端」来处理当前与 netclient 不兼容的任何设备,包括 iPhone、 Android 和一些 Unix 发行版。随着时间的推移,这个列表将被删除,甚至可能不需要外部客户端。

外部客户端通过「入口网关」(Ingress Gateway,可以简单理解为 WireGuard 的中继服务器)连接到 Netmaker 网络,该网关为给定的节点配置,允许流量流入网络。

Netmaker 技术流程

下面是 Netmaker 内部通信流程的一个 high level、一步一步的概述(假设 Netmaker 已经安装) :

  1. 管理员创建一个带有子网的新网络,例如 10.10.10.0/24
  2. 管理员创建一个用于注册新节点的访问密钥
  3. 上述两个请求都是通过前端的 API 调用路由到服务器的
  4. 管理员在任何给定的节点 (机器) 上运行 netclient 安装脚本
  5. Netclient 解码密钥,其中包含 GRPC 服务器位置和端口
  6. Netclient 使用信息注册并连接到 GRPC 服务器的 WireGuard 通道
  7. Netclient 检索 / 设置本地信息,包括用于 WireGuard 的开放端口、公共 IP 和为对等节点生成密钥对
  8. Netclient 通过访问密钥向 GRPC 服务器提供此信息进行身份验证。
  9. Netmaker 服务器验证信息并创建节点,为任何缺失的信息设置默认值。
  10. 为网络设置时间戳(参见 #16)。
  11. Netmaker 返回设置作为对 netclient 的响应。可以根据网络添加或修改某些设置。
  12. Netclient 接收响应。如果成功,它将从 Netmaker 返回任何附加信息并配置本地系统 /WireGuard
  13. Netclient 向 Netmaker 的 GRPC 服务器发送另一个请求,这次是为了检索对等点列表(网络中的所有其他客户端)。
  14. Netmaker 发回节点列表,包括网络中所有节点的当前已知配置。
  15. Netclient 使用这些信息配置 WireGuard。此时,节点已经完全配置为网络的一部分,应该能够通过私有地址到达其他节点。
  16. Netclient 启动守护进程 (system timer) 来运行到服务器的签入。它等待更改,报告本地更改,并从网络中的任何其他节点检索更改。
  17. 网络上的其他 netclients 在与 Netmaker 服务器签入时,将看到时间戳已经更新,它们将检索一个新的对等点列表,完成更新周期。

参考链接

相关文章
|
2月前
|
安全 物联网 物联网安全
量子通信网络:安全信息交换的新平台
【10月更文挑战第6天】量子通信网络作为一种全新的安全信息交换平台,正逐步展现出其独特的优势和巨大的潜力。通过深入研究和不断探索,我们有理由相信,量子通信网络将成为未来信息安全领域的重要支柱,为构建更加安全、高效、可靠的信息社会贡献力量。让我们共同期待量子通信网络在未来的广泛应用和美好前景!
|
3月前
|
XML 网络协议 物联网
基于surging的木舟IOT平台如何添加网络组件
【8月更文挑战第30天】在基于 Surging 的木舟 IOT 平台中添加网络组件需经历八个步骤:首先理解 Surging 及平台架构;其次明确组件需求,选择合适技术库;接着创建项目并配置;然后设计实现网络功能;再将组件集成至平台;接着进行详尽测试;最后根据反馈持续优化与维护。具体实施时应参照最新文档调整。
65 10
|
3月前
|
缓存 算法 物联网
基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量
本系统基于MATLAB 2017b,对AODV与LEACH自组网进行了升级仿真,新增运动节点路由测试,修正丢包率统计。AODV是一种按需路由协议,结合DSDV和DSR,支持动态路由。程序包含参数设置、消息收发等功能模块,通过GUI界面配置节点数量、仿真时间和路由协议等参数,并计算网络性能指标。 该代码实现了节点能量管理、簇头选举、路由发现等功能,并统计了网络性能指标。
176 73
|
1月前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
101 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
网络协议 安全 算法
网络空间安全之一个WH的超前沿全栈技术深入学习之路(9-2):WireShark 简介和抓包原理及实战过程一条龙全线分析——就怕你学成黑客啦!
实战:WireShark 抓包及快速定位数据包技巧、使用 WireShark 对常用协议抓包并分析原理 、WireShark 抓包解决服务器被黑上不了网等具体操作详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法IKUN和I原们你这要是学不会我直接退出江湖;好吧!!!
|
3月前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
65 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
4月前
|
云安全 安全 物联网
惊叹:《黑神话:悟空》所在 Steam 发行平台遭网络狂袭,威胁流量猛增两万倍!
8月24日,热门游戏《黑神话:悟空》的玩家发现主要发行平台Steam无法登录,引发“#Steam崩了#”登上微博热搜。起初猜测是在线人数过多导致,但完美世界竞技平台公告表示系遭受DDoS攻击。奇安信Xlab实验室详细解析了此次攻击,发现攻击指令暴增两万多倍,涉及多个僵尸网络。此次攻击对Steam造成严重影响,但也凸显了网络安全的重要性。为保障游戏环境安全,需加强服务器防护并选择可靠的防御公司。德迅云安全提供高防服务器、DDoS高防IP和安全加速SCDN等服务,助力游戏企业提升安全性。
|
4月前
|
机器学习/深度学习 前端开发 数据挖掘
基于Python Django的房价数据分析平台,包括大屏和后台数据管理,有线性、向量机、梯度提升树、bp神经网络等模型
本文介绍了一个基于Python Django框架开发的房价数据分析平台,该平台集成了多种机器学习模型,包括线性回归、SVM、GBDT和BP神经网络,用于房价预测和市场分析,同时提供了前端大屏展示和后台数据管理功能。
114 9
|
4月前
|
网络协议 安全 网络安全
网络术语、接口和协议简介
网络术语、接口和协议简介
56 1