亚马逊AWS官方博客

让仅使用 IPv6 的工作负载连接到 IPv4 服务

今天,我们宣布推出两项适用于 Amazon Virtual Private Cloud (VPC) NAT 网关Amazon Route 53 的新功能,让仅使用 IPv6 的工作负载能够透明地与仅使用 IPV4 的服务进行通信。想了解吗? 继续阅读;我将为您详细说明。

你们中的一些人正在运行涉及数以万计的虚拟机、容器或微服务的庞大工作负载。为此,您将这些工作负载配置为在 IPv6 地址空间中工作。这就避免了可用的 IPv4 地址用尽的问题(单个 VPC 的最大理论大小为 65,536 个 IPv4 地址,而 IPv6 的 /56 范围允许的最大理论大小为 2^73 -1 个 IPv6 地址),而且,它可以免除管理基于 IPv4 的复杂网络带来的其他麻烦(想想属于多个 AWS 账户、AWS 区域或本地网络的 VPC 之间的非重叠子网)。

但是,您真的可以独立于 IPv4 世界的其他部分运行 IPv6 工作负载吗? 你们中的大多数人都告诉我们,在将多个相关工作负载从 IPv6 迁移到 IPv4 时,无论是为了调用旧版 API,还是只是临时设计,让此类工作负载继续与 IPv4 服务通信都非常重要。无法从 IPv6 主机调用 IPv4 服务会降低迁移速度,让迁移变得更加困难。它迫使你们中的一些人构建难以维护的自定义解决方案。

这就是为什么我们推出两项新功能,让您的 IPv6 工作负载能够透明地与 IPv4 服务进行通信:NAT64(读作“六到四”),用于 VPC NAT 网关;DNS64(也读作“六到四”),用于 Amazon Route 53 Resolver。

它的工作原理是什么?
如下图所示,假设我有一个仅使用 IPv6 地址的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,必须对在另一个 EC2 实例上运行的 IPv4 服务进行 API 调用。在图中,我选择将仅使用 IPv4 的主机放在同一 AWS 账户的独立 VPC 中,但这些功能可以连接到任何 IPv4 服务,无论它们是在同一 VPC 中还是其他 AWS 账户的 VPC 中、您的本地网络中,亦或是公共互联网上。我的仅使用 IPv6 的主机只知道该服务的 DNS 名称。

之前的 NAT64 DNS64 以下是仅使用 IPv6 的主机启动与 IPv4 服务的连接时的操作顺序:

1.IPV6 主机进行 DNS 调用,将服务名称解析为 IP 地址。如果没有 DNS64,Route 53 将返回一个 IPv4 地址。仅使用 IPv6 的主机将无法连接到该 IPv4 地址。但从今天开始,您可以为您的子网启用 DNS64。DNS 解析程序首先检查记录是否包含 IPv6 地址(AAAA 记录)。如果是,则返回该 IPv6 地址。IPv6 主机只需使用 IPv6 即可连接到服务。当记录只包含 IPv4 地址时,Route 53 解析程序会通过在 IPv4 地址前面加上人所共知的 64:ff9b::/96 前缀来合成 IPv6 地址。

例如,如果 IPv4 服务的地址为 34.207.250.62,Route 53 将返回 64:ff9b::ffff:22cf:fa3e

IPv6(十六进制): 64:ff9b::ffff: 22 cf fa 3e
IPv4(十进制): 34 207 250 62

64:ff9b::/96IETFRFC 6052 提议标准中定义的人所共知的前缀。阅读标准文本可以让您快速入睡,同时了解有关 IPv6 到 IPv4 转换的所有详细信息。

2.IPv6 主机启动与 64:ff9b::ffff:22cf:fa3e 的连接。您可以配置子网路由,将所有以 64:ff9b::/96 开头的数据包发送到 NAT 网关。NAT 网关将识别 IPv6 地址前缀,从中提取 IPv4 地址,然后启动与目标的 IPv4 连接。与往常一样,源 IPv4 地址就是 NAT 网关本身的 IPv4 地址。

3.当数据包响应到达时,NAT 网关会重新填充目标主机 IPv6 地址,并在响应数据包的源 IP 地址前面加上众所周知的前缀 64:ff9b::/96

您现在已经了解了它的工作原理,那么如何配置您的 VPC 以利用这两项新功能呢?

如何开始使用?
要启用这两个功能,我必须调整两个配置:首先,标记需要 DNS64 转换的子网;其次,向 IPv6 子网路由表添加一个路由,以将部分 IPv6 流量发送到 NAT 网关。

要启用 DNS64,必须使用新的 --enable-dns64 选项来修改我现有的子网。在本次演示中,我使用了 modify-subnet-attribute 命令。这是一次性的操作。我可以使用 VPC API、AWS Command Line Interface (CLI)AWS 管理控制台来完成此操作。请注意,这是必须显式打开的子网级配置。默认情况下,现有行为会被保留。

aws ec2 modify-subnet-attribute --subnet-id subnet-123 --enable-dns64

我必须在子网的路由表中添加一条路由,以允许 VPC 将以 DNS64 为前缀的 IPv6 数据包转发到 NAT 网关。这会使它将目的地为 64:ff9b::/96 的所有数据包都路由到 NAT 网关。

aws ec2 create-route --route-table-id rtb-123 –-destination-ipv6-cidr-block 64:ff9b::/96 –-nat-gateway-id nat-123

下图描述了这两个简单的配置更改。

NAT64 DNS64 之后通过这两个简单的更改,子网中仅使用 IPv6 的工作负载现在可以与 IPv4 服务进行通信。IPv4 服务可能位于同一 VPC、另一个 VPC 中或互联网上的任何位置。

您可以继续使用现有的 NAT 网关,无需对网关本身或附加到 NAT 网关子网的路由表进行任何更改。

定价和可用性
VPC NAT 网关和 Route 53 的这两项新功能现已在所有 AWS 区域提供,无需另外付费。可能会收取常规 NAT 网关费用。

快来构建仅使用 IPv6 的网络吧!

– seb