如何在AWS平台上通过IPv6访问我的Web服务器?

我的企业网站使用AWS平台。 我希望网站的访问者能够使用IPv6协议访问我的内容。 我如何添加IPv6地址?

虽然EC2实例在撰写本文时并不支持本地IPv6,但是亚马逊在美国东部(北弗吉尼亚),欧盟(爱尔兰),亚太地区(东京)和亚太地区(新加坡)弹性负载均衡器上实施了IPv6。 我将演示如何使用EC2实例和负载均衡器来提供IPv6内容。

弹性负载平衡器(ELB)设置

我假设你已经在使用一个负载平衡器。 (如果您想设置一个,请按照Elastic Load Balancer开发人员指南中的说明进行操作, url为http://awsdocs.s3.amazonaws.com/ElasticLoadBalancing/latest/elb-dg.pdf )。

在ELB条目旁边打勾,以便在底部面板中显示详细信息。 写下你的ELB的双栈名称。 它将类似于像dualstack.new-balancer-751654286.us-east-1.elb.amazonaws.com这样的名字。

testingDNS

使用dig或nslookupvalidation您是否使用双堆栈ELB DNS名称获得A(IPv4)和AAAA(IPv6)logging。 如果您对这些命令行工具不熟悉,请使用基于Web的挖掘,例如http://www.kloth.net/services/dig.php

为您的域创buildCNAME

我build议在丢弃域名上进行testing,以避免潜在的生产中断。 http://www.example.com的CNAME应指向双栈ELB名称。

validation

从IPv6连接的主机访问www.example.com。 或者,您可以使用http://ipv6-test.com/validate.php来testing您的站点的IPv6连接。

对于EC2,IPv6不可用(截至2013年9月); 但是它可用于ELB。 因此,您可以使用ELB作为一种IPv4网关 ,但您还不能将IPv6地址分配给EC2实例。

在“不远的将来”(无论这意味着什么)这个问题可能会改变。

您可以通过CloudFlare CDN代理您的站点来使站点可用于IPv6(以及其他一些优点)。

你可以从Tunnelbroker获得一个免费的IPv6隧道。 它适用于EC2。 我testing过了。

现在IPv6一般可用

从Elastic Load Balancing,AWS IoT,AWS Direct Connect,Amazon Route 53,Amazon CloudFront,AWS WAF和S3 Transfer Acceleration开始,我们一直在努力在过去的几年中将AWS支持添加到AWS的许多不同部分,所有这一切都build立在上个月在虚拟私有云(最初可用于美国东部(俄亥俄州)地区)的EC2实例的IPv6支持宣布上。

今天,我很高兴地分享这样一个消息,即VPC中的EC2实例的IPv6支持现在在总共十五个区域中可用,在这些区域中的九个区域中的应用负载均衡器支持IPv6。

由Jeff Barr于2017年1月25日发布

AWS EC2实例仍然接收RFC1918 IPv4地址空间,但是如果在ELB后面有Web服务,则ELB实例将提供双重dualstackipv6前缀主机名,以提供双重IPv4 / IPv6且仅支持IPv6访问。 ELB和EC2实例之间的通信仍然保持为IPv4,但通过IPv6连接的客户端不会看到任何不同,除非您托pipe的Web应用程序专门查找IPv6地址。

上次我们的目标是将Python Django应用程序从Linode服务器迁移到Amazon EC2-VPC。 起初,我通过互联网了解了很多有关EC2实例的信息,并注意到EC2 VPC目前不支持IPv6。

是的,我们知道ELB和EC2-Classic可能是可能的,但是我们没有能力设置EC2-Classic,因为我们对于EC2-Classic要求更高。 这是个大问题,因为我们喜欢AWS基础架构和RDS数据库风格,但是我们需要在应用程序中获得IPv6。

经过一段时间的思考,我们决定将已经有IPv6支持的Linode服务器作为代理。 在我们在Linode的nginxconfiguration中,我们将所有stream量都代理到端口9099上的EC2-VPC Django应用程序,我们也从EC2-VPC获得静态的:

  location /static/ { proxy_pass http://--AWS_IP--/s6/; } location /media/ { proxy_pass http://--AWS_IP--/m6/; } location / { proxy_pass http://--AWS_IP--:9099/; proxy_set_header X-Real-IP $remote_addr; proxy_read_timeout 4000; } 

在我们的EC2-VPC中,我们使用我们的端口9099上的Django应用程序,并使其可以在外部访问,也在亚马逊控制台上,我们允许外部端口9099访问,因为我们需要我们的Linode nginx能够在这里发送stream量。 另外,不要忘了通过nginx发送从EC2-VPC到Linode的静态和媒体:

  location /s6/ { alias /home/django/static/; } location /m6/ { alias /home/django/media/; } 

最后,我们将AAAA DNSlogging指向Linode服务器,将一条DNSlogging指向EC2-VPC,并且所有工作都很好。 所有stream量都来自EC2-VPC,存储在X-Real-IP头部的真实IP。 其实我认为Linode服务器可能是昂贵的,如果你没有任何其他应用程序,它就像代理一样。 所以当然可以使用任何具有代理function和IPv6支持的服务器。

我原来的post: 接收亚马逊Ec2 Vpc上的Ipv6stream量