一组虚拟机(每个虚拟机都有自己的公共 IPv4 地址)是否可以模拟在私有子网上?如果可以,我该如何与现有网络集成?

一组虚拟机(每个虚拟机都有自己的公共 IPv4 地址)是否可以模拟在私有子网上?如果可以,我该如何与现有网络集成?

TLDR;概要

是否可以组织一组虚拟机(每个虚拟机都有自己的公共 IPv4 地址)以模拟私有子网?如果可以,我如何将这些服务器连接到我的网络的其余部分?

当前配置

  • 10.0.0.0/24 AWS 俄勒冈州 - 公共

  • 10.1.0.0/24 AWS 俄勒冈州 - 私有

  • 10.52.5.0/24 圣地亚哥主页

  • 10.62.5.0/24 首页,拉斯维加斯

AWS 公共网络有一个 OpenVPN 服务器。圣地亚哥和拉斯维加斯都有各自的专用 OpenVPN 客户端,它们连接到该 AWS 服务器。通过使用这种点对点 VPN 设置,我网络上的任何 VM 都可以与任何其他 VM 通信,而不会受到 NAT 干扰。一切都运行正常。

问题

我被要求证明我设计的 Web 应用程序(目前在 AWS Oregon 上运行)可以在 AWS 生态系统之外同样成功运行。

“没问题。”我说。于是我从一家瑞士供应商那里租了五台服务器,准备将它们接入我的网络。

我猜我的假设是 SwissVendor 会为我提供五台服务器,并将它们放置在我选择的内部网络上(例如 10.72.5.0/24,gw:.1),并可能为我提供一个公共(即“弹性?”)IP,以便我从外部进入。然后,我会选择五台服务器中的一台作为我的 OpenVPN 客户端,将其指向我的 AWS Oregon OpenVPN 服务器,然后,瑞士服务器现在可以从我的网络中的任何位置访问。

但不幸的是,SwissVendor 的工作方式并非如此。相反,五台服务器都有自己的公共 IP 地址,而且无法保证这些 IP 地址位于同一子网中。所以我最终得到了如下结果:

  • 服务器 1:11.11.11.11/24

  • 服务器 2:22.22.22.22/24

  • 服务器 3:33.33.33.33/24

  • 服务器 4:44.44.44.44/24

  • 服务器 5:55.55.55.55/24

每台服务器上的 RDP 端口 3389 都向全世界开放,允许客户通过预共享的管理密码进行访问。所有其他入站连接均被服务器的防火墙阻止,该防火墙默认处于开启状态。这只是 SwissVendor 为像我这样的客户提供服务器的方式。我无法改变这一点。

我的目标

因为我是业余爱好者,不是专业人士,所以很难描述这一点。我的理想世界是:

  • 每个瑞士服务器除了拥有自己的真实公共地址外,还在内部网络 10.72.5.0/24 上拥有某种合成/虚拟 NIC。
  • 服务器将能够以几乎零延迟的速度相互高速通信。[您可以假设每台瑞士服务器都位于同一个物理机柜中,实际上可能位于同一物理硬件上!]
  • 其中一台服务器将充当 OpenVPN 客户端,连接到我的 AWS OpenVPN 服务器,这将有效地将 10.72.5.0/24 拉入我的网络,使得这些服务器中的每一个都可以被我的网络的其余部分访问,但不能被 Internet 访问,并且不会受到 NAT 干扰。

我不太清楚如何实现这一点,或者根本就不知道这是否可行。以下是我考虑过但最终排除的两种方法:

失败的想法 #1:每个服务器都充当 OpenVPN 客户端

我可以放弃在瑞士网络上使用专用 OpenVPN 客户端的想法。相反,每台瑞士服务器都将运行自己的 OpenVPN 客户端,并为每个服务器提供自己的附加 IP 地址。因此,除了公共 IP 地址外,每台服务器还将拥有一个虚拟 IP,可能类似于 10.8.0.0/24。

只要瑞士服务器能够相互通信并与我的网络的其余部分通信,这就可以起作用。

问题是,数据包要从 SwissServer1 到达 SwissServer2,必须一路前往 Oregon 然后再返回——考虑到 SwissServer1 和 SwissServer2 都位于同一台物理机器上,这效率极低。回想一下,我需要瑞士服务器之间低延迟的快速通信。

失败想法 #2:瑞士服务器使用其公共地址进行通信

我可以简单地允许瑞士服务器使用各自的公共 IP 地址相互通信。这肯定可以解决延迟问题。

我预见到这种方法的主要问题是,由于每个瑞士服务器的 IP 都是公开的,因此暴露在互联网上,我必须非常小心地配置每个服务器的防火墙规则。例如,如果 SwissServer1 想要与 SwissServer2 使用文件共享,我必须准确知道使用哪些端口来实现这一点,并且只打开这些端口,并且只对 SwissServer1 开放。如果我犯了一个小错误,我可能会将该文件共享服务暴露在公共互联网上。

还有一个问题是如何将这些机器干净地连接到我的网络的其余部分。所以我认为这种方法也是行不通的。

接下来去哪里?

我对此进行了研究,但还是无法找到正确的方法。我想我可能正在寻找一种称为“桥梁”的东西,我认为 OpenVPN 可能支持这一点,但我不确定。据我在 Wikipedia 和 Reddit 上的广泛研究所了解,使用桥接技术可能允许五台瑞士服务器像在某个单一网络上一样运行,比如说 10.52.7.0/24,从而促进这些对等体之间的快速通信。但接下来呢?我如何才能使 10.52.7.0/24 可以访问我现有网络的其余部分?

所有服务器均运行 Windows 2019 Server 或 Windows 2022 Server。

欢迎提出任何建议!

答案1

额外子网

您可能可以要求 VPS 提供商也拥有内部子网。但是这只是额外的工作。(这将添加到现有接口中)

公共 IP

这是最好的方法,请求 IPv6 并且您应该能够获得您可以处理的已知子网。

使用VPN

设置一个本地 VPN 服务器,让所有用户都连接到该服务器,这样他们就可以快速访问彼此。同时设置到现有网络的链接,以实现可达性。

这意味着除了一台机器之外,其他所有机器都会有双客户端,而这台机器上会有一个服务器和一个客户端。通过一些智能路由,您甚至可以实现冗余。

相关内容