从哪里开始在一个外部 IP 地址后面设置主机名 NAT?

从哪里开始在一个外部 IP 地址后面设置主机名 NAT?

我不确定我在这里是否使用了正确的术语,这基本上就是我询问的原因(使用正确的术语我肯定可以谷歌搜索到它)。

我有一台装有 Windows 2008 的“大型服务器”,上面有几台虚拟机(Linux、Win7、Win2K8)。该服务器可通过公共 IP 地址访问。我想启用以下功能,但不知道从哪里开始:

  • 将网站放在不同的虚拟机上(即 VM1 托管 a.com 而 VM2 托管 b.com)
  • 网站应使用 http 和 https (ssl) 协议
  • 允许每台虚拟机上的远程桌面或类似的 RDP
  • 允许每台机器使用其他协议,例如 webdav、scp 或 ftp

我认为我需要一个 VPN 来进行远程桌面访问,并且我需要某种基于主机或基于主机 + 基于协议的 NAT(如果是的话)。

这似乎已经做过无数次了,我只是不知道从哪里开始,使用什么软件,或者简单地谷歌一下。另外,我担心 SSL 不会以这种方式工作,因为在握手之前主机名是不可见的。

答案1

您的问题确实有很多内容需要涵盖,但我将重点关注 SSL 网站部分,因为它在技能水平/知识方面存在真正的限制;如果您需要 VPN 配置、WebDAV、FTP 等方面的具体帮助,那么将问题的其余部分分解成更小的部分是有意义的。

如果您只计划托管几个 SSL 网站或它们是通配符网站(即 *.example.com),并且您在前面有一个反向代理服务器,那么您可以坚持使用一个公共 IP 地址。如果您需要多个域(example.com、example.net、foo.com、bar.com 等),那么您可能能够获得安装在反向代理上的主题备用名称 (SAN) 或 UCC 证书。有一个方便的图表在维基百科上向您显示了流行的证书供应商列表以及您可以通过他们提供的服务获得多少个域名;Global Sign 最多可以提供 40 个域名证书。

您还可以使用备用端口(https://vm1:443https://vm2:444等等)和适当的 NAT 规则(在虚拟机前面的防火墙中),但这通常不适用于公共站点。

现在,你不能只让服务器使用 SSL 处理不同的站点,这是因为 SSL 的工作方式:SSL 对话(握手)发生在主机头(“主机名”)由客户端发送,并由终止 SSL 连接的服务器进行解释,例如 Apache 或 IIS 等 Web 服务器或反向代理/Web 服务器nginx。这是因为服务器不知道此时要提供什么证书,并且(通常)仅提供配置中定义的默认(或第一个)证书。此“默认” SSL 证书是主题备用名称 (SAN) 证书或通配符证书,这可能适合您的需求。

服务器名称指示(SNI) 是解决多 SSL 站点问题的一个较新的替代方案(实际上是 SSL/TLS 协议的扩展,允许客户端在 SSL 对话中指定主机头),但由于浏览器老化而受到阻碍,并且只在 IE7+(也只在 Vista+)、Firefox 2+ 等中可用,所以如果您希望未受教育的大众访问您的 SSL 站点,它可能不适合您的需求。

因为听起来你正在尝试成为某种托管服务提供商(这又是另一个麻烦),所以我想从我的 ISP/colo 提供商那里获得尽可能多的 IP 块,然后作为配置过程的一部分,代理 ARP 或物理地将公共 IP 地址分配给 VM,并让它们获得自己的证书等。没有 NAT,一切都会更好地工作,管理开销也会更少。如果每个 VM 都是多租户的(即商品“共享托管”,您可以在 VM 上填充尽可能多的站点),那么您可能可以使用 SAN 证书/IP 地址的组合,但请记住,您不能随意添加/删除证书中的域:您必须再次完成证书请求/签名过程,他们可能会再次向您收费。

我也会非常小心地保护主机(“一个大服务器”),并假设您正在使用 Hyper-V,将物理 NIC(即不要在 Hyper-V 配置中将其作为虚拟网络包含在内)专用于盒子的远程管理,由真实的(硬件)防火墙保护,并建立某种安全连接(如始终在线的 IPSec 隧道),最好是在单独的/有保障的 Internet 连接上*或至少在“客户端”块之外的不同块上的公共 IP,以用于防火墙 ACL 目的和服务质量。我还想看看你的服务器是否支持智能平台管理接口(戴尔称之为 DRAC)并将其与专用物理 NIC 一起使用,作为无法从公共互联网访问的管理网络的一部分;这将允许您获得对盒子的裸机访问权限,以便您可以远程重新启动它、进行固件升级等。

*此专用连接要求在托管设施中可能不是问题,因为他们可能会采取自己的措施来确保/保证(通过 SLA)正常运行时间/带宽/弹性。

答案2

我不是 Windows 用户,但我可以给你正确的术语,你可以用 Google 查找 Windows 是如何完成的。

您正在寻找的是“反向代理”,它将您的网站路由到虚拟机的本地 IP 地址。就我而言,我使用 nginx 作为反向代理。希望这能有所帮助,如果您还有其他需要,请告诉我们。

相关内容