摘要:为了降低IPv6过渡阶段IPv4/IPv6Web服务的部署难度,加快向IPv6过渡的进程,文章针对IPv6过渡的4个阶段制定了Web服务基于双栈反向代理方案和渐进式的过渡策略。通过在双栈环境下部署反向代理服务,同时分别监听IPv4和IPv6服务端口,并结合DNS域名设置,来实现支持IPv4/IPv6双栈的Web服务,使得纯IPv4和纯IPv6用户均可访问。文章对反向代理后Web内容可能存在跨站跨协议资源访问的问题提出了增加过滤转换器的解决方法。与其他常用的双栈、网络翻译等过渡机制相比,采用基于双栈反向代理方式对于Web应用的IPv6过渡有明显的优势,无需对现有网络进行任何变更就可以快速部署,不需要公网双栈和无状态网络翻译机制所要求的公网地址,而且在用户和服务之间增加了隔离屏障,提高了服务的安全性。
自从全球地址分配机构(IANA)于2011年2月3日正式宣布,将其最后的IPv4地址平均分配到全球5个地区的互联网络信息中心后,目前仅剩下非洲互联网信息中心(AFRINIC)可正常分配IPv4地址[1]。IPv4向IPv6的全面过渡更加紧迫,但由于互联网的复杂性和多样性,这个过渡必将是一个漫长的过程。由于IPv4协议和IPv6协议本质上不兼容,在过渡阶段如何快速有效的向纯IPv4和纯IPv6用户提供支持IPv4/IPv6的服务,最终实现平滑过渡,是必须要考虑和解决的问题。
本文首先介绍了IPv6过渡阶段的Web服务过渡机制,然后设计了采用双栈反向代理服务实现同时支持IPv4/IPv6的Web服务方案,并针对IPv6过渡的4个阶段制定了双栈反向代理的过渡策略,最后对基于双栈反向代理的方案与其他常用过渡机制进行比较并得出结论。
IPv6过渡阶段的Web服务过渡策略介绍
文献[2]将IPv6过渡分为4个阶段:纯IPv4(阶段0),IPv4为主、存在少量的IPv6(阶段1),IPv6为主、存在少量的IPv4(阶段2)和纯IPv6(阶段3)。由于阶段0和阶段3通信需求仅限于IPv4、IPv6同协议访问,其中阶段1和阶段2的不同点在于纯IPv4网络、双栈网络、纯IPv6网络接入类型所占比例的多少。本文主要讨论阶段1和阶段2的场景,需要同时满足终端IPv4/IPv6用户访问IPv6/IPv4Web服务的需求。见表1,只有双栈方式接入的终端用户能够访问所有的IPv4/IPv6服务,纯IPv4用户不能访问纯IPv6服务,纯IPv6用户不能访问纯IPv4服务。要满足所有终端用户同时能够访问IPv4/IPv6服务,需要终端用户通过IPv4-over-IPv6或IPv6-over-IPv4隧道的方式建立另外一种协议的通信通道,隧道的建立需要终端用户做一定的配置,对于情况各异的用户来说难以大规模使用。
因此,需要从Web服务端实现纯IPv4和纯IPv6用户的访问,通常有以下两种方法:(1)服务器基于双栈提供Web服务,原生支持IPv4/IPv6;(2)IPv4-IPv6翻译,通过一个翻译模块将IPv4数据包和IPv6数据包互相转换,翻译机制可以分为无状态翻译,如SIIT(stateless IP/ICMP translation)和IVI(IV stands for 4 and VI stands for 6),以及有状态翻译,如NAT-PT(NAT-protocol translation)和NAT64。[3-5]
Web服务本身采用双栈方式是首选,它可避免因转换导致的任何复杂性,并为服务器提供最多信息。[6]双栈方式需要整个链路上的设备均支持双栈,包括服务器和应用本身,这意味着可能涉及到网络改造和软硬件设备更新,且公网双栈需要消耗公网IPv4地址。IPv4-IPv6翻译机制需要在边界部署路由或网关,无状态翻译机制不需要维护会话的状态,具有一定的灵活性,但它是以消耗IPv4地址空间的代价来实现双向通信,有状态翻译机制需要翻译器维护一个动态的地址(地址和端口)映射和一个IPv4地址资源池。
由于公网双栈方式和无状态翻译机制Web服务本身需要消耗公网IPv4地址空间,他们没有解决IPv6协议主要解决的地址空间的问题;私网双栈虽然不消耗公网IPv4地址但仍然需要链路上设备的支持;另外,私网双栈和有状态翻译机制需要部署路由或网关并维护会话状态,增加了网络复杂性。因此,为了降低IPv6过渡期间Web服务部署实施的复杂度,本文提出采用双栈反向代理的方式实现过渡时期对Web服务的访问,通过将反向代理服务器部署在双栈环境中,Web服务可以只接入纯IPv4或纯IPv6,不需要对现有网络结构做任何改变,进而逐步完成向IPv6的过渡。
双栈反向代理服务方案的设计
反向代理是指由代理服务器来接收来自互联网的访问请求,再把访问请求转发到对应的网站服务器,并从对应网站服务器获取结果返回给访问用户。[7]对于终端用户来说,用户正常访问网页即可,不需要做任何改变或配置。文献[7-10]介绍了反向代理在Web服务中的应用,并介绍了在安全、负载均衡、公网地址消耗等方面的优势,但这些文献均未涉及IPv4/IPv6双栈环境的场景。
双栈反向代理的方式是指将反向代理服务器部署在双栈环境中,同时分别监听IPv4和IPv6服务端口,Web服务可以只接入纯IPv4或纯IPv6网络,纯IPv4和纯IPv6终端用户可以通过反向代理服务器进行代理访问另一协议的Web服务。由于采用双栈代理后Web内容可能存在跨协议的资源引用问题,本文设计采用在反向代理服务内设置过滤转换器和通用代理器来实现跨协议访问。
1.双栈反向代理服务的网络设计
IPv6过渡阶段双栈反向代理部署网络结构如图1所示。双栈反向代理服务器部署在双栈网络中,同时监听IPv4/IPv6的服务端口:
(1)对于纯IPv4用户,在一侧作为IPv4服务器,另一侧作为IPv6客户端,将来自IPv4客户端的请求代理到IPv6服务器。
(2)对于纯IPv6用户,在一侧作为IPv6服务器,另一侧作为IPv4客户端,将来自IPv6客户端的请求代理到IPv4服务器。
双栈反向代理服务器部署比较灵活,部署的位置取决于网络的哪个部分可以支持双栈,不需要对现有网络结构做任何变更,又实现了双栈Web服务。即使整个网络没有IPv6或IPv4,也可以在外部支持双栈的数据中心托管自己的反向代理服务器,实现IPv4/IPv6的服务。由于跨协议访问服务是由反向代理服务器中转完成的,因此服务内容的管理维护与之前没有变化,不需要考虑IPv4和IPv6不同的情况。
2.双栈反向代理服务的域名服务设计
在反向代理服务的部署实施过程中,结合DNS(域名服务)配置可以更好地实现Web服务的快速部署。本文中Web服务域名设计如下:域名为example.com和example6.com,其中example.com域下的子域名同时配置A记录和AAAA记录,example6.com域下的子域名仅配置AAAA记录,在实际应用中可以选择不使用example6.com域名。其中A记录是用来创建到IPv4地址的记录,AAAA记录是用来创建到IPv6地址的记录。
假定双栈反向代理服务器的IPv4和IPv6的地址分别为222.204.33.99和2001:250:6c00::3:99,以处于纯IPv4网络中域名为lib.example.com(ipv4地址为222.200.3.200)和处于纯IPv6网络中域名为6.example.com(IPv6地址为2001:250:6c00::210:201)的Web服务站点为例介绍域名设置方式。具体域名配置时将原本纯IPv4服务域名lib.example.com和lib.example6.com的AAAA记录指向反向代理服务器的IPv6地址2001:250:6c00::3:99,将原本纯IPv6服务域名6.example.com对应的A记录指向反向代理服务器的IPv4地址222.204.33.99。当纯IPv4或纯IPv6用户访问原本只有另一协议网络的Web服务时,域名将解析至反向代理服务器进行代理访问。