IPv6过渡技术概述
双栈技术
- 节点同时支持IPv4和IPv6协议栈。
- IPv6 over IPv4隧道
过渡初期使用
- 过渡初期使用
- 通过隧道技术,使IPv6报文在IPv4网络中传输。
- 手动隧道包括IPv6 over IPv4手动隧道和IPv6 over IPv4 GRE隧道。
- 自动隧道包括IPv4兼容IPv6自动隧道、6to4隧道和ISATAP隧道
IPv4 over IPv6隧道
- 过渡后期使用
- 通过隧道技术,是IPv4报文在IPv6网络中传输
双栈协议
双栈技术是IPv4向IPv6过渡的一种有效的技术。网络中的节点同时支持IPv4和IPv6协议栈,源节点根据目的节点的不同选用不同的协议栈,而网络设备根据报文的协议类型选择不同的协议栈进行处理和转发。双栈可以在一个单一的设备上实现,也可以是一个双栈骨干网。对于双栈骨干网,其中的所有设备必须同时支持IPv4/IPv6协议栈,连接双栈网络的接口必须同时配置IPv4地址和IPv6地址。
但协议栈和双协议栈结构示例如下:
双协议栈具有以下特点:
多种链路协议支持双协议栈
多种链路协议(如以太网)支持双协议栈。图中的链路层是以太网,在以太网帧上,如果协议ID字段的值为0x0800,表示网络层收到的是IPv4报文,如果为0x86DD,表示网络层是IPv6报文。
多种应用支持双协议栈
多种应用(如DNS/FTP/Telnet等)支持双协议栈。上层应用(如DNS)可以选用TCP或UDP作为传输层的协议,但优先选择IPv6协议栈,而不是IPv4协议栈作为网络层协议。
IPv6 over IPv4隧道
IPv6 over IPv4隧道原理:
隧道(Tunnel)是一种封装技术。它利用一种网络协议来传输另一种网络协议,即利用一种网络传输协议,将其他协议产生的数据报文封装在自身的报文中,然后在网络中传输。隧道是一个虚拟的点对点的连接。一个Tunnel提供了一条使封装的数据报文能够传输的通路,并且在一个Tunnel的两端可以分别对数据报文进行封装及解封装。隧道技术就是指包括数据封装、传输和解封装在内的全过程。隧道技术是IPv6向IPv4过渡的一个重要手段。
由于IPv4地址的枯竭和IPv6的先进性,IPv4过渡为IPv6势在必行。因为IPv6与IPv4的不兼容性,所以需要对原有的IPv4设备进行替换。但是IPv4设备大量替换所需成本会非常巨大,且现网运行的业务也会中断,显然并不可行。所以,IPv4向IPv6过渡是一个渐进的过程。在过渡初期,IPv4网络已经大量部署,而IPv6网络只是散落在各地的“孤岛”,IPv6 over IPv4隧道就是通过隧道技术,使IPv6报文在IPv4网络中传输,实现IPv6网络之间的孤岛互连。
IPv6 over IPv4隧道基本原理如下图:
- 边界设备启动IPv4/IPv6双协议栈,并配置IPv6 over IPv4隧道。
- 边界设备在收到从IPv6网络侧发来的报文后,如果报文的目的地址不是自身且下一跳出接口为Tunnel接口,就要把收到的IPv6报文作为数据部分,加上IPv4报文头,封装成IPv4报文。
- 在IPv4网络中,封装后的报文被传递到对端的边界设备。
- 对端边界设备对报文解封装,去掉IPv4报文头,然后将解封装后的IPv6报文发送到IPv6网络中。
一个隧道需要有一个起点和一个终点,起点和终点确定了以后,隧道也就可以确定了。IPv6 over IPv4隧道的起点的IPv4地址必须为手工配置,而终点的确定有手工配置和自动获取两种方式。根据隧道终点的IPv4地址的获取方式不同可以将IPv6 over IPv4隧道分为手动隧道和自动隧道。
- 手动隧道:手动隧道即边界设备不能自动获得隧道终点的IPv4地址,需要手工配置隧道终点的IPv4地址,报文才能正确发送至隧道终点。
- 自动隧道:自动隧道即边界设备可以自动获得隧道终点的IPv4地址,所以不需要手工配置终点的IPv4地址,一般的做法是隧道的两个接口的IPv6地址采用内嵌IPv4地址的特殊IPv6地址形式,这样路由设备可以从IPv6报文中的目的IPv6地址中提取出IPv4地址。
手动隧道:
根据IPv6报文封装的不同,手动隧道又可以分为IPv6 over IPv4手动隧道和IPv6 over IPv4 GRE隧道两种。
IPv6 over IPv4手动隧道
手动隧道直接把IPv6报文封装到IPv4报文中去,IPv6报文作为IPv4报文的净载荷。手动隧道的源地址和目的地址也是手工指定的,它提供了一个点到点的连接。手动隧道可以建立在两个边界路由器之间为被IPv4网络分离的IPv6网络提供稳定的连接,或建立在终端系统与边界路由器之间为终端系统访问IPv6网络提供连接。隧道的边界设备必须支持IPv6/IPv4双协议栈。其它设备只需实现单协议栈即可。因为手动隧道要求在设备上手工配置隧道的源地址和目的地址,如果一个边界设备要与多个设备建立手动隧道,就需要在设备上配置多个隧道,配置比较麻烦。所以手动隧道通常用于两个边界路由器之间,为两个IPv6网络提供连接。
IPv6 over IPv4手动隧道转发机制为:当隧道边界设备的IPv6侧收到一个IPv6报文后, 根据IPv6报文的目的地址查找IPv6路由转发表,如果该报文是从此虚拟隧道接口转发出去,则根据隧道接口配置的隧道源端和目的端的IPv4地址进行封装。封装后的报文变成一个IPv4报文,交给IPv4协议栈处理。报文通过IPv4网络转发到隧道的终点。隧道终点收到一个隧道协议报文后,进行隧道解封装。并将解封装后的报文交给IPv6协议栈处理。
IPv6 over IPv4 GRE隧道
IPv6 over IPv4 GRE隧道使用标准的GRE隧道技术提供了点到点连接服务,需要手工指定隧道的端点地址。GRE隧道本身并不限制被封装的协议和传输协议,一个GRE隧道中被封装的协议可以是协议中允许的任意协议(可以是IPv4、IPv6、OSI、MPLS等)。
IPv6 over IPv4 GRE隧道的在隧道的边界路由器的传输机制和IPv6 over IPv4手动隧道相同。
自动隧道:
自动隧道中,用户仅需要配置设备隧道的起点,隧道的终点由设备自动生成。为了使设备能够自动产生终点,隧道接口的IPv6地址采用内嵌IPv4地址的特殊IPv6地址形式。设备从IPv6报文中的目的IPv6地址中解析出IPv4地址,然后以这个IPv4地址代表的节点作为隧道的终点。
根据IPv6报文封装的不同,自动隧道又可以分为IPv4兼容IPv6自动隧道、6to4隧道和ISATAP隧道三种。
IPv4兼容IPv6自动隧道
IPv4兼容IPv6自动隧道,其承载的IPv6报文的目的地址(即自动隧道所使用的特殊地址)是IPv4兼容IPv6地址。IPv4兼容IPv6地址的前96位全部为0,后32位为IPv4地址。其格式如下:
IPv4兼容IPv6自动隧道的转发机制:
需要经过Router A发给Router B的IPv6报文到达Router A后,以目的地址::2.1.1.1查找IPv6路由,发现路由的下一跳为虚拟的Tunnel口。由于Router A上的配置的隧道的类型是IPv4兼容IPv6自动隧道。于是Router A对IPv6报文进行了封装。封装的时候,IPv6报文被封装为IPv4报文,IPv4报文中的源地址为隧道的起始点地址1.1.1.1,而目的IP地址直接从IPv4兼容IPv6地址::2.1.1.1的后32位拷贝过来即2.1.1.1。这个报文被路由器从隧道口发出后,在IPv4的网络中被路由转发到目的地2.1.1.1,也就是Router B。Router B收到报文后,进行解封装,把其中的IPv6报文取出,送给IPv6协议栈进行处理。Router B返回Router A的报文也是按照这个过程来进行的。
注:如果IPv4兼容IPv6地址中的IPv4地址是广播地址、组播地址、网络广播地址、出接口的子网广播地址、全0地址、环回地址,则该IPv6报文被丢弃,不会进行隧道封装处理。
由于IPv4兼容IPv6隧道要求每一个主机都要有一个合法的IP地址,而且通讯的主机要支持双栈、支持IPv4兼容IPv6隧道,不适合大面积部署。目前该技术已经被6to4隧道所代替。
6to4隧道:
6to4隧道也属于一种自动隧道,隧道也是使用内嵌在IPv6地址中的IPv4地址建立的。与IPv4兼容自动隧道不同,6to4自动隧道支持Router到Router、Host到Router、Router到Host、 Host到Host。这是因为6to4地址是用IPv4地址做为网络标识,其地址格式如下所示:
- FP:可聚合全球单播地址的格式前缀(Format Prefix),其值为001。
- TLA:顶级聚合标识符(Top Level Aggregator),其值为0x0002。
- SLA:站点级聚合标识符(Site Level Aggregator)。
6to4地址可以表示为2002::/16,而一个6to4网络可以表示为2002:IPv4地址::/48。6to4地址的网络前缀长度为64bit,其中前48bit(2002: a.b.c.d)被分配给路由器上的IPv4地址决定了,用户不能改变,而后16位(SLA)是由用户自己定义的。
6to4隧道的封装和装发过程如下图所示:
一个IPv4地址只能用于一个6to4隧道的源地址,如果一个边界设备连接了多个6to4网络使用同样的IPv4地址做为隧道的源地址,则使用6to4地址中的SLA ID来区分,但他们共用一个隧道。如下图所示:
随着IPv6网络的发展,普通IPv6网络需要与6to4网络通过IPv4网络互通,这可以通过6to4中继路由器方式实现。所谓6to4中继,就是通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址,该下一跳为路由器我们称之为6to4中继。隧道的IPv4目的地址依然从下一跳的6to4地址中获得。6to4中继示意图如下所示:
如果6to4网络2中的主机要与IPv6网络互通,在其边界路由器上配置路由指向的下一跳为6to4中继路由器的6to4地址,中继路由器的6to4地址是与中继路由器的6to4隧道的源地址相匹配的。6to4网络2中去往普通IPv6网络的报文都会按照路由表指示的下一跳发送到6to4中继路由器。6to4中继路由器再将此报文转发到纯IPv6网络中去。当报文返回时,6to4中继路由器根据返回报文的目的地址(为6to4地址)进行IPv4报文头封装,数据就能够顺利到达6to4网络中了。
ISATAP隧道:
ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是另外一种自动隧道技术。ISATAP隧道同样使用了内嵌IPv4地址的特殊IPv6地址形式,只是和6to4不同的是,6to4是使用IPv4地址做为网络前缀,而ISATAP用IPv4地址做为接口标识。其接口标识符格式如下图所示:
如果IPv4地址是全局唯一的,则u位为1,否则u位为0。g位是IEEE群体/个体标志。由于ISATAP是通过接口标识来表现的,所以,ISATAP地址有全局单播地址、链路本地地址、ULA地址、组播地址等形式。ISATAP地址的前64位是通过向ISATAP路由器发送请求来得到的,它可以进行地址自动配置。在ISATAP隧道的两端设备之间可以运行ND协议。ISATAP隧道将IPv4网络看作一个非广播的点到多点的链路(NBMA)。
ISATAP过渡机制允许在现有的IPv4网络内部署IPv6,该技术简单而且扩展性很好,可以用于本地站点的过渡。ISATAP支持IPv6站点本地路由和全局IPv6路由域,以及自动IPv6隧道。ISATAP同时还可以与NAT结合,从而可以使用站点内部非全局唯一的IPv4地址。典型的ISATAP隧道应用是在站点内部,所以,其内嵌的IPv4地址不需要是全局唯一的。
下图为ISATAP隧道一个典型应用场景:
如上图所示,在IPv4网络内部有两个双栈主机Host B和Host C,它们分别有一个私网IPv4地址。要使其具有ISATAP功能,需要进行如下操作:
- 首先配置ISATAP隧道接口,这时会根据IPv4地址生成ISATAP类型的接口ID。
- 根据接口ID生成一个ISATAP链路本地IPv6地址,生成链路本地地址以后,主机就有了在本地链路上进行IPv6通信的能力。
- 进行自动配置,主机获得IPv6全球单播地址、ULA地址等。
- 当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。
IPv6 over IPv4配置示例
配置IPv6 over IPv4手动隧道示例:
实验拓扑如下:
实验要求:
PC1和PC2与路由器之间为IPv6网络。两台路由器之间为IPv4网络,通过配置,要求是PC1与PC2能互通。即使IPv6可以在IPv4网络中通信。
配置文件:
AR1:
1 | <AR1>display current-configuration |
AR2:
1 | <AR2>display current-configuration |
IPv6 over IPv4报文抓包示例:
配置IPv6 over IPv4自动隧道示例:
实验拓扑如下:
实验要求:
如上图:AR1与AR2,AR3之间运行的是IPv4网络。现在需要在IPv4网络之间传输IPv6网络的数据。使用自动隧道配置。
配置文件:
AR1:
1 | <AR1>dis current-configuration |
AR2:
1 | <AR2>dis current-configuration |
AR3:
1 | <AR3>dis current-configuration |
在以上配置中,AR1和AR3使能了IPv6功能,而AR2没有使能IPv6功能,通过配置了自动隧道,实现IPv6网络在iPv4网络中的互通。
配置IPv6 over IPv4GRE隧道示例:
实验拓扑如下:
实验要求:
PC1和PC2与路由器之间为IPv6网络。两台路由器之间为IPv4网络,通过配置,要求是PC1与PC2能互通。即使IPv6可以在IPv4网络中通信。通过配置GRE隧道实现要求。
配置文件:
AR1:
1 | <AR1>dis current-configuration |
AR2:
1 | <AR2>dis current-configuration |
配置6to4隧道示例:
实验拓扑如下:
实验要求:
PC1和PC2与路由器之间为IPv6网络。两台路由器之间为IPv4网络,通过配置,要求是PC1与PC2能互通。即使IPv6可以在IPv4网络中通信。通过配置6to4隧道实现要求。
配置文件:
AR1:
1 | [AR1]dis current-configuration |
AR2:
1 | <AR2>dis current-configuration |
ISATAP隧道配置示例:
实验拓扑如下:
实验要求:
主机与路由器直连为iPv4网络,通过配置ISATAP隧道,使主机可以访问IPv6网络。
配置文件:
AR1:
1 | <AR1>dis current-configuration |
主机上的配置:
1 | netsh interface ipvt isatap set state enable |
配置成功够,状态如下,可以由路由器通告的IPv6地址前缀自动生成ISATAP地址:
IPv4 over IPv6隧道
利用隧道技术可以在IPv6网络上创建隧道,从而实现IPv4孤岛的互联,IPv4孤岛能通过IPv6公网访问其他IPv4网络。
在IPv4 Internet向IPv6 Internet过渡的后期,IPv6网络已被大量部署,此时可能出现IPv4孤岛。利用隧道技术可在IPv6网络上创建隧道,从而实现IPv4孤岛的互连。这类似于在IP网络上利用隧道技术部署VPN。在IPv6网络上用于连接IPv4孤岛的隧道,称为IPv4 over IPv6隧道。
IPv4 over IPv6隧道技术原理如下图:
- 边界设备启动IPv4/IPv6双协议栈,并配置IPv4 over IPv6隧道。
- 边界设备在收到从IPv4网络侧发来的报文后,如果报文的目的地址不是自身,就要把收到的IPv4报文作为负载,加上IPv6报文头,封装到IPv6报文里。
- 在IPv6网络中,封装后的报文被传递到对端的边界设备。
- 对端边界设备对报文解封装,去掉IPv6报文头,然后将解封装后的IPv4报文发送到IPv4网络。
IPv4 over IPv6配置示例:
实验拓扑如下:
实验要求:
PC1和PC2与路由器之间为IPv4网络。两台路由器之间为IPv6网络,通过配置,要求是PC1与PC2能互通。即使IPv4可以在IPv6网络中通信。
配置文件:
AR1:
1 | <AR1>dis current-configuration |
AR2:
1 | [AR2]display current-configuration |
IPv4 over IPv6其他配置项:
1 | interface tunnel 0/0/0 |