设置多个子域以分离在单个主机上运行的虚拟机的最简单方法

设置多个子域以分离在单个主机上运行的虚拟机的最简单方法

问题:

我计划在单个 centos 主机服务器上设置多台虚拟化 centos、rhel 或 ubuntu 客户机(最有可能使用 KVM)。每个客户机虚拟机都运行一个 webapp 实例 + 一些其他服务/协议,并且每个客户机虚拟机都需要可以从主机外部通过任何开放端口访问,就好像每个客户机虚拟机都是一个单独的 DNS 盒子一样。

我(显然)在网络技术/配置方面很弱,所以我只是想找到这个问题的第一个边缘,即我需要研究的主要方法才能立足于此。如果你愿意的话,网络配置“伪代码”。:)

例子:

假设我拥有域名 foo.com。

我有一台物理 CentOS 机器,DNS 为 guests.foo.com。

在这台物理主机上,我运行了三台虚拟机。我希望客户虚拟机可以作为 1.guests.foo.com、2.guests.foo.com 和 3.guests.foo.com 访问。客户虚拟机运行 centos、rhel 和 ubuntu 发行版。

每个虚拟机都需要响应任何(本地开放的)端口,不仅仅是 http 流量,还有 ssh 连接和 git:协议操作。

我从哪里开始呢?什么是最优雅的方法?大致来说,主人和客人各自至少需要进行哪些设置才能使其顺利运行?

笔记:

当我了解更多信息后,我会更新问题文本和评论。

答案1

除非每个虚拟机至少有 1 个公共 IP,否则您无法让它们在“任何”开放端口上响应(这意味着您需要将来自主机系统公共 IP 上特定端口的请求 NAT 到虚拟机的内部 IP)。假设您只有 1 个公共 IP,例如 2.3.4.5,并且已在主机上配置。现在,您可以将来自端口 80 的请求重定向到 1 个虚拟机,将来自 443 的请求重定向到另一台虚拟机,将来自任何其他端口的请求重定向到您选择的任何虚拟机,但总而言之,您将在 IP 上分配 65530 个可用端口并将它们路由到您的虚拟机,因此任何特定虚拟机都不能监听另一台虚拟机正在监听的端口。

如果您确实有多个公共 IP(每个虚拟机至少 1 个),那么您只需为虚拟机 IP 创建 DNS 记录即可。

在多 IP 设置中,您应该有一个小型公共子网,例如 2.3.4.0/28。此网络包含以下可用 IP:

  1. 2.3.4.1
  2. 2.3.4.2
  3. 2.3.4.3
  4. 2.3.4.4
  5. 2.3.4.5
  6. 2.3.4.6

2.3.4.0 是网络 IP,不可用,而 2.3.4.7 是网络的广播 IP。现在,在这种方法中,通常第一个 IP(2.3.4.1)用作其余子网的网关,即您的 ISP 或数据中心在其防火墙/路由器中为 2.3.4.0/8 设置路由,并将 2.3.4.1 作为下一跳。现在,来自互联网的所有针对 2.3.4.0/8 中任何 IP 的请求都会到达具有 IP 2.3.4.1 的机器。因此,合乎逻辑的做法是将此 IP 放在您的主机上。

现在您可以遵循两种方法:

  1. 将虚拟机网络接口桥接到具有 IP 2.3.4.1 的主机接口,并在其桥接接口上为虚拟机提供 IP 2.3.4.2、3 和 4。

  2. 在虚拟机上设置仅主机网络,例如 192.168.10.0/24,主机虚拟接口上的 IP 为 192.168.10.1,虚拟机接口上的 IP 为 192.168.10.2-4。然后,您可以将来自 2.3.4.X 的请求通过 NAT 转发到 192.168.10.X。

在这两种情况下,您需要的 DNS 记录如下:

1.guests.foo.com 2.3.4.2 2.guests.foo.com 2.3.4.3 3.guests.foo.com 2.3.4.4 等等。

希望这可以为这个问题提供一些启示。

答案2

主机名可以指向任何地方。您需要为每个虚拟机提供唯一的全局 IP 地址。(确保您确实拥有它们;在世界的某些地方,它们可能很难获得。)每个虚拟机都需要自己的 IP 地址,如果您想从互联网访问它们,它们必须是全局地址。

最简单的方法是使用桥接网络连接虚拟机。如何设置主要取决于外部因素,例如是否安装虚拟机控制面板,但本指南将为您提供在本地机器上建立网桥的基本步骤,以便您可以开始测试并熟悉一切的工作原理。

相关内容