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.org
PING 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 地址。
概述
下图显示了实例如何通过 AWS 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 | Attachment | 路由类型 |
---|---|---|
100.64.1.0/24 |
VPC A 的连接 |
静态 |
100.64.2.0/24 |
VPC B 的连接 |
静态 |