我想构建一个服务,动态创建虚拟机并为每个虚拟机分配一个公共 DNS 记录,该记录可以是完整域或子域。假设所有虚拟机都位于单个主机上。虚拟机上将运行多种 TCP 或 UDP 公开服务,使用各种端口。主机有一个公共 IP 地址。
我可以使用 NAT 将域路由到 VM 吗?或者我是否需要更多公共 IP 地址来进行此设置?
其他虚拟托管公司是如何做到这一点的?他们有更多的 IP 块吗?
答案1
我可以使用 NAT 来路由域吗
不,NAT 无法识别 DNS。
我是否需要更多公共 IP 地址
每个服务器 IP:Port 元组需要一个 IP。如果所有东西都在不同的端口上运行,那么你可以想象所有东西都使用同一个 IP。提醒一下,IP 对 DNS 一无所知,DNS 对服务端口一无所知(除非应用程序专门支持 SRV 记录,但出于我不知道的原因,这种情况非常罕见)。
其他虚拟托管公司是如何做到这一点的?他们有更多的 IP 块吗?
应用程序要么是 DNS 感知的(例如 HTTP,它使用应用程序层标头;或 TLS,它使用类似标头的 SNI),要么它们对每个目的地使用单独的 IP。