NAT 网关使用案例
以下是公有和私有 NAT 网关的使用案例示例。
从私有子网访问互联网
您可以使用公有 NAT 网关,以启用私有子网中的实例,将出站流量发送到互联网,同时防止互联网与这些实例建立连接。
概览
下图阐明了此使用案例。有两个可用区,每个可用区都有两个子网。每个子网的路由表都决定了流量的路由方式。在可用区 A 中,公有子网中的实例可以通过到互联网网关的路由访问互联网,而私有子网中的实例没有到互联网的路由。在可用区 B 中,公有子网包含一个 NAT 网关,私有子网中的实例可以通过到公有子网中的 NAT 网关的路由来访问互联网。私有和公有 NAT 网关都会将实例的源私有 IPv4 地址映射到私有 NAT 网关的私有 IPv4 地址,但是对于公有 NAT 网关,互联网网关随后会将公有 NAT 网关的私有 IPv4 地址映射到与 NAT 网关关联的弹性 IP 地址。将响应流量发送到实例时,无论是使用公有还是私有 NAT 网关,NAT 网关都会将地址转换回原始源 IP 地址。
请注意,如果可用区 A 中私有子网内的实例也需要访问互联网,您可以创建从该子网到可用区 B 中 NAT 网关的路由。或者,您也可以在包含需要访问互联网的资源的每个可用区创建一个 NAT 网关来提高故障恢复能力。有关示例图,请参见 示例:在私有子网中部署服务器并且具有 NAT 中的 VPC。
路由
以下是可用区 A 中与公有子网关联的路由表。第一个条目是本地路由;它使子网中的实例能够使用私有 IP 地址与 VPC 中的其他实例进行通信。第二个条目将所有其他子网流量发送到互联网网关,从而使子网中的实例能够访问互联网。
| 目标位置 | 目标 |
|---|---|
VPC CIDR |
本地 |
| 0.0.0.0/0 | internet-gateway-id |
以下是可用区 A 中与私有子网关联的路由表。该条目是本地路由,它使子网中的实例能够使用私有 IP 地址与 VPC 中的其他实例进行通信。此子网中的实例无法访问互联网。
| 目标位置 | 目标 |
|---|---|
VPC CIDR |
本地 |
以下是可用区 B 中与公有子网关联的路由表。第一个条目是本地路由,它使子网中的实例能够使用私有 IP 地址与 VPC 中的其他实例进行通信。第二个条目将所有其他子网流量发送到互联网网关,从而使子网中的 NAT 网关能够访问互联网。
| 目标位置 | 目标 |
|---|---|
VPC CIDR |
本地 |
| 0.0.0.0/0 | internet-gateway-id |
以下是可用区 B 中与私有子网关联的路由表。第一个条目是本地路由;它使子网中的实例能够使用私有 IP 地址与 VPC 中的其他实例进行通信。第二个条目将所有其他子网流量发送到 NAT 网关。
| 目标位置 | 目标 |
|---|---|
VPC CIDR |
本地 |
| 0.0.0.0/0 | nat-gateway-id |
有关更多信息,请参阅 管理子网路由表。
测试公有 NAT 网关
创建 NAT 网关并更新路由表之后,您可以从私有子网中的实例对互联网 ping 一些远程地址以测试它是否可以连接到互联网。有关如何执行此操作的示例,请参阅 测试互联网连接。
如果能够连接到互联网,还可以测试互联网流量是否通过 NAT 网关进行路由:
-
跟踪来自私有子网中实例的流量的路由情况。为此,请从私有子网中的 Linux 实例运行
traceroute命令。在输出中,应在一个跃点(通常是第一个跃点)中看到 NAT 网关的私有 IP 地址。 -
从私有子网中的实例连接第三方网站或工具时,查看该网站或工具显示的源 IP 地址。源 IP 地址应是 NAT 网关的弹性 IP 地址。
如果这些测试失败,请参阅 排查 NAT 网关的问题。
测试互联网连接
以下示例演示如何测试私有子网中的实例是否可以连接到互联网。
-
在公有子网中启动实例(您使用此实例作为堡垒主机)。在启动向导中,确保选择一个 Amazon Linux AMI,并为实例分配公有 IP 地址。确保安全组规则允许来自本地网络的 IP 地址范围的入站 SSH 流量,以及发送到私有子网的 IP 地址范围的出站 SSH 流量(您也可以同时对入站和出站 SSH 流量使用
0.0.0.0/0进行测试)。 -
在您的私有子网中启动实例。在启动向导中,确保选择一个 Amazon Linux AMI。请勿向实例分配公有 IP 地址。应确保安全组规则允许来自在公有子网中启动的实例的私有 IP 地址的入站 SSH 流量以及所有出站 ICMP 流量。必须选择用于在公有子网中启动实例的相同密钥对。
-
在本地计算机上配置 SSH 代理转发,并连接到公有子网中的堡垒主机。有关更多信息,请参阅 为 Linux 或 macOS 配置 SSH 代理转发 或 针对 Windows 配置 SSH 代理转发。
-
在堡垒主机中,连接到私有子网中的实例,然后从私有子网中的实例测试 Internet 连接。有关更多信息,请参阅 测试 Internet 连接。
为 Linux 或 macOS 配置 SSH 代理转发
在您的本地计算机上,将私有秘钥添加到身份验证代理。
对于 Linux,请使用以下命令。
ssh-add -c mykeypair.pem对于 macOS,请使用以下命令。
ssh-add -K mykeypair.pem通过使用
-A选项启用 SSH 代理转发来连接到公有子网中的实例,并使用该实例的公有地址,如以下示例所示。ssh -A ec2-user@54.0.0.123
针对 Windows 配置 SSH 代理转发
您可以使用 Windows 中提供的 OpenSSH 客户端,也可以安装您的首选 SSH 客户端(例如 PuTTY)。
测试 Internet 连接
从公有子网中的实例,使用私有 IP 地址连接到私有子网中的实例,如以下示例所示。
ssh ec2-user@10.0.1.123从私有实例,通过对启用了 ICMP 的网站运行
ping命令来测试是否可以连接到 Internet。ping ietf.orgPING ietf.org (4.31.198.44) 56(84) bytes of data. 64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=1 ttl=47 time=86.0 ms 64 bytes from mail.ietf.org (4.31.198.44): icmp_seq=2 ttl=47 time=75.6 ms ...按键盘上的 Ctrl+C 以取消
ping命令。如果ping命令失败,请参阅 实例无法访问 Internet。(可选)如果您不再需要实例,请将其终止。有关更多信息,请参阅《Amazon EC2 用户指南》中的 终止实例。
从允许列出的 IP 地址访问您的网络
您可以通过私有 NAT 网关,使用允许列出的地址池来实现 VPC 与本地网络的通信。您可以通过私有 NAT 网关(具有来自允许列出的 IP 地址范围的 IP 地址)来路由发往本地网络的子网中的流量,而不是为每个实例分配一个来自允许列出的 IP 地址范围的单独 IP 地址。
概览
下图显示了实例如何通过 Site-to-Site VPN 访问本地资源。来自实例的流量通过 VPN 连接路由到虚拟私有网关,到达客户网关,然后到达本地网络中的目标。但是,假设目标仅允许来自特定 IP 地址范围(例如 100.64.1.0/28)的流量。这可防止来自这些实例的流量到达本地网络。
下表展示了此场景配置的主要组成部分。VPC 具有原始 IP 地址范围和允许的 IP 地址范围。VPC 有一个来自允许的 IP 地址范围的子网和一个私有 NAT 网关。来自实例的发往本地网络的流量会先发送到 NAT 网关,然后再路由到 VPN 连接。本地网络接收来自具有 NAT 网关源 IP 地址的实例的流量,该地址来自允许的 IP 地址范围。
资源
按如下方式创建或更新资源:
-
将允许的 IP 地址范围与 VPC 关联。
-
在 VPC 中从允许的 IP 地址范围创建子网。
-
在新子网中创建私有 NAT 网关。
-
使用实例更新子网的路由表,以将发往本地网络的流量发送到 NAT 网关。将路由添加到具有私有 NAT 网关的子网的路由表,该网关会将发往本地网络的流量发送到虚拟私有网关。
路由
以下是与第一个子网关联的路由表。每个 VPC CIDR 都有一个本地路由。本地路由使子网中的资源能够使用私有 IP 地址与 VPC 中的其他资源进行通信。第三个条目会将发往本地网络的流量发送到私有 NAT 网关。
| 目标位置 | 目标 |
|---|---|
10.0.0.0/16 |
本地 |
100.64.1.0/24 |
本地 |
192.168.0.0/16 |
nat-gateway-id |
以下是与第二个子网关联的路由表。每个 VPC CIDR 都有一个本地路由。本地路由使子网中的资源能够使用私有 IP 地址与 VPC 中的其他资源进行通信。第三个条目会将发往本地网络的流量发送到虚拟私有网关。
| 目标位置 | 目标 |
|---|---|
10.0.0.0/16 |
本地 |
100.64.1.0/24 |
本地 |
192.168.0.0/16 |
vgw-id |
实现重叠网络之间的通信
即使网络具有重叠的 CIDR 范围,也可以使用私有 NAT 网关来启用网络之间的通信。例如,假设 VPC A 中的实例需要访问 VPC B 中的实例提供的服务。
概览
下表展示了此场景配置的主要组成部分。首先,您的 IP 管理团队需要确定哪些地址范围可以重叠(不可路由的地址范围),哪些地址范围不能重叠(可路由的地址范围)。IP 管理团队根据请求将可路由地址范围池中的地址范围分配给项目。
每个 VPC 都有其原始 IP 地址范围(不可路由)以及由 IP 管理团队分配给它的可路由 IP 地址范围。VPC A 有一个来自可路由范围的子网和一个私有 NAT 网关。私有 NAT 网关从其子网获取其 IP 地址。VPC B 有一个来自可路由范围的子网和一个应用程序负载均衡器。应用程序负载均衡器从其子网获取 IP 地址。
来自 VPC A 的不可路由子网中的实例的流量(将发往 VPC B 的不可路由子网中的实例)通过私有 NAT 网关发送,然后路由到中转网关。中转网关将流量发送到应用程序负载均衡器,后者将流量路由到 VPC B 的不可路由子网中的其中一个目标实例。从中转网关到应用程序负载均衡器的流量具有私有 NAT 网关的源 IP 地址。因此,来自负载均衡器的响应流量使用私有 NAT 网关的地址作为其目的。响应流量将发送到中转网关,然后路由到私有 NAT 网关,该网关会将目标转换为 VPC A 的不可路由子网中的实例。
资源
按如下方式创建或更新资源:
-
将分配的可路由 IP 地址范围与各自的 VPC 关联。
-
在 VPC A 中从可路由的 IP 地址范围创建子网,然后在此新子网中创建私有 NAT 网关。
-
在 VPC B 中从可路由的 IP 地址范围创建子网,然后在此新子网中创建应用程序负载均衡器。将不可路由子网中的实例注册到负载均衡器的目标组。
-
创建中转网关以连接 VPC。确保禁用路由传播。将每个 VPC 连接到中转网关时,请使用 VPC 的可路由地址范围。
-
更新 VPC A 中不可路由子网的路由表,以将发往 VPC B 的可路由地址范围的所有流量发送到私有 NAT 网关。更新 VPC A 中可路由子网的路由表,以将发往 VPC B 的可路由地址范围的所有流量发送到中转网关。
-
更新 VPC B 中可路由子网的路由表,以将发往 VPC A 的可路由地址范围的所有流量发送到中转网关。
路由
以下是 VPC A 中不可路由子网的路由表。
| 目标位置 | 目标 |
|---|---|
10.0.0.0/16 |
本地 |
100.64.1.0/24 |
本地 |
100.64.2.0/24 |
nat-gateway-id |
以下是 VPC A 中可路由子网的路由表。
| 目标位置 | 目标 |
|---|---|
10.0.0.0/16 |
本地 |
100.64.1.0/24 |
本地 |
100.64.2.0/24 |
transit-gateway-id |
以下是 VPC B 中不可路由子网的路由表。
| 目标位置 | 目标 |
|---|---|
10.0.0.0/16 |
本地 |
100.64.2.0/24 |
本地 |
以下是 VPC B 中可路由子网的路由表。
| 目标位置 | 目标 |
|---|---|
10.0.0.0/16 |
本地 |
100.64.2.0/24 |
本地 |
100.64.1.0/24 |
transit-gateway-id |
以下是中转网关路由表。
| CIDR | 附件 | 路由类型 |
|---|---|---|
100.64.1.0/24 |
VPC A 的连接 |
静态 |
100.64.2.0/24 |
VPC B 的连接 |
静态 |