对于我们这些熟悉 IP 网络、路由和 NAT 的人来说,VPC 的术语有点违反直觉,所以这可能会有所帮助:
显然,VPC 允许您创建多个子网并在它们之间路由流量。它还允许您通过在您身边的硬件 VPN 设备和 VPC 提供的配套虚拟设备之间建立的隧道将流量路由到您自己的数据中心的其他子网。
您提供了一个“虚拟专用网关”——这是 AWS 的“设备”,可以终止他们的 VPN;然后您声明自己的“客户网关”及其公共 IP 地址(您身边的设备,例如 Cisco ASA);然后通过在它们之间声明“VPN 连接”将这两个实体绑定在一起。在“VPN 连接”中,您可以声明从 VPC 网络到公司网络的私有 IP 地址空间的静态路由。在您的本地设备中,您可以通过隧道配置路由到您将在 VPC 内部使用的私有 IP 地址空间。
仍然在 VPC 配置中,您声明您的 VPC 的路由表,并且在“路由传播”下,您可以“选择允许更新此路由表的虚拟私有网关”。这会将指向您公司网络的路由(从 VPN 连接配置中发现)注入到 VPC 路由表中。
VPC 中最大的混淆点之一是“公共子网”和“私有子网”的术语,这在 VPC 中的含义与在其他任何地方的含义不同,因为 VPC 中的所有子网都位于私有 IP 地址空间上。公共/私人的区别是这样的:
VPC 中的公有子网使用“Internet 网关”作为其默认路由,而私有子网使用“NAT 实例”或 VPN 隧道作为其默认路由。Internet 网关是一个虚拟对象,本质上只是一个没有实际配置的占位符,可以用于具有公共 IP 地址的 EC2 实例访问 Internet,并且只能由具有公共 IP 地址的实例使用。NAT 实例是运行自定义软件映像的 EC2 机器,它将接受来自缺少自己的公共 IP 地址的内部机器的流量,并将该流量伪装成源自其外部 IP 地址,以便可以通过 Internet 发送流量即使它在内部源自没有公共 IP 地址的 EC2 实例。来自 Internet 的返回流量被寻址到 NAT 实例,
NAT 实例极其违反直觉的一点是,它必须在“公共”子网上进行配置,但它充当在“私有”子网上配置的实例的默认网关。传统上,您的默认网关位于您自己的子网上,但在 VPC 中,情况并非如此——它仍然可以完美运行。
从我到目前为止所写的内容中应该得到的是,您实际上并不“需要”私有子网——然而——在你的 VPC 中,基于你想要完成的事情,以及基于“私有”子网在 VPC 中的意思——尽管我建议无论如何都使用向导设置一个,以便以后如果你需要它。您不需要私有子网的原因是私有子网是您配置不需要可通过 Internet 访问的 EC2 实例的地方,并且您没有在问题中提到该需求。
例如,如果您的公司网络是 172.16.0.0/16,并且私有 IP 网络 192.168.0.0/16 与您的公司网络编号不冲突,您可以将 VPC 声明为 192.168.0.0/16,然后声明,例如, 192.168.20.0/24(位于 192.168.0.0/16 内)作为公共子网。在您的硬件 VPN 设备上,通过隧道将 192.168.0.0/16 路由到 VPC,然后在 VPC 内部,通过隧道将 172.16.0.0/16 路由回公司网络。
我所描述的主要是“ VPC 场景 3 ”,添加了您可以在VPC 场景 2中看到的 NAT 实例。使用 NAT 实例的原因是,如果您确实将服务器放置在“私有”VPC 子网中,则方案 3 使它们无法在出站基础上访问 Internet(例如,用于获取软件更新),除非通过路由回您的公司网络以这种方式访问 Internet,这对我来说似乎是不必要的旅行,但这取决于您的安全理念。
要记住的另一件事是,如果您正在考虑使用 Elastic Load Balancer,ELB 需要在“公共”子网上进行配置,但服务于 ELB 的实例可以放在“私有”子网上,因为在此在这种情况下,只有 ELB 需要直接从 Internet 访问,并且如果安全组和 VPC 路由表允许,ELB 可以访问 VPC 中任何子网上的实例。
但是,在您在原始问题中描述的设置中,根据“私有”子网的 VPC 定义,不需要“私有”子网。Web 服务器位于具有私有 IP 地址的“公共”子网上,并使用来自公共地址空间的弹性 IP,并且该网络可通过 VPN 直接路由到您的公司网络。