DNS64 和 NAT64 - Amazon Virtual Private Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

DNS64 和 NAT64

NAT 网关支持从 IPv6 到 IPv4 的网络地址转换,这通常称为 NAT64。NAT64 可以帮助您的 IPv6 Amazon 资源与同一 VPC 或其他 VPC、本地网络或互联网中的 IPv4 资源进行通信。您可以在 Amazon Route 53 Resolver 上结合使用 NAT64 和 DNS64,也可以使用自己的 DNS64 服务器。

什么是 DNS64?

在 VPC 中运行的仅 IPv6 工作负载只能发送和接收 IPv6 网络数据包。如果没有 DNS64,则对仅 IPv4 服务的 DNS 查询将生成 IPv4 目标地址作为响应,而且仅 IPv6 服务无法与其进行通信。为了弥合这一通信缺口,您可以为子网启用 DNS64,它适用于该子网中的所有 Amazon 资源。使用 DNS64,Amazon Route 53 Resolver 将查找所查询的服务的 DNS 记录,然后执行以下操作之一:

  • 如果记录包含 IPv6 地址,则它将返回原始记录并建立连接,而不会通过 IPv6 进行任何转换。

  • 如果 DNS 记录中没有与目标关联的 IPv6 地址,则 Route 53 Resolver 会在记录中的 IPv4 地址前面添加 RFC6052 (64:ff9b::/96) 中定义的已知 /96 前缀,以便合成一个地址。仅 IPv6 服务会将网络数据包发送到合成的 IPv6 地址。然后,您需要通过 NAT 网关路由此流量,该网关将对流量执行所需的转换,以允许子网中的 IPv6 服务访问该子网外部的 IPv4 服务。

您可以通过 Amazon CLI 使用 modify-subnet-attribute 来启用或禁用子网上的 DNS64,也可以使用 VPC 控制台执行此操作,方法是选择子网,然后选择 Actions(操作)> Edit subnet settings(编辑子网设置)。

什么是 NAT64?

通过使用 NAT64,Amazon VPC 中的仅 IPv6 服务能够与同一 VPC(不同子网中)或已连接的 VPC、本地网络或互联网中的仅 IPv4 服务进行通信。

NAT64 将在现有的 NAT 网关或您创建的任何新 NAT 网关上自动可用。您无法启用或禁用此功能。NAT 网关所在的子网不需要是双堆栈子网即可使 NAT64 正常工作。

在您启用 DNS64 后,如果仅使用 IPv6 的服务通过 NAT 网关将网络数据包发送到合成的 IPv6 地址后,将发生以下情况:

  • NAT 网关可通过 64:ff9b::/96 前缀识别出原始目标是 IPv4,并且会将 IPv6 数据包转换为 IPv4,方法是:

    • 将源 IPv6 替换为自己的私有 IP,该 IP 将被互联网网关转换为弹性 IP 地址。

    • 通过截断 64:ff9b::/96 前缀将目标 IPv6 转换为 IPv4。

  • NAT 网关通过互联网网关、虚拟私有网关或转换网关将转换后的 IPv4 数据包发送到目标,然后启动连接。

  • 仅 IPv4 主机将发回 IPv4 响应数据包。建立连接后,NAT 网关将接受来自外部主机的响应 IPv4 数据包。

  • 响应 IPv4 数据包的目标是 NAT 网关,该网关将接收数据包,并通过将其 IP(目标 IP)替换为主机的 IPv6 地址并将 64:ff9b::/96 添加回源 IPv4 地址来取消 NAT。然后,数据包将按照本地路由流向主机。

通过这种方式,NAT 网关使子网中仅使用IPv6 的工作负载能够与子网外部的仅使用 IPv4 的服务进行通信。

配置 DNS64 和 NAT64

按照本节中的步骤配置 DNS64 和 NAT64,以便与仅 IPv4 服务进行通信。

通过 Amazon CLI 与互联网上的仅 IPv4 服务进行通信

如果您有一个包含仅 IPv6 工作负载的子网,它需要与其外部的仅 IPv4 服务进行通信,本示例将向您展示如何让这些仅 IPv6 服务与互联网上的仅 IPv4 服务进行通信。

您应该首先在公有子网(与包含仅 IPv6 工作负载的子网分开)中配置 NAT 网关。例如,包含 NAT 网关的子网应该具有指向互联网网关的 0.0.0.0/0 路由。

完成以下步骤以使这些仅 IPv6 的服务能够与互联网上的仅 IPv4 服务建立连接:

  1. 将以下三个路由添加到包含仅 IPv6 工作负载的子网的路由表中:

    • 指向 NAT 网关的 IPv4 路由(如果有)。

    • 指向 NAT 网关的 64:ff9b::/96 路由。这将允许通过 NAT 网关路由发往仅 IPv4 服务的仅 IPv6 的工作负载中的流量。

    • 指向仅出口互联网网关(或互联网网关)的 IPv6 ::/0 路由。

    请注意,将 ::/0 指向互联网网关将允许外部 IPv6 主机(VPC 外)通过 IPv6 发起连接。

    aws ec2 create-route --route-table-id rtb-34056078 --destination-cidr-block 0.0.0.0/0 --nat-gateway-id nat-05dba92075d71c408

    aws ec2 create-route --route-table-id rtb-34056078 --destination-ipv6-cidr-block 64:ff9b::/96 --nat-gateway-id nat-05dba92075d71c408

    aws ec2 create-route --route-table-id rtb-34056078 --destination-ipv6-cidr-block ::/0 --egress-only-internet-gateway-id eigw-c0a643a9
  2. 在包含仅 IPv6 工作负载的子网中启用 DNS64 功能。

    aws ec2 modify-subnet-attribute --subnet-id subnet-1a2b3c4d --enable-dns64

现在,私有子网中的资源可以通过互联网与 IPv4 和 IPv6 服务建立有状态的连接。正确配置安全组和 NACL,以允许至 64:ff9b::/96 流量的出口和入口流量。

在您的本地环境中启用与仅 IPv4 服务的通信

Amazon Route 53 Resolver 使您能够将 DNS 查询从 VPC 转发到本地网络,反之亦然。您可以通过以下步骤实现上述目的:

  • 您可以在 VPC 中创建一个 Route 53 Resolver 出站端点,并为其分配您希望 Route 53 Resolver 通过其转发查询的 IPv4 地址。对于本地 DNS 解析程序,这些是 DNS 查询源自的 IP 地址,因此,应为 IPv4 地址。

  • 您可以创建一个或多个规则,用于指定您希望 Route 53 Resolver 转发到本地解析程序的 DNS 查询的域名。此外,您还可以指定本地解析程序的 IPv4 地址。

  • 既然您已设置 Route 53 Resolver 出站端点,那么,您需要在包含仅 IPv6 工作负载的子网上启用 DNS64,然后通过 NAT 网关路由发往本地网络的任何数据。

DNS64 如何适用于本地网络中的仅 IPv4 目标:

  1. 将 IPv4 地址分配给 VPC 中的 Route 53 Resolver 出站端点。

  2. 来自 IPv6 服务的 DNS 查询通过 IPv6 转至 Route 53 Resolver。Route 53 Resolver 将根据转发规则匹配查询,并获取本地解析程序的 IPv4 地址。

  3. Route 53 Resolver 会将查询数据包从 IPv6 转换为 IPv4,并将其转发到出站端点。端点的每个 IP 地址代表一个 ENI,用于将请求转发到 DNS 解析程序的本地 IPv4 地址。

  4. 本地解析程序通过 IPv4 将响应数据包从出站端点返回 Route 53 Resolver。

  5. 假设查询是来自支持 DNS64 的子网进,则 Route 53 Resolver 将会执行以下两项操作:

    1. 检查响应数据包的内容。如果记录中有 IPv6 地址,则它会将保持内容原样,但如果它只包含 IPv4 记录。它还会通过向 IPv4 地址追加 64:ff9b::/96 来合成 IPv6 记录。

    2. 重新打包内容,并通过 IPv6 将其发送到 VPC 中的服务。