NAT 网关使用案例 - Amazon Virtual Private Cloud

NAT 网关使用案例

以下是公有和私有 NAT 网关的使用案例示例。

从私有子网访问互联网

您可以使用公有 NAT 网关,以启用私有子网中的实例,将出站流量发送到互联网,同时防止互联网与这些实例建立连接。

概览

下图阐明了此使用案例。有两个可用区,每个可用区都有两个子网。每个子网的路由表都决定了流量的路由方式。在可用区 A 中,公有子网中的实例可以通过到互联网网关的路由访问互联网,而私有子网中的实例没有到互联网的路由。在可用区 B 中,公有子网包含一个 NAT 网关,私有子网中的实例可以通过到公有子网中的 NAT 网关的路由来访问互联网。NAT 网关使用弹性 IP 地址作为源 IP 地址,将流量发送到互联网网关。


            具有公有和私有子网、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 网关的问题

测试互联网连接

以下示例演示如何测试私有子网中的实例是否可以连接到互联网。

  1. 在公有子网中启动实例(您使用此实例作为堡垒主机)。在启动向导中,确保选择一个 Amazon Linux AMI,并为实例分配公有 IP 地址。确保安全组规则允许来自本地网络的 IP 地址范围的入站 SSH 流量,以及发送到私有子网的 IP 地址范围的出站 SSH 流量(您也可以同时对入站和出站 SSH 流量使用 0.0.0.0/0 进行测试)。

  2. 在您的私有子网中启动实例。在启动向导中,确保选择一个 Amazon Linux AMI。请勿向实例分配公有 IP 地址。应确保安全组规则允许来自在公有子网中启动的实例的私有 IP 地址的入站 SSH 流量以及所有出站 ICMP 流量。必须选择用于在公有子网中启动实例的相同密钥对。

  3. 在本地计算机上配置 SSH 代理转发,并连接到公有子网中的堡垒主机。有关更多信息,请参阅 为 Linux 或 macOS 配置 SSH 代理转发针对 Windows (PuTTY) 配置 SSH 代理转发

  4. 在堡垒主机中,连接到私有子网中的实例,然后从私有子网中的实例测试 Internet 连接。有关更多信息,请参阅 测试 Internet 连接

为 Linux 或 macOS 配置 SSH 代理转发

  1. 在您的本地计算机上,将私有秘钥添加到身份验证代理。

    对于 Linux,请使用以下命令。

    ssh-add -c mykeypair.pem

    对于 macOS,请使用以下命令。

    ssh-add -K mykeypair.pem
  2. 通过使用 -A 选项启用 SSH 代理转发来连接到公有子网中的实例,并使用该实例的公有地址,如以下示例所示。

    ssh -A ec2-user@54.0.0.123

针对 Windows (PuTTY) 配置 SSH 代理转发

  1. 如果尚未安装 Pageant,请从 PuTTY 下载页面下载并安装 Pageant。

  2. 将您的私有密钥转换为 .ppk 格式。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南 中的使用 PuTTYgen 转换私有密钥

  3. 启动 Pageant,右键单击任务栏上的 Pageant 图标(可能已隐藏),并选择 Add Key(添加)。选择您创建的 .ppk 文件,输入密码(如果需要),然后选择 Open(打开)。

  4. 启动 PuTTY 会话,并使用公有 IP 地址连接到公有子网中的实例。有关更多信息,请参阅连接到您的 Linux 实例。在 Auth 类别中,确保选中 Allow agent forwarding(允许代理转发)选项,并将 Private key file for authentication(用于验证的私有密钥文件)框留空。

测试 Internet 连接

  1. 从公有子网中的实例,使用私有 IP 地址连接到私有子网中的实例,如以下示例所示。

    ssh ec2-user@10.0.1.123
  2. 从私有实例,通过对启用了 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

  3. (可选)如果您不再需要实例,请将其终止。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的终止实例

从允许列出的 IP 地址访问您的网络

您可以通过私有 NAT 网关,使用允许列出的地址池来实现 VPC 与本地网络的通信。您可以通过私有 NAT 网关(具有来自允许列出的 IP 地址范围的 IP 地址)来路由发往本地网络的子网中的流量,而不是为每个实例分配一个来自允许列出的 IP 地址范围的单独 IP 地址。

概览

下图显示了实例如何通过 AWS VPN 访问本地资源。来自实例的流量通过 VPN 连接路由到虚拟私有网关,到达客户网关,然后到达本地网络中的目标。但是,假设目标仅允许来自特定 IP 地址范围(例如 100.64.1.0/28)的流量。这可防止来自这些实例的流量到达本地网络。


            使用 AWS VPN 连接访问本地网络。

下表展示了此场景配置的主要组成部分。VPC 具有原始 IP 地址范围和允许的 IP 地址范围。VPC 有一个来自允许的 IP 地址范围的子网和一个私有 NAT 网关。来自实例的发往本地网络的流量会先发送到 NAT 网关,然后再路由到 VPN 连接。本地网络接收来自具有 NAT 网关源 IP 地址的实例的流量,该地址来自允许的 IP 地址范围。


            来自 VPC 子网的流量通过将 NAT 网关的 IP 地址用作其源地址的私有 NAT 网关进行路由。

资源

按如下方式创建或更新资源:

  • 将允许的 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 中的实例提供的服务。


          具有重叠 CIDR 范围的两个 VPC。

概览

下表展示了此场景配置的主要组成部分。首先,您的 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 的不可路由子网中的实例。


            具有私有 NAT 网关和中转网关的 VPC,用于实现具有重叠 CIDR 的 VPC 之间的通信。

资源

按如下方式创建或更新资源:

  • 将分配的可路由 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 的连接 静态