创建映射到私有 IP 空间的公共 DNS

创建映射到私有 IP 空间的公共 DNS

我正在尝试创建一个设置,其中我有一个面向公众的 IP 地址,该地址将信息提供给几个不同的内部服务器,每个服务器在私有 IP 空间中都有一个唯一的 IP - 路由由传入的域请求决定(类似于 Apache 虚拟主机,但适用于所有流量 - 而不仅仅是 HTTP)。我需要哪些服务来创建上述内容?代理服务器、负载平衡器等?

答案1

您对问题做了很大的修改,完全放弃了 EC2 方面的内容,但这是我的新答复:

我认为您需要进一步了解 DNS 的工作原理以及虚拟主机的工作原理。DNS 用于将主机名转换为 IP 地址(或一组 IP 地址)。一旦应用程序有了 IP 地址,就不再需要与 DNS 通信。

虚拟主机是 HTTP 协议(​​1.1 版及更高版本)启用的一项功能。当联系 IP 地址时,客户端会传入他们想要发出请求的主机名。您的代理服务器需要设置为理解 HTTP 并映射到不同的后端服务器。

大多数其他 IP 协议没有此功能,因此无法执行您所要求的操作。例如,当您通过 ssh 连接到服务器时,DNS 查找后不涉及主机名。

话虽如此,听起来你有一个特定的问题需要解决。与其假设 IP 地址路由是答案,不如问问你在更高层次上想做什么,看看人们能想出什么?我建议从新问题开始。


以下是我对您最初的一系列问题的原始回答......

从问题的措辞来看,您试图做什么并不清楚。以下是一些可能问题的答案:

在 Amazon EC2 上不可能“保留 IP 地址”。无论您是否允许从 Internet 访问,每个实例都使用一个公共 IP 地址。

EC2 已经为私有 IP 地址提供了私有 DNS 名称,但它们的用处并不比私有 IP 地址本身更大。

欢迎您在 EC2 内部或外部运行自己的 DNS 服务器。有些 DNS 服务软件包支持代码插件,您可以根据算法动态确定生成的 IP 地址。

如果您从 EC2 主机解析 EC2 实例公共 DNS 名称,Amazon 将返回私有 IP 地址,因此您的网络将更快、更便宜。有关此功能的更多信息,请参阅我撰写的这篇文章:

使用弹性 IP 识别 Amazon EC2 上的内部实例
http://alestic.com/2009/06/ec2-elastic-ip-internal

答案2

您的应用程序协议需要能够在传入连接中发出信号,表明它们想要使用哪个后端服务器。HTTP 使用“基于名称的虚拟托管”来实现这一点(如您所识别),其中 Web 服务器Host使用请求中的标头来确定请求中使用了哪个名称,然后决定将请求发送到何处。其他一些现有协议也在某种程度上能够做到这一点(FTP 具有等效机制),但它必须在应用层完成——你无法在 IP 层处理这个问题,因为没有足够的信息。

说实话,如果这只适用于几个不同的域,并且您正在使用不支持基于名称的信号传输的协议,那么最好只使用多个 IP 地址并将每个名称绑定到其自己的地址。这在 EC2 上很烦人也很痛苦,因为每个实例只有一个弹性 IP(而且您真的不想将实例 IP 用于面向公众的服务;这只会让您的用户感到难过)。

答案3

听起来你只需要一个像 nginx/haproxy/varnish 这样的反向代理,通过域(URL)将请求分发到你的后端实例。

相关内容