成俞晟 阿里云智能GTS-SRE团队 技术服务经理

曾就职于联想集团、华为、中化集团,有着丰富的数据中心及云计算经验,现就职于阿里云智能GTS-SRE团队,任北方区SRE架构师。

上期本文对IPv6化改造思路以及CDN的IPv6化改造进行了介绍,本期将对ECS及业务应用的IPv6化改造进行介绍。

ECS及业务应用IPv6化改造方法

这部分的改造我们可以根据具体情况使用两种方法:
  • 使用IPv6转换服务:通过阿里云的IPv6转换服务进行旁路转换,不改造应用架构,但类似反向代理有一定的局限性,可以作为短期过渡使用。
  • ECS配置IPv6网关:VPC中开启IPv6网关,在每一台ECS中配置IPv6 Interface,并手工配置应用服务使之开启IPv6的服务监听,这种方法会进行一些配置变更和应用变更,虽然操作技术门槛略高一些,但是长期可行的方式。

使用IPv6转换服务

从客户业务应用的角度出发,如果客户对其应用层面并不非常熟悉,对现有业务的不间断运行要求非常高,同时和外部数据交换并不是那么频繁,那么采用“IPv6转换服务”是个不错的选择,具体操作起来也很容易,具体分为三步:
  • 获取应用服务IP和服务端口:这里的IP和服务端口可以是SLB的,也可以是ECS的,主要看现有IPv4应用对外发布时所暴露的IP和服务端口;
  • 评估应用的CPS(Connection Per Second,每秒新建连接数)和带宽:根据现有IPv4应用访问情况和客户规划情况确定IPv6转换服务的实例规格和带宽;
  • 配置IPv6转换服务:根据CPS、带宽、服务IP、服务端口就可以进行IPv6转换服务的配置了,配置对应的映射条目。

下图是为1xx.xx.xx9.129的TCP80进行IPv6转换映射:

图1:添加IPv6转换映射条目

配置好后会获得一个IPv6地址,使用这个IPv6地址即可访问ECS或业务应用了。如上图的配置,我们的IPv6访问地址就为:http://[2408:4000:300::2bf]:80。

图2:访问IPv6地址示例

ECS配置IPv6网关

如果客户对自身的业务应用非常熟悉,且动手能力很强,那么通过支持客户对ECS和应用进行IPv6的改造,使其达到“IPv6+IPv4双栈”模式,是一个一劳永逸的方法,这种方法在变更前要对客户应用架构和具体使用的服务程序很了解,同时变更过程中可能会出现业务闪断,需要格外注意方案的有效性,可以通过灰度的方式分模块进行变更和验证,具体改造需要下面几步。

  • 配置VPC的IPv6功能

    这一步需要提前让客户申请“IPv4/IPv6双栈VPC公测资格”,审核通过后点击“开通IPv6”,使VPC和其下的vSwitch支持IPv6。

    图3:VPC开通IPv6功能示意图

    配置成功后如下图所示:

    图4:VPC的IPv6配置成功
  • 创建并配置IPv6网关

    这一步需要配置IPv6网关的规格和IPv6公网带宽,需要根据客户应用的公网转发吞吐和业务带宽进行规划。

    图5:IPv6网关设置
  • 为ECS申请IPv6地址

    在ECS控制台中,为需要进行IPv6改造的ECS申请“辅助IP”,使其获得公网IPv6地址。

    图6:ECS申请“辅助IP”

    这一步只是在阿里云的管控层面为所选ECS申请到了对应的IPv6地址,还需要在ECS层面配置才能使ECS中的操作系统获取这个IPv6地址。同时,需要在“IPv6网关”的“IPv6网关带宽”中为对应的IPv6地址分配带宽,否则此IPv6地址无法对外网提供服务。

    图7:为IPv6地址分配带宽
  • 配置安全组

    这一步非常重要,很多客户在做了IPv6化后发现依然无法通过IPv6进行通讯,客户在安全组中常常会设置“0.0.0.0/0”这种规则,以为是代表所有,其实0.0.0.0/0”仅是IPv4的“ALL对象“,需要客户再创建对应的IPv6安全组规则,授权对象写成“::/0”即可。

  • 配置ECS内的系统参数

    这一步也非常关键,通过修改ECS内sysctl的参数使其Interface支持IPv6协议,并获取3.3中获取的IPv6地址,动手能力强的客户可以通过手工修改sysctl中的net.ipv6.conf.all.disable_ipv6、net.ipv6.conf.default.disable_ipv6、net.ipv6.conf.lo.disable_ipv6三个参数,使其全部为“0”来使能IPv6 Mod,也可通过Linux实例配置IPv6地址->步骤4:配置IPv6地址中的指引执行自动化脚本开启IPv6 Mod。

    开启成功后,通过执行:ip a | grep “inet6”即可看到操作系统已经获取到对应的公网IPv6地址:

    图8:查看ECS操作系统获取到的公网IPv6地址
  • 验证ECS内操作系统的IPv6连通性

    进行过如上五步后,可以在改造后的ECS中执行:ping6 aliyun.com或ping6 ipv6.baidu.com来测试IPv6协议栈和网络是否有效。

    图9:验证ECS内操作系统的IPv6连通性
  • 应用IPv6服务监听开启
    这一步需要对客户业务应用有很深的理解,并根据具体的应用服务软件特性进行IPv6开启。例如某ERP开发公司的某业务应用依赖nginx系的Web服务程序提供服务,对外服务端口为8080,则我们需要在nginx.conf中添加对应的IPv6监听:
    server {
        listen 80;
        listen [::]:80;
        ……
    }

    然后执行nginx -t测试配置是否正确,确认无误后和客户进行灰度发布(systemctl restart nginx);

    然后执行netstat -tunlp看是否出现如下监听服务:
    tcp6 0 0 :::80 :::* LISTEN 1053/nginx

    如出现以上情况,说明变更成功,同时不必紧张为何没有显示IPv4的80监听,这是正常情况,IPv4和IPv6都可访问。

    无论nginx还是tomcat,还是其他C/S或B/S服务,开启IPv6服务监听的方法均大同小异,搜索对应的应用官网或服务商的文档即可获取具体配置方法,这里不再赘述。

结语

下期本文将从“SLB、DNS”几个层面具体讲解IPv6化改造的方法,敬请期待!