IPv6技术白皮书(六):IPv6穿越IPv4隧道技术

一、IPv6穿越IPv4隧道技术

隧道(tunnel)是指一种协议封装到另外一种协议中的技术。隧道技术只要求隧道两端(也就是两种协议边界的相交点)的设备支持两种协议。IPv6穿越IPv4隧道技术提供了利用现有的IPv4网络为互相独立的IPv6网络提供连通性,IPv6报文被封装在IPv4报文中穿越IPv4网络,实现IPv6报文的透明传输。

这种技术的优点是,不用把所有的设备都升级为双栈,只要求IPv4/IPv6网络的边缘设备实现双栈和隧道功能。除边缘节点外,其它节点不需要支持双协议栈。可以大大利用现有的IPv4网络投资。但是隧道技术不能实现IPv4主机与IPv6主机的直接通信。IPv4网络IPv6网络IPv6网络双栈路由器双栈路由器IPv6头DataIPv4头IPv6头DataIPv6头Data

图 IPv6穿越IPv4隧道

IPv6网络边缘设备收到IPv6网络的IPv6报文后,将IPv6报文封装在IPv4报文中,成为一个IPv4报文,在IPv4网络中传输到目的IPv6网络的边缘设备后,解封装去掉外部IPv4头,恢复原来的IPv6报文,进行IPv6转发。

用于IPv6穿越IPv4网络的隧道技术有:

  • IPv6手工配置隧道
  • IPv4兼容地址自动隧道
  • 6to4自动隧道
  • ISATAP自动隧道
  • IPv6 over IPv4 GRE隧道
  • 隧道代理技术
  • 6over4隧道
  • BGP隧道
  • Teredo隧道

1.1 IPv6手工配置隧道

IPv6手工配置隧道的源和目的地址是手工指定的,它提供了一个点到点的连接。IPv6手工配置隧道可以建立在两个边界路由器之间为被IPv4网络分离的IPv6网络提供稳定的连接,或建立在终端系统与边界路由器之间为终端系统访问IPv6网络提供连接。隧道的端点设备必须支持IPv6/IPv4双协议栈。其它设备只需实现单协议栈即可。

IPv6手工配置隧道要求在设备上手工配置隧道的源地址和目的地址,如果一个边界设备要与多个设备建立手工隧道,就需要在设备上配置多个隧道。所以手工隧道通常用于两个边界路由器之间,为两个IPv6网络提供连接。

一个手工隧道在设备上以一个虚接口存在,从IPv6侧收到一个IPv6报文后,根据IPv6报文的目的地址查找IPv6转发表,如果该报文是从此虚拟隧道接口转发出去,则根据隧道接口配置的隧道源端和目的端的IPv4地址进行封装。封装后的报文变成一个IPv4报文,交给IPv4协议栈处理。报文通过IPv4网络转发到隧道的终点。

隧道终点收到一个隧道协议报文后,进行隧道解封装。并将解封装后的报文交给IPv6协议栈处理。

一个设备上不能配置两个隧道源和目的都相同的IPv6手工隧道。

参考:RFC 2893, Transition Mechanisms for IPv6 Hosts and Routers

1.2 IPv4兼容自动隧道

手工配置隧道的端点是手工指定的,而自动隧道的目的地址是根据穿越隧道的IPv6报文的目的地址得到的,不用预先配置。对于IPv4兼容自动隧道,其承载的IPv6报文的目的地址是IPv4兼容的IPv6地址格式。

IPv4兼容地址的前96位全部为0,后32位为IPv4地址。其格式如下:

图  IPv4兼容IPv6地址格式

IPv4兼容隧道是通过Tunnel虚接口实现的,如果一个Tunnel口的封装模式是IPv4兼容隧道,则只需配置隧道的源地址,而目的地址是在转发报文时,从IPv6报文的目的地址中取得的。从IPv4兼容隧道转发的IPv6报文的目的地址必须是IPv4兼容的IPv6地址,隧道的目的地址就是IPv4兼容地址的后32位。如果一个IPv6报文的目的地址不是IPv4兼容地址,则不能从IPv4兼容隧道转发出去。

如果IPv4兼容地址中的IPv4地址是广播地址、多播地址、网络广播地址、出接口的子网广播地址、全0地址、环回地址,则该IPv6报文被丢弃,不会进行隧道封装处理。

IPv4兼容隧道的目的节点就是被封装的IPv6报文的目的节点,被解封装后的报文不会被转发。所以,IPv4兼容隧道是Router到Host,或Host到Host类型的隧道。IPv4兼容隧道是点到多点的隧道。

一个IPv4兼容节点使用IPv4兼容地址同另一个IPv4兼容节点通讯时,使用IPv4兼容隧道对报文进行封装,返回的报文也可以走IPv4兼容隧道(也可以通过IPv6手工隧道);在同一个普通IPv6节点进行通讯时,使用IPv6手工隧道对报文进行封装,返回的报文通过IPv4兼容隧道传输。

由于IPv4隧道要求每一个主机都要有一个合法的IP地址,而且通讯的主机要支持双栈、支持IPv4兼容自动隧道,不适合大面积部署。目前该技术已经被6to4隧道所代替。

1.3  6to4自动隧道

6to4隧道也属于一种自动隧道,隧道也是使用内嵌在IPv6地址中的IPv4地址建立的。与IPv4兼容自动隧道不同,6to4自动隧道支持Router到Router、Host到Router、Router到Host、Host到Host。这是因为6to4地址是用IPv4地址做为网络标识,其地址格式如下:

图 6to4地址格式

其格式前缀(FP)为二进制的001,TLA(Top Level Aggregator)为0x0002。也就是说,6to4地址可以表示为2002::/16,而一个6to4网络可以表示为2002:IPv4地址::/48。

通过6to4自动隧道,可以让孤立的IPv6网络之间通过IPv4网络连接起来。6to4自动隧道是通过Tunnel虚接口实现的,6to4隧道入口的IPv4地址手工指定,隧道的目的地址根据通过隧道转发的报文来决定。如果IPv6报文的目的地址是6to4地址,则从报文的目的地址中提取出IPv4地址做为隧道的目的地址;如果IPv6报文的目的地址不是6to4地址,但下一跳是6to4地址,则从下一跳地址中取出IPv4地址做为隧道的目的地址。后者也称为6to4中继。

IPv6报文在到达边界路由器后,根据报文的IPv6目的地址查找转发表,如果出接口是6to4自动隧道的Tunnel虚接口,且报文的目的地址是6to4地址或下一跳是6to4地址,则从6to4地址中取出IPv4地址做为隧道报文的目的地址,隧道报文的源地址是Tunnel接口上配置的。

图 6to4隧道组网示意图

一个IPv4地址只能用于一个6to4隧道的源地址,如果一个边缘路由器有多个6to4网络使用同样的IPv4地址做为网络本地地址,则使用6to4地址中的SLA ID来区分,但他们共用一个隧道。

图 6to4隧道组网示意图2

随着IPv6网络的发展,普通IPv6网络需要与6to4网络通过IPv4网络互通,这可以通过6to4中继路由器方式实现。所谓6to4中继,就是通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址,该下一跳为6to4中继。隧道的IPv4目的地址从下一跳的6to4地址中获得。如下图所示,灰色的网络是普通IPv6网络。

图 6to4中继组网示意图

如果6to4网络2中的主机要与IPv6网络互通,在其边界路由器上配置路由指向的下一跳为6to4中继路由器的6to4地址,中继路由器的6to4地址是与中继路由器的6to4隧道的源地址相匹配的。6to4网络2中去往普通IPv6网络的报文都会按照路由表指示的下一跳发送到6to4中继路由器。6to4中继路由器再将此报文转发到纯IPv6网络中去。当报文返回时,6to4中继路由器根据返回报文的目的地址(为6to4地址)进行IPv4报文头封装,数据就能够顺利到达6to4网络中了。

参考:RFC 3056, Connection of IPv6 Domains via IPv4 Clouds

1.4 ISATAP隧道

ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是另外一种IPv6自动隧道技术。与6to4地址类似,ISATAP地址中也内嵌了IPv4地址,它的隧道封装也是根据此内嵌IPv4地址来进行的,只是两种地址格式不同。6to4是使用IPv4地址做为网络ID,而ISATAP用IPv4地址做为接口ID。其接口标识符是用修订的EUI-64格式构造的,格式如下:

图 ISATAP接口ID格式

如果IPv4地址是全局唯一的,则u位为1,否则u位为0。g位是IEEE群体/个体标志。ISATAP地址接口ID的形式看起来是00-00-5E-FE加IPv4地址的样子。5E-FE 是IANA分配的。

由于ISATAP是通过接口ID来表现的,所以,ISATAP地址有全局单播、站点单播、多播等形式。ISATAP地址的前64位是通过向ISATAP路由器发送请求来得到的,它可以进行地址自动配置。在ISATAP隧道的两端设备之间可以运行ND协议。ISATAP隧道将IPv4网络看作一个非广播的点到多点的链路(NBMA)。

ISATAP过渡机制允许在现有的IPv4网络内部部署IPv6,该技术简单而且扩展性很好,可以用于本地站点的过渡。ISATAP支持IPv6站点本地路由和全局IPv6路由域,以及自动IPv6隧道。ISATAP同时还可以与NAT结合,从而可以使用站点内部非全局唯一的IPv4地址。

典型的ISATAP隧道应用是在站点内部,所以,其内嵌的IPv4地址不需要是全局唯一的。

图 ISATAP隧道部署

如上图所示,在IPv4网络内部有两个双栈主机PC2和PC3,它们分别有一个私网IPv4地址。要使其具有ISATAP功能,需要进行如下操作:

  • 首先配置ISATAP隧道接口,这时会根据IPv4地址生成ISATAP类型的接口ID;
  • 根据接口ID生成一个ISATAP链路本地IPv6地址,生成链路本地地址以后,主机就有了IPv6连接功能。
  • 进行主机自动配置,主机获得全局IPv6地址、站点本地地址等。
  • 当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。

然而,如果一个节点是处于NAT设备后面的私有网络内部,其IPv4地址是私有的。为了能够穿越NAT设备与其它站点进行通讯,可以使用UDP/IPv4封装,其端口号为3544。

参考:Intra-Site Automatic Tunnel Addressing Protocol (draft-ietf-ngtrans-isatap-04.txt).

1.5  IPv6 over IPv4 GRE隧道

IPv6 over IPv4 GRE隧道使用标准的GRE隧道技术提供了点到点连接服务,需要手工指定隧道的端点地址。GRE隧道本身并不限制乘客协议和传输协议,但在Comware的实现中,一个GRE隧道的传输协议是固定的,但乘客协议可以是协议中允许的任意协议(可以是IPv4、IPv6、OSI、MPLS等)。

图 IPv6 over IPv4 GRE隧道

1.6  隧道代理

隧道代理(Tunnel Broker)是一种架构而非具体的协议,它的主要目的是简化隧道的配置。该框架由用户、隧道代理、隧道服务器、DNS服务器组成。隧道代理为小型的IPv6网络或IPv4网络中的主机提供了访问已有IPv6网络的服务,该技术更适合于现有IPv4网络中的主机访问IPv6网络。其框架结构如下图所示:

图 Tunnel Broker示意图

用户首先连接到隧道代理上,相隧道代理提供自己的信息,包括:IPv4地址、DNS域名、是主机还是路由器。

在连接时隧道代理会验证用户的身份。如果允许客户使用隧道服务,隧道代理为用户选择隧道服务器、用户的IPv6前缀、隧道的生存期;在DNS上登记分配给隧道端点的IPv6地址;将用户的信息通知相应的隧道服务器。

隧道服务器和用户根据隧道代理提供的信息进行隧道的建立和维护。经过这些步骤后,用户与隧道服务器之间的IPv6 over IPv4隧道就建立好了。用户在通讯结束后,可以通知隧道代理删除隧道,释放隧道、IPv6地址等资源。

对于已经建立起IPv6的ISP来说,使用隧道代理技术为网络用户的扩展提供了一个方便的手段,它可以看作是一个虚拟的IPv6 ISP。隧道代理与用户、隧道服务器、DNS之间的通讯协议并没有严格的限制。通常情况下,用户与隧道代理之间使用HTTP或HTTPS,隧道代理与隧道服务器之间可以使用SNMP等。隧道代理通常是采用专门的服务器来实现。

1.7  6over4机制

6over4的目的是让没有通过物理链路直接连接到IPv6路由器的IPv6主机能拥有IPv6主机的所有功能。它需要IPv4域具有组播功能,以模拟虚拟的本地链路。如果需要到其他链路的IPv6路由,则需要至少一个连接到相同IPv4域的IPv6路由器具有6over4功能。

6over4可以实现在同一个IPv4域内的所有主机能通过ND协议自动发现,同时,还可以通过路由协议自动学习到其它链路的路由信息。

6over4技术定义了将IPv6组播地址映射成IPv4组播地址的一种方法,这样,ND协议、路由协议便可以通过6over4隧道穿越IPv4网络进行传输,实现IPv6路由协议、邻居发现、自动配置等功能。但是6over4技术要求IPv4域部署组播功能。

6over4主机的IPv6地址由64位的地址前缀和规定格式的64位接口标识符组成。接口标识符的格式如下:

图 6over4接口标识符格式

1.8  6PE

如果服务提供商想实现一个IPv6网络,对于网络核心是基于IPv4的情况,可以在支持IPv6协议的边缘路由器之间构造IP隧道,这些隧道可以充当支持IPv6协议的点到点的连接。在这些边缘路由器之间交换的IPv6分组可以封装在IP分组中透明的在骨干网上传输。这些方案在大规模网络可伸缩性方面不太好;MPLS技术则提供了另外的选择:在启动MPLS的IPv4骨干网上传输IPv6数据报。这个解决方案称为IPv6提供商边缘路由器(6PE),提供了一种可伸缩的IPv6早期部署的解决方方法。它有以下一些特点:

IPv6协议仅仅在选择的PE路由器上实施。

PE路由器使用多协议BGP(MP-BGP)会话在骨干网上交换IPv6路由。

MPLS标签被PE路由器赋给IPv6路由,并直接在PE路由器之间交换,类似VPN路由。

使用两层MPLS标签在MPLS骨干网上传输IPv6数据报。标签栈中的第一标签是出口PE路由器的指定LDP标签。标签栈中第二个标签是指定PE IPv6标签。

6PE解决方案的整体结构如图所示

ISP利用已有的IPv4骨干网为分散用户的IPv6网络提供接入能力。其主要思想是:用户的IPv6路由信息转换为带有标签的IPv6路由信息,并且通过IBGP(Internal Border Gateway Protocol)会话扩散到ISP的IPv4骨干网中。在转发IPv6报文时,当流量在进入骨干网的隧道时,首先会被打上标签。隧道可以是GRE隧道或者MPLS LSP等。

图 6PE网络示意图

当ISP想利用自己原有的IPv4/MPLS网络,使其通过MPLS具有IPv6流量交换能力时,只需要升级PE路由器就可以了。所以对于运营商来说,使用6PE特性作为IPv6过渡机制无疑是一个高效的解决方案,其操作风险也会要小得多。

1.9 Teredo隧道

Teredo隧道是一种IPv6-over-UDP隧道。因为传统的NAT不能够支持IPv6-over-IPv4数据包的穿越,所以为了解决这个问题,采用把IPv6数据包封装在UDP载荷中的方式穿过NAT。Teredo隧道用于不能将NAT设备升级以提供IPv6路由或不能作为6to4路由器的情况下。

在Teredo协议中,定义了4种不同的实体: Client、Server、Relay、Host-specific Relay。在这当中,Client是指处于NAT域内并想要获得IPv6全局连接的主机;Server具有全局IPv4地址并且能够为Client分配Teredo地址;Relay负责转发Client和一般IPv6节点通信时的数据包,Host-specific Relay是指不通过Relay就可以直接和Client进行通信的IPv6主机。这些角色同时都支持IPv6/IPv4协议。

Teredo技术能够使IPv6数据包穿越NAT,以使域内的IPv6节点得到全球性的IPv6连接。但Teredo的运行需要Relay的支持,Teredo地址采用了规定格式的前缀的做法也不符合IPv6路由分等级的思想。另外,如果NAT经过升级后能够支持IPv6-over-IPv4数据包的穿越,则没有必要使用Teredo。

原创文章,作者:admin,如若转载,请注明出处:https://www.ipv6s.com/basis/tunnel/20101202515.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注