双栈技术
过渡初期使用
IPv4 over IPv6隧道
双栈技术是IPv4向IPv6过渡的一种有效的技术。网络中的节点同时支持IPv4和IPv6协议栈,源节点根据目的节点的不同选用不同的协议栈,而网络设备根据报文的协议类型选择不同的协议栈进行处理和转发。双栈可以在一个单一的设备上实现,也可以是一个双栈骨干网。对于双栈骨干网,其中的所有设备必须同时支持IPv4/IPv6协议栈,连接双栈网络的接口必须同时配置IPv4地址和IPv6地址。
但协议栈和双协议栈结构示例如下:
双协议栈具有以下特点:
多种链路协议支持双协议栈
多种链路协议(如以太网)支持双协议栈。图中的链路层是以太网,在以太网帧上,如果协议ID字段的值为0x0800,表示网络层收到的是IPv4报文,如果为0x86DD,表示网络层是IPv6报文。
多种应用支持双协议栈
多种应用(如DNS/FTP/Telnet等)支持双协议栈。上层应用(如DNS)可以选用TCP或UDP作为传输层的协议,但优先选择IPv6协议栈,而不是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隧道基本原理如下图:
一个隧道需要有一个起点和一个终点,起点和终点确定了以后,隧道也就可以确定了。IPv6 over IPv4隧道的起点的IPv4地址必须为手工配置,而终点的确定有手工配置和自动获取两种方式。根据隧道终点的IPv4地址的获取方式不同可以将IPv6 over IPv4隧道分为手动隧道和自动隧道。
根据IPv6报文封装的不同,手动隧道又可以分为IPv6 over IPv4手动隧道和IPv6 over IPv4 GRE隧道两种。
手动隧道直接把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隧道使用标准的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自动隧道,其承载的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隧道也属于一种自动隧道,隧道也是使用内嵌在IPv6地址中的IPv4地址建立的。与IPv4兼容自动隧道不同,6to4自动隧道支持Router到Router、Host到Router、Router到Host、 Host到Host。这是因为6to4地址是用IPv4地址做为网络标识,其地址格式如下所示:
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(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功能,需要进行如下操作:
实验拓扑如下:
PC1和PC2与路由器之间为IPv6网络。两台路由器之间为IPv4网络,通过配置,要求是PC1与PC2能互通。即使IPv6可以在IPv4网络中通信。
AR1:
<AR1>display current-configuration
#
sysname AR1
#
ipv6
#
interface GigabitEthernet0/0/0
ipv6 enable
ipv6 address 2000::2/64
#
interface GigabitEthernet0/0/1
ip address 12.1.1.1 255.255.255.0
#
interface Tunnel0/0/0
ipv6 enable
//使能接口的IPv6功能。
ipv6 address 2001::1/64
//设置Tunnel接口的IPv6地址。
tunnel-protocol ipv6-ipv4
//指定Tunnel为手动隧道模式。
source 12.1.1.1
//指定Tunnel的源地址。
destination 12.1.1.2
//指定Tunnel的目的地址
#
ipv6 route-static 3000:: 64 Tunnel0/0/0
//配置静态路由指向Tunnel接口
#
return
AR2:
<AR2>display current-configuration
#
sysname AR2
#
ipv6
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ipv6 enable
ipv6 address 3000::2/64
#
interface Tunnel0/0/0
ipv6 enable
ipv6 address 2001::2/64
tunnel-protocol ipv6-ipv4
source 12.1.1.2
destination 12.1.1.1
#
ipv6 route-static 2000:: 64 Tunnel0/0/0
#
return
实验拓扑如下:
如上图:AR1与AR2,AR3之间运行的是IPv4网络。现在需要在IPv4网络之间传输IPv6网络的数据。使用自动隧道配置。
AR1:
<AR1>dis current-configuration
#
sysname AR1
#
ipv6
#
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
#
interface Tunnel0/0/0
ipv6 enable
//使能接口的IPv6功能。
ipv6 address ::12.1.1.1/96
tunnel-protocol ipv6-ipv4 auto-tunnel
//指定Tunnel为自动隧道模式
source 12.1.1.1
#
rip 1
//配置rip使IPv4网络能互通
version 2
network 12.0.0.0
#
return
AR2:
<AR2>dis current-configuration
#
sysname AR2
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ip address 23.1.1.2 255.255.255.0
#
rip 1
version 2
network 12.0.0.0
network 23.0.0.0
#
return
AR3:
<AR3>dis current-configuration
#
sysname AR3
#
ipv6
#
interface GigabitEthernet0/0/0
ip address 23.1.1.3 255.255.255.0
#
interface Tunnel0/0/0
ipv6 enable
ipv6 address ::23.1.1.3/96
tunnel-protocol ipv6-ipv4 auto-tunnel
source 23.1.1.3
#
rip 1
version 2
network 23.0.0.0
#
return
在以上配置中,AR1和AR3使能了IPv6功能,而AR2没有使能IPv6功能,通过配置了自动隧道,实现IPv6网络在iPv4网络中的互通。
实验拓扑如下:
PC1和PC2与路由器之间为IPv6网络。两台路由器之间为IPv4网络,通过配置,要求是PC1与PC2能互通。即使IPv6可以在IPv4网络中通信。通过配置GRE隧道实现要求。
AR1:
<AR1>dis current-configuration
#
sysname AR1
#
ipv6
#
interface GigabitEthernet0/0/0
ipv6 enable
ipv6 address 2000::2/64
#
interface GigabitEthernet0/0/1
ip address 12.1.1.1 255.255.255.0
#
interface Tunnel0/0/0
ipv6 enable
ipv6 address 2001::1/64
tunnel-protocol gre
//指定隧道模式为GRE
source 12.1.1.1
destination 12.1.1.2
#
ipv6 route-static :: 0 Tunnel0/0/0
#
return
AR2:
<AR2>dis current-configuration
#
sysname AR2
#
ipv6
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ipv6 enable
ipv6 address 3000::2/64
#
interface Tunnel0/0/0
ipv6 enable
ipv6 address 2001::2/64
tunnel-protocol gre
source 12.1.1.2
destination 12.1.1.1
#
ipv6 route-static :: 0 Tunnel0/0/0
#
return
实验拓扑如下:
PC1和PC2与路由器之间为IPv6网络。两台路由器之间为IPv4网络,通过配置,要求是PC1与PC2能互通。即使IPv6可以在IPv4网络中通信。通过配置6to4隧道实现要求。
AR1:
[AR1]dis current-configuration
#
sysname AR1
#
ipv6
#
interface GigabitEthernet0/0/0
ipv6 enable
ipv6 address 2002:C01:101::2/64
#
interface GigabitEthernet0/0/1
ip address 12.1.1.1 255.255.255.0
#
interface Tunnel0/0/0
ipv6 enable
ipv6 address 2000::1/64
tunnel-protocol ipv6-ipv4 6to4
source GigabitEthernet0/0/1
#
ipv6 route-static :: 0 Tunnel0/0/0
#
return
AR2:
<AR2>dis current-configuration
#
sysname AR2
#
ipv6
#
interface GigabitEthernet0/0/0
ip address 12.1.1.2 255.255.255.0
#
interface GigabitEthernet0/0/1
ipv6 enable
ipv6 address 2002:C01:102::2/64
//6to4中,ipv4地址会汇聚在IPv6的网络前缀中
#
interface Tunnel0/0/0
ipv6 enable
ipv6 address 2000::2/64
tunnel-protocol ipv6-ipv4 6to4
source GigabitEthernet0/0/0
#
ipv6 route-static :: 0 Tunnel0/0/0
#
return
主机与路由器直连为iPv4网络,通过配置ISATAP隧道,使主机可以访问IPv6网络。
AR1:
<AR1>dis current-configuration
#
sysname AR1
#
ipv6
#
interface GigabitEthernet0/0/0
ip address 192.168.65.2 255.255.255.0
//配置与主机直连的接口IP地址
#
interface Tunnel0/0/0
ipv6 enable
ipv6 address 2009::/64 eui-64
//配置isatap隧道,IPv6地址前缀
undo ipv6 nd ra halt
//允许发布路由器通告消息
tunnel-protocol ipv6-ipv4 isatap
//指定Tunnel为ISATAP模式。
source 192.168.65.2
//指定源地址
#
return
主机上的配置:
netsh interface ipvt isatap set state enable
//开启主机的Isatap隧道功能
netsh interface ipv6 isatap set router 192.168.65.2
netsh interface ipv6 isatap set router 192.168.65.2 enabled
//添加到边界设备的静态路由
配置成功够,状态如下,可以由路由器通告的IPv6地址前缀自动生成ISATAP地址:
利用隧道技术可以在IPv6网络上创建隧道,从而实现IPv4孤岛的互联,IPv4孤岛能通过IPv6公网访问其他IPv4网络。
在IPv4 Internet向IPv6 Internet过渡的后期,IPv6网络已被大量部署,此时可能出现IPv4孤岛。利用隧道技术可在IPv6网络上创建隧道,从而实现IPv4孤岛的互连。这类似于在IP网络上利用隧道技术部署VPN。在IPv6网络上用于连接IPv4孤岛的隧道,称为IPv4 over IPv6隧道。
IPv4 over IPv6隧道技术原理如下图:
实验拓扑如下:
PC1和PC2与路由器之间为IPv4网络。两台路由器之间为IPv6网络,通过配置,要求是PC1与PC2能互通。即使IPv4可以在IPv6网络中通信。
AR1:
<AR1>dis current-configuration
#
sysname AR1
#
ipv6
#
interface GigabitEthernet0/0/0
ip address 192.168.1.254 255.255.255.0
#
interface GigabitEthernet0/0/1
ipv6 enable
ipv6 address 2000::1/64
#
interface Tunnel0/0/0
ip address 12.1.1.1 255.255.255.0
tunnel-protocol ipv4-ipv6
//指定隧道模式为ipv4-ipv6
source 2000::1
destination 2000::2
#
ip route-static 192.168.2.0 255.255.255.0 Tunnel0/0/0
#
return
AR2:
[AR2]display current-configuration
#
sysname AR2
#
ipv6
#
interface GigabitEthernet0/0/0
ipv6 enable
ipv6 address 2000::2/64
#
interface GigabitEthernet0/0/1
ip address 192.168.2.254 255.255.255.0
#
interface Tunnel0/0/0
ip address 12.1.1.2 255.255.255.0
tunnel-protocol ipv4-ipv6
source 2000::2
destination 2000::1
#
ip route-static 192.168.1.0 255.255.255.0 Tunnel0/0/0
#
return
interface tunnel 0/0/0
tunnel ipv4-ipv6 encapsulation-limit 4
// 指定本次IPv6封装后的报文可被再次进行多少次IPv6封装。
//缺省情况下,允许IPv4-over-IPv6封装4次。
tunnel ipv4-ipv6 flow-labe 0
//设置流量标识值。
//缺省情况下,流量标识值为0。
tunnel ipv4-ipv6 hop-limit 64
//设置跳数限制值。
//缺省情况下,跳数限制值为64。
tunnel ipv4-ipv6 traffic-class 0
//设置流量级别。
//缺省情况下,流量级别为0。
参考文档:华为HedEx文档