是否可以在不同端口上运行应用程序的多台服务器上使用相同的 IPv4?

是否可以在不同端口上运行应用程序的多台服务器上使用相同的 IPv4?

我的设置;

  • 通过交换机连接 5 个以上专用服务器
  • 交换机上的 /20 公共 IPv4 子网
  • 桥接网络设置,以便任何专用应用程序都可以使用 /20 中的任何 IP

我希望能够在不同的端口和不同的专用服务器上运行不同的服务,但使用相同的 IPv4。

例如;

  • App1 在 IP 1.2.3.4 上的 Server1 的 1111 端口上运行
  • App2 在 IP 1.2.3.4 上的 Server2 的端口 2222 上运行
  • App3 在 IP 1.2.3.4 上的 Server3 的 3333 端口上运行

这可能吗?如果重要的话,这些“应用程序”实际上将是运行某些应用程序的 docker 容器。

答案1

是的,但实际上只能通过将该 IP 地址分配给设备会将数据包通过 DNAT 发送到一个或另一个服务器的内部地址。基本上和人们在家里使用“端口转发”的方式一样。

当 Docker 被告知公开一个端口时,它默认会这样做——每个容器都有自己的地址,但 Docker 会在主机操作系统上自动设置 DNAT(充当网关/路由器),以在容器中运行的多个服务器之间共享主机的 IP 地址。

但是,要在多个物理主机之间共享一个地址,则需要在所有这些主机共用的网关上设置 DNAT。如果您无法控制当前使用的网关,则其中一台主机将需要成为需要“共享”其地址的其他主机的新网关(其余主机保持不变 - 网关主机拥有该地址并逐个端口地 DNAT 到其他服务器的连接)。

也许可以在不使用 NAT 的情况下,使用 iptables 标记和策略路由来实现这一点,但我觉得它会产生比它解决的问题更多的新问题——而且配置仍然不可避免地会必须在网关上完成。

如果它们都是基于 HTTP 的 Web 应用程序,则设置反向代理可能会更容易。

相关内容