在过去几年中,IPv6 的采用率持续增长,尤其是在移动网络中。迁移到 IPv6 的主要原因包括:
- IPv4 地址的有限可用性可能会限制向公众扩展面向公众的 Web 和应用程序服务器的能力。
- 如果移动网络的 IPv6 用户的网络流量不需要管理 IPv6 到 IPv4 的转换,他们将体验到更好的性能。
- 您可能需要遵守监管规则(例如[例如美国的《联邦采购条例》](https://www.federalregister.gov/documents/2009/12/10/E9-28931/federal-acquisition-regulation-far-case-2005-041-internet-protocol-version-6-ipv6)),才能通过 IPv6 运行特定的互联网流量。
基于这一原因,我们发现,通过向 Amazon Global Accelerator 添加 IPv6 支持,我们可以帮助改善客户用来访问您的应用程序的网络路径。Global Accelerator 使用 [Amazon 全局网络](https://aws.amazon.com/about-aws/global-infrastructure/global_network/#Global_Network)来路由网络流量,并始终保持较低的数据包丢失、抖动和延迟。[Atlassian](https://aws.amazon.com/about-aws/global-infrastructure/global_network/#Global_Network)、[New Relic](https://youtu.be/FmhL2334GIY) 和 [ SkyScanner ](https://aws.amazon.com/solutions/case-studies/skyscanner-case-study/)等[客户](https://aws.amazon.com/global-accelerator/customers/)已经在使用 Global Accelerator 来提高其应用程序的全球可用性和性能。
Global Accelerator 提供两个**全局静态公共 IP**来充当应用程序的固定入口点。您可以更新应用程序端点,而无需对 IP 地址进行面向用户的更改。如果您配置了多个应用程序端点,Global Accelerator 会自动将您的流量重新路由到最近的运行状况良好的可用端点,以缓解端点故障。
从今天开始,您可以通过 Global Accelerator 将 **IPv6 流量路由**到在 Amazon 区域中运行的应用程序端点,从而提升网络性能。Global Accelerator 目前支持两种类型的加速器:**双栈**和**仅限 IPv4** 的加速器。使用双栈加速器,您将获得一对 IPv4 和 IPv6 全局静态 IP 地址,它们可以同时处理 IPv4 和 IPv6 流量。
对于现有的仅限 IPv4 的加速器,您可以将**加速器更新**为双栈,以同时处理 IPv4 和 IPv6 流量。此更新使您的加速器能够处理 IPv6 流量,并且不会影响加速器提供的现有 IPv4 流量。
支持 IPv6 和 IPv4 流量的双栈加速器需要在后端使用双栈端点。例如,[应用程序负载均衡器 (ALB)](https://aws.amazon.com/elasticloadbalancing/application-load-balancer/) 的 IP 地址类型可以配置为仅 IPv4 或双栈,从而允许它们同时接受 IPv4 或 IPv6 客户端连接。目前,支持将双栈 ALB 作为双栈加速器的端点。
### **部署双栈应用程序**
为了测试这个新功能,我需要一个带有 ALB 入口点的双栈应用程序。应用程序必须部署在[ Amazon Virtual Private Cloud(Amazon VPC)](https://aws.amazon.com/vpc/)中,并且支持 IPv6 流量。我的账户中恰好没有 IPv6 就绪型 VPC。我可以按照[这些说明将仅支持 IPv4 的现有 VPC 迁移到 IPv6](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-migrate-ipv6.html),也可以[创建支持 IPv6 寻址的 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/get-started-ipv6.html)。在本文中,我选择创建一个 VPC。
在[Amazon 管理控制台](https://console.aws.amazon.com/)中,我导航到[ Amazon VPC 控制面板](https://console.aws.amazon.com/vpc/home)。我选择**启动 VPC 向导**。在向导中,我为**名称**标签输入一个值。此值将用于为 VPC 中的所有资源自动生成**名称**标签。然后,我选择了关联 **Amazon 提供的 IPv6 CIDR 块**的选项。我将所有其他选项保留为默认值,然后选择**创建 VPC**。
![image.png](https://dev-media.amazoncloud.cn/230818fd5f654e5493c675728aff5ebb_image.png)
不到一分钟后,VPC 就已准备就绪。我编辑了两个公有子网的设置,以启用**自动分配 IP 设置**,以便为该子网中的新网络接口自动请求公有 IPv4 地址和 IPv6 地址。
![image.png](https://dev-media.amazoncloud.cn/5797b11c157e4f22a3bf44ff07f30672_image.png)
现在,我想在此 VPC 中部署应用程序。该应用程序将成为我的加速器的端点。我从[CloudFormation 文档的“示例解决方案”部分](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/sample-templates-applications-us-west-2.html)查看并下载了 **WordPress 可扩展且耐用**的 [Amazon CloudFormation 模板](https://aws.amazon.com/cloudformation/)。此模板在 ALB 后面部署了一个完整的 WordPress 网站。Web 层是可扩展的,并作为 EC2 [ 自动扩展组](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html)实施。MySQL 数据库由 [Amazon 关系数据库服务(RDS)](https://aws.amazon.com/rds/)管理。
在部署堆栈之前,我编辑了模板以进行一些更改。首先,我添加了一个```DBSubnetGrou```资源:
```JSON
"DBSubnetGroup" : {
"Type": "AWS::RDS::DBSubnetGroup",
"Properties": {
"DBSubnetGroupDescription" : "DB subnet group",
"SubnetIds" : { "Ref" : "Subnets"}
}
},
```
然后,我将```DBSubnetGroupName```属性添加到```DBInstance```资源中。这样,模板创建的数据库将部署在与 Web 服务器相同的子网(和 VPC)中。
```JSON
"DBSubnetGroupName" : { "Ref" : "DBSubnetGroup" },
```
最后一项更改是将 ```IpAddressType```属性添加到```ApplicationLoadBalancer``` 资源中,以创建具有 IPv6 地址,并且可以与 Global Accelerator 的新双栈选项一起使用的双栈负载均衡器。
```JSON
"IpAddressType": "dualstack",
```
由于 ```IpAddressType``` 设置为 ```dualstack```,因此堆栈创建的 ALB 也将具有 IPv6 地址,并且可以与 Global Accelerator 的新双栈选项一起使用。
在 CloudFormation 控制台中,我创建了一个堆栈并上传了我刚刚编辑的模板。在模板参数中,我输入要使用的数据库用户和密码。对于 **VpcId** 参数, 我选择了我刚刚创建的 IPv6 就绪型 VPC。对于 **Subnets** 参数,我选择同一 VPC 的两个公有子网。之后,我进入后续步骤并创建堆栈。
几分钟后,堆栈创建就完成了。要访问该网站,我需要打开负载均衡器的网络访问权限。在 EC2 控制台中,我创建了一个安全组,该安全组允许使用 HTTP 和 HTTPS 协议(端口 80 和 443)进行公开访问。
![image.png](https://dev-media.amazoncloud.cn/357667b69862426195508ce49dcbd48e_image.png)
我从导航窗格中选择**负载均衡器**,然后选择我的应用程序使用的 ALB。在**安全**部分中,我选择**编辑安全组**,然后添加我刚刚创建的安全组以允许 Web 访问。
![image.png](https://dev-media.amazoncloud.cn/20589640796c43f2ac2dbe41176036ea_image.png)
现在,我查找负载均衡器的双栈(A 或 AAAA 记录)DNS 名称。我打开浏览器并使用 DNS 名称进行连接以完成 WordPress 的配置。
![image.png](https://dev-media.amazoncloud.cn/87e04302371645a39539993f8d0f84e0_image.png)
再次连接到端点时,我看到了我的新(空的)WordPress 网站。
![image.png](https://dev-media.amazoncloud.cn/4201c88d0668470cbb7094322884975f_image.png)
### **使用同时支持 IPv6 和 IPv4 流量的双栈加速器**
现在,我的应用程序已经准备就绪,我在双栈 ALB 前面添加了一个双栈加速器。在[ Global Accelerator 控制台](https://console.aws.amazon.com/globalaccelerator/home)中,我选择了**创建加速器**。我输入了加速器的名称并选择了**标准**加速器类型。
![image.png](https://dev-media.amazoncloud.cn/0dbb5c66b9f740148c2b3ada094bcf5c_image.png)
为了通过此加速器同时路由 IPv4 和 IPv6,我为 **IP 地址类型**选择了**双栈**选项。
![image.png](https://dev-media.amazoncloud.cn/c0d3aa3d7bfa4af197d7de03956fc802_image.png)
然后,我使用 TCP 协议为端口 80 添加了一个侦听器。
![image.png](https://dev-media.amazoncloud.cn/638c188efb084fa58efce3fbf741cac3_image.png)
对于该侦听器,我在部署了应用程序的 Amazon 区域中配置一个端点组。
![image.png](https://dev-media.amazoncloud.cn/94b0ba9d22244314807fa56c4074a2dc_image.png)
我为**端点类型**选择了**应用程序负载均衡器**,然后在 CloudFormation 堆栈中选择了 ALB。
![image.png](https://dev-media.amazoncloud.cn/09570a952a0841a2bc23f16528a60bc1_image.png)
然后,我选择了**创建加速器**。几分钟后,加速器已完成部署,我有一个双栈 DNS 名称,可以根据客户端使用的网络,使用 IPv4 或 IPv6 访问 ALB。
![image.png](https://dev-media.amazoncloud.cn/8cb9466c733040b38b34b627d0f1304c_image.png)
现在,我的客户可以使用 IPv4 和 IPv6 地址,或者更好的是,使用加速器的双栈 DNS 名称来连接到 WordPress 网站。如果我的客户使用前端或移动应用程序连接到 [WordPress REST API](https://developer.wordpress.org/rest-api/),我可以使用双栈 DNS 名称,这样客户端就可以使用他们首选的 IPv4 或 IPv6 路由进行连接。
要了解 Global Accelerator 和 ALB 之间的通信是否正常,我可以监控新的 **FlowsDrop** [Amazon CloudWatch](https://aws.amazon.com/cloudwatch/) 指标。此指标表明 Global Accelerator 是否无法通过端点路由 IPv6 流量。例如,如果在创建加速器后将 ALB 的配置更新为仅使用 IPv4,则可能会发生这种情况。
### **可用性和定价**
您可以使用 [Amazon 管理控制台](https://console.aws.amazon.com/)、[Amazon Command Line Interface(CLI)](https://aws.amazon.com/cli/)和 [Amazon 开发工具包](https://aws.amazon.com/tools/)配置双栈加速器。您可以使用双栈加速器来优化对部署在任何商业 Amazon 区域的应用程序的访问。
不支持协议转换,无论是 IPv4 到 IPv6,还是 IPv6 到 IPv4 的转换。例如,Global Accelerator 不允许我使用仅限 IPv4 的 ALB 端点配置双栈加速器。此外,对于 IPv6 ALB 端点,必须启用[客户端 IP 保留](https://docs.aws.amazon.com/global-accelerator/latest/dg/preserve-client-ip-address.html)。
使用双栈加速器不会产生额外成本。您需要为往返于加速器的流量所使用的主导方向的数据传输时数和流量付费。数据传输成本取决于客户的位置和运行应用程序的 Amazon 区域。有关更多信息,请参阅[Global Accelerator 定价页面](https://aws.amazon.com/global-accelerator/pricing/)。
**[利用 Amazon Global Accelerator 优化客户访问应用程序时使用的 IPv6 和 IPv4 网络路径。](https://aws.amazon.com/global-accelerator/)**
—[ Danilo](https://twitter.com/danilop)