亚马逊AWS官方博客
使用 PrivateLink 服务和端点加速 IPv6 的采用
亚马逊云科技现在针对 Amazon PrivateLink 服务和终端节点支持 IPv6。针对 PrivateLink 支持 IPv6,通过解耦服务使用者和服务提供商的 IP 协议版本来加速 IPv6 的采用。即使服务提供商尚未对其所有后端服务开放 IPv6 支持,服务使用者也可以在其 VPC 中使用 IPv6 来访问服务端点。服务提供商可以专注其应用程序的核心功能,而服务使用者则可以通过本地或其他私有连接通过 IPv6 连接到其 VPC 中的服务端点。
越来越多的客户告诉我们他们有采用 IPv6 的意愿。IPv4 的 32 位寻址方案导致可用地址短缺,并会限制我们客户的增长速度。互联网占用量大的客户感受到了公有 IP 地址耗尽的压力,而 IPv4 私有地址池有限的企业也感受到了这种压力,因此他们希望能够扩展 IPv6 的使用。此外,采用 IPv6 还可带来其他优势,例如对 IPSec 的内置支持和简化网络管理。
随着 IPv6 采用量的日益增加,IPv4 资源无法自动与 IPv6 资源通信。因此,只能通过双栈、IPv4 到 IPv6 的转换或重构每个资源以仅使用 IPv6 来实现通信。如果实施起来,这可能会是一项繁重的任务。
实现了对 PrivateLink 服务和端点的 IPv6 支持后,服务提供商可以在网络边界实施双栈,而服务使用者和服务提供商都可以按照自己的节奏来采用 IPv6 。现有使用者和服务可以继续使用 IPv4,而新的使用者则可以开始使用 IPv6。
图 1 显示了使用服务提供商的 PrivateLink 服务的使用者架构示例。服务提供商的后端服务可以继续使用 IPv4。与此同时,一些使用者采用 IPv4 端点,而另一些使用者则采用 IPv6 兼容端点。
图 1:IPv6 与 Amazon PrivateLink 兼容性的网络拓扑图
本文先介绍 1/ 如何为 PrivateLink 服务采用 IPv6,然后介绍 2/ 如何为 PrivateLink 端点采用 IPv6。如果您是服务提供商,可以通过本文了解使 VPC 端点服务能够使用 IPv6 需要做出的更改(即使您的后端服务仍在运行 IPv4)。如果您是服务使用者,则可以通过本文了解使用 IPv6 兼容接口端点的步骤。
概览
- 保留现有功能:采用 IPv6 的 VPC 端点具有所有现有功能,例如支持私有 DNS 名称、端点策略和安全组。带宽、配额、源 IP 保留和代理协议版本 2(PPv2)功能也均未发生变化。有关更多信息,请参阅 Amazon PrivateLink 概念。
- 默认情况下禁用互联网访问:具有 IPv6 地址的 VPC 端点弹性网络接口(ENI)是私有的,因此无法从互联网寻址。由于 ENI 上启用了 DenyAllIGWTraffic 属性,因此它们不能通过 VPC 的互联网网关(IGW)接收任何流量。所以,在创建和部署时都不能禁用该属性。
- IP 地址类型取决于 VPC 子网:当您调用 create-vpc-endpoint 和 modify-vpc-endpoint API 时,IpAddressType 值表示是向您的 VPC 端点 ENI 分配 IPv4 地址、IPv6 地址还是两者兼而有之。只能在具有兼容 IP 版本的子网中创建 VPC 端点。有关更多信息,请参阅通过 Amazon PrivateLink 共享您的服务中的 IP 地址类型。
- DNS 记录类型取决于 IP 地址类型:当您在 DnsOptions 下调用 create-vpc-endpoint 和 modify-vpc-endpoint API 时,DnsRecordIpType 值会指定您 VPC 端点的私有、区域和可用区 DNS 是具有 A 记录、AAAA 记录还是两者兼而有之。DnsRecordIpType 的允许值为 ipv4、ipv6、dualstack 或 service-defined,具体取决于 IpAddressType。有关更多信息,请参阅创建 Amazon PrivateLink 支持的服务 中的将您的端点服务设置为可供服务使用者使用。
- 亚马逊云科技私有 DNS 服务:当亚马逊云科技服务公开推出 *.aws 域名时,PrivateLink 将支持该域名作为额外的私有 DNS 名称。
针对 PrivateLink 启用 IPv6
VPC 端点服务
如果您是服务提供商,则必须按照步骤 1-4 执行操作,使使用者能够针对其 VPC 端点服务创建 IPv6 VPC 接口端点。服务提供商是亚马逊云科技客户或合作伙伴(例如 ISV)、附属组织(例如监管机构),或者仅仅是您向组织内其他 VPC 公开的应用程序,无需网络连接(例如 VPC 对等连接或 VPC 共享)。
步骤 1:将 VPC 和子网配置为双栈
您的 VPC 必须与 IPv6 CIDR 关联,且您的子网必须为双栈子网。要将现有的仅限 IPv4 的 VPC 和子网迁移至双栈,请参阅将现有 VPC 从 IPv4 迁移至 IPv6;要创建具有 IPv6 CIDR 区块和子网的新 VPC,请参阅 Amazon Virtual Private Cloud 用户指南中的使用 Amazon CLI 创建双栈 VPC 和子网。
步骤 2:将网络负载均衡器配置为使用双栈 IP 地址类型
您需要将网络负载均衡器(NLB)的 IP 地址类型配置为双栈,以支持 IPv6 流量。
要将现有 NLB 的 IP 地址类型从仅限 IPv4 更新为双栈,请运行以下命令。
aws elbv2 set-ip-address-type \
--load-balancer-arn <nlb-arn> \
--ip-address-type dualstack
要创建双栈 NLB,请参阅网络负载均衡用户指南中的创建双栈负载均衡器。有关更多信息,请参阅网络负载均衡器的 IP 地址类型。创建新的 NLB 后,您可以关联其目标组、侦听器配置和您所需的监控。目标不需要支持 IPv6 流量。在步骤 4:为 IPv6 接口端点启用 VPC 端点服务的过程中,您需要将新 NLB 添加到您的 VPC 端点服务。
步骤 3:如果您的应用程序处理来自 PPv2 标头的 IP 地址,则它还必须处理 IPv6
如果您未在 NLB 目标组上使用 PPv2,则可以跳过此步骤。
在目标组上启用 PPv2 可确保每个请求都有一个前置标头,其中包含 IP 地址信息以及源使用者 VPC 端点 ID。如果启用了 PPv2,且您的目标应用程序正在处理源 IPv4 地址(例如用于过滤流量),则目标应用程序还必须允许处理 IPv6 地址。
有关 PPv2 的更多信息,请参阅网络负载均衡器的目标组中的代理协议。
步骤 4:为 IPv6 接口端点启用 VPC 端点服务
运行以下命令,将 IPv6 添加为您的 VPC 端点服务支持的 IP 地址类型。这使您的 VPC 端点服务能够在双栈模式下运行,同时接受 IPv4 和 IPv6 请求。
aws ec2 modify-vpc-endpoint-service-configuration \
--service-id vpce-svc-12345678 \
--add-supported-ip-address-types ipv6
注意:如果没有将任何与 VPC 端点服务关联的 NLB 配置为用于双栈,此命令会出错(请参阅步骤 2:将网络负载均衡器配置为使用双栈 IP 地址类型)。您可以分别使用 --add-network-load-balancer-arns
和 --remove-network-load-balancer-arns
选项在 VPC 端点服务中添加或从中删除 NLB。
以下命令可创建新的支持 IPv6 的 VPC 端点服务。--network-load-balancer-arns
选项必须仅指定双栈 NLB,--supported-ip-address-types
选项必须为 ipv4,ipv6。如果没有将任何与 VPC 端点服务关联的 NLB 配置为用于双栈,此命令会出错。
aws ec2 create-vpc-endpoint-service-configuration \
--network-load-balancer-arns <nlb-arns> \
--supported-ip-address-types ipv4,ipv6
VPC 端点
VPC 端点服务支持 IPv6 后,其使用者就可以为关联的 VPC 端点启用 IPv6 或双栈。如果您使用的是 PrivateLink 服务,必须按照步骤 1-4 创建 IPv6 或双栈 VPC 接口端点。
步骤 1:确认 VPC 端点服务允许 IPv6 端点
要在您的 VPC 端点上启用 IPv6,此服务必须将 IPv6 作为 SupportedIpAddressType。您可以通过调用 describe-vpc-endpoint-services API 来了解此服务是否支持 IPv6。
aws ec2 describe-vpc-endpoint-services
--filters "Name=supported-ip-address-types,Values=ipv4,ipv6"
在响应中,SupportedIpAddressTypes 提供了在 PrivateLink 服务上启用的 IP 地址类型。双栈 VPC 端点服务响应包括 IPv4 和 IPv6。
{
"ServiceNames": [
"com.amazonaws.vpce.region.vpce-svc-12345678"
],
"ServiceDetails": [
{
"ServiceName": "com.amazonaws.vpce.region.vpce-svc-12345678",
"ServiceId": "vpce-svc-12345678",
...
"Owner": "098765432109",
"BaseEndpointDnsNames": [
"vpce-svc-12345678.region.vpce.amazonaws.com"
],
...
"SupportedIpAddressTypes": [
"ipv4",
"ipv6"
]
}
]
}
步骤 2:IpAddressType 值必须与子网的 IP 版本兼容
您必须选择您的 VPC 端点将使用哪个 IP 版本作为 IpAddressType 值,步骤 4:在接口端点上启用 IPv6 需要使用此版本。必须在具有兼容 IP 版本的子网中创建 VPC 端点。有关更多信息,请参阅通过 Amazon PrivateLink 共享您的服务中的为接口端点启用 IPv6 的要求。VPC 端点服务必须支持指定的 IP 地址类型。
要将现有仅限 IPv4 的 VPC 和子网迁移到双栈或仅限 IPv6,请参阅 Amazon Virtual Private Cloud用户指南中的将现有 VPC 从 IPv4 迁移到 IPv6。
步骤 3:DNS 记录 IP 地址类型必须基于 IP 版本
您的 DnsRecordIpType 必须基于您的 IpAddressType 值。步骤 4:在接口端点上启用 IPv6 将需要此值。有关基于 DnsRecordIpType 值创建的记录集的更多信息,请参阅通过 Amazon PrivateLink 共享您的服务中的接口端点的 DNS 记录 IP 地址类型。
步骤 4:在接口端点上启用 IPv6
您可以创建或修改支持 IPv6 的端点。您可以使用验证过的支持 IPv6 的服务,并使用您在步骤 2 和步骤 3 中确定的值,来调用 create-vpc-endpoint API 或 modify-vpc-endpoint API。
以下示例使用 create-vpc-endpoint API 创建新的双栈接口端点。
aws ec2 create-vpc-endpoint \
--vpc-id vpc-12345678 \
--vpc-endpoint-type Interface \
--service-name com.amazonaws.vpce.region.vpce-svc-12345678 \
--subnet-id subnet-12345678 \
--security-group-id sg-12345678 \
--ip-address-type dualstack \
--dns-options "DnsRecordIpType=dualstack"
根据 PrivateLink 服务配置,新创建的端点连接可能需要被 VPC 端点服务提供商接受才能使用。有关更多信息,请参阅 Amazon PrivateLink 和 VPC 端点用户指南中的接受和拒绝端点连接请求。
以下示例使用 modify-vpc-endpoint API,通过将端点更改为双栈来启用仅 IPv4 VPC 端点以用于 IPv6。
aws ec2 modify-vpc-endpoint \
--vpc-endpoint-id vpce-12345678 \
--add-subnet-ids subnet-12345678 \
--remove-subnet-ids subnet-12345678 \
--ip-address-type dualstack \
--dns-options "DnsRecordIpType=dualstack"
您可以通过调用 describe-vpc-endpoints API 来确保在端点上启用 IPv6。以下示例将为您的 VPC 端点的 dualstack 返回 IpAddressType 值。
aws ec2 describe-vpc-endpoints \
--vpc-endpoint-ids vpce-12345678
在响应中,IpAddressType 和 DnsOptions 应返回您在创建或修改端点时指定的值。以下是我们的示例,它将两个值都显示为 dualstack。
{
"VpcEndpoints": [
{
"VpcEndpointId": "vpce-12345678",
...
"IpAddressType": "dualstack",
"DnsOptions": {
"DnsRecordIpType": "dualstack"
},
...
}
]
}
您也可以使用 filters 选项列出与您指定的条件匹配的所有端点。以下示例将为所有 VPC 端点的 dualstack 返回 IpAddressType 值。
aws ec2 describe-vpc-endpoints \
--filters Name=ip-address-type,Values=dualstack
结论
PrivateLink 端点 IPv6 兼容性允许客户通过解耦服务提供商和服务使用者 IP 版本来更快地采用 IPv6。如果您是在 IPv4 上运行堆栈的服务提供商,则可以通过 IPv6 将您的服务端点设置为可供服务使用者使用。如果您是需要采用 IPv6 的使用者,现在可以选择通过 IPv6 与您的 PrivateLink 端点进行交互。本博文介绍了 PrivateLink IPv6 的功能,并提供了您可以遵循的步骤,只需很少的工作量即可将该功能应用于您的服务和端点。有关 PrivateLink 的更多信息,请参阅 Amazon PrivateLink 和 VPC 端点用户指南。要开始使用 PrivateLink,请参阅适用于 VPC 的亚马逊云科技管理控制台中的端点服务或端点。