建设 Full Mesh 跨云局域网

引入

我买的个人服务器越来越多,它们来源自不同的商家,分布在世界各地,对于同一家买的服务器,有的或许内网可以传输数据,但是很多廉价 VPS 没有内网互通的功能,更不要说跨云了,都不是一家的 VPS 很难提供直接相连的内网环境,这样就导致了这些服务器之间相对独立。

起初并不觉得有什么问题,但是随着知识、经验的增长,终究还是遇到了需要跨云通信的需求。最简单的例子是服务器监控,把每个服务器的运行信息汇总在一起。

现在我选择使用 Netmaker 来解决上述问题。

跨云

基本上每台服务器都有一个公网 ipv4 地址,服务器间的互访肯定不是问题。实际上跨云局域网的目的并不是实现通信,而是保护通信数据。

一个数据(可也是文件、通信数据、请求、everything)从 A 传输到 B 必然会有安全问题,最常见的解决方法就是 SSL 了。也有 ssh 这种依靠自身解决安全问题的方法。

然而,如果想为每一个服务都配置 SSL 那么会显得非常麻烦,有的东西它可能根本就不支持 SSL ,或者说配置起来比较麻烦。例如数据库、容器、IoT 设备等。同时你还需要在公网暴露更多的端口,然后再用 iptables 保护这些端口。这样下去迟早有一天人会坏掉

也就是说我需要一种加密、安全、低成本、稳定、对服务器开销小的通用的通信方式。

VPN

Full Mesh 的重要性

虚拟专用网络,从诞生起就是解决这个问题,因此很容易让人联想到它。VPN 产品有很多,但是挑选时我发现我需要的不仅仅是一个普通的 VPN

  • 多台服务器数据传输需求,数据传输量大, VPN 服务器的带宽和网络是个问题
  • 尽量避免单点故障,不能说某天 VPN 服务器 down 了,内网就断了

也就是说我需要 P2P 的这种连接方式,任意两个服务器之间的通信不应该经过其它服务,也就是文章标题中的 Full Mesh

很多 VPN 就被 pass 了,有些 VPN 可以通过优化来避免这个问题,然而配置过于麻烦(说的就是你 OpenVPN)。于是我把目光投向新一代 VPN。

有趣的 VPN

很快,我发现了一些有趣的东西:Nebula、Tinc、TailScale、ZeroTier、WireGuard。

它们其实大部分都能满足需求,有些是半开源的,有些是完全开源的。不过我最终还是选了 WireGuard,无它,快、简单,代码能被加入 Linux 内核,生态还行,有各种拓展产品。(实际上它还有很多需要完善的地方,例如密钥更新)以及我已经使用了一段时间的 WireGuard,体验还不错。

Netmaker

直接使用 WireGuard 是不行的,我需要一个界面管理,所以我找到了 NetmakerWireGuard Easy。 Netmaker 更贴近我的使用场景。实际上它不止是一个 web 管理面板,重要的是除此之外 Netmaker 还支持 NAT 下的打洞、流量中继等。可以说是对 WireGuard 的升级。

唯一问题是这个东西还在测试阶段。不过截至目前,它已经经过了两年的开发,基本功能已经稳定,如果想尝尝鲜,选它是没问题,就是后续可能经常需要升级。

注意:Netmaker 欠缺自动密钥更新的功能,需要结合其它运维工具,例如 ansible 来使用。

一些概念

  • Netmaker 分为一个服务端和很多客户端,控制节点与客户端之间使用 gRPC 通信
  • WireGuard 的角度来看,每个节点都是对等的
  • 一个 Netmaker 服务端可以创建、管理多个虚拟网络
  • 客户端通过 key 加入网络,该 key 是 base64 后的 json

部署

控制节点官方提供了一个脚本,使用方法:

wget https://raw.githubusercontent.com/gravitl/netmaker/master/scripts/nm-quick.sh
chmod -x ./nm-quick.sh
sudo ./nm-quick.sh

其它节点的加入同样简单:

curl -sL 'https://apt.netmaker.org/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/netclient.asc
curl -sL 'https://apt.netmaker.org/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/netclient.list
sudo apt update
sudo apt install netclient
netclient join -t <token>

详细内容请参考官方文档。本文不做解释。

总结

这个东西的前景非常好,尤其是在企业之中。

  • 对于物联网来说,它可以构建一个充电站内网,将该地区的所有充电站连接起来,也可以是路灯和电线杆网络
  • 同样的,在云计算上连接多个地区的服务器,和容器,实现容器间的通信等
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
隐藏
变装