在IPv4 环境下测试纯 IPv6 网站内容的工具:https://ipv6proxy.cn
IPv6隧道
所谓IPv6隧道其实都是为了让IPv6的各个孤岛能通过IPv4的海洋相互连接起来,或者说都是一个过渡技术(IPv4向IPv6过渡)。
点对点静态隧道技术
在RFC 4213: Basic Transition Mechanisms for IPv6 Hosts and Routers中定义的一种隧道技术: 在两个支持双栈(既支持IPv4也支持IPv6的设备,如路由器)的节点间静态建立IPv6 over IPv4的隧道。IPv6报文经过双栈节点时,通过查询路由(静态IPv6路由配置),可知出接口为IPv6 over IPv4隧道接口,报文封装IPv4头(IPv4目的和源地址分别为隧道出入接口地址,协议号为41),报文经过IPv4网络后到达隧道出口,剥离IPv4隧道头后,在出口节点查找IPv6路由或邻居信息(同一子网时)将报文送达目的IPv4节点。
自动隧道
当IPv6终端需要与挂接在IPv4网络中很多个IPv6信息岛(不同IPv6子网)通讯时,其出接口的双栈路由器需要配置很多的隧道(同一个隧道起点,不同的隧道终点),自动隧道技术应运而生。
自动隧道中,用户仅需要配置设备隧道的起点,隧道的终点由设备自动生成。为了使设备能够自动产生终点,隧道接口的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地址格式
#IPv4兼容IPv6报文抓取
如下图所示: 源IP为::10.1.1.1目的IP为::20.1.1.1的IPv6报文到达路由器R1后,R1查找其IPv6路由表,发现出接口为隧道接口,则对IPv6报文进行封装(加一个IPv4头),其源地址为隧道地址10.1.1.1, 目的地址则从IPv6报文的最后32位获得(即20.1.1.1), 封装后的报文经过IPv4网络送达R2后,解封(剥掉IPv4头),根据IPv6路由表进行转发,回来的报文按照同样的逻辑进行处理。
#IPv4兼容IPv6隧道的组网示意图
注:如果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地址做为网络标识,其地址格式如下所示:
#6to4隧道封装地址格式
FP: 可聚合全球单播地址的格式前缀(Format Prefix)
TLA:顶级聚合标识符(Top Level Aggregator)
SLA: 站点级聚合标识符(Site Level Aggregator)
6to4地址可表示为2002:IPv4地址::/48, 如2004:101.0.0.65::/48, 6to4地址的网络前缀长度为64bit,其中前48bit(2002: a.b.c.d)在分配路由器上的IPv4地址时就被定下来了(划定了路由器下属的一个IPv6大网),用户不能改变,而后16位(SLA)可在路由器下挂网络进一步细分(由该大网管理用户自己定义)。如图所示,20.2.2.200路由器下,有两个IPv6子网: 2002:20.2.2.200:1::/64和2002:20.2.2.200:2::/64。
# 6to4组网示意图
ISATAP隧道
ISATAP(Intra-Site Automatic Tunnel Addressing Protocol,站点内自动隧道寻址协议)是另外一种自动隧道技术。ISATAP隧道同样使用了内嵌IPv4地址的特殊IPv6地址形式,只是和6to4不同的是,6to4是使用IPv4地址做为网络前缀,而ISATAP用IPv4地址做为接口标识。其接口标识符格式如下图所示:
#ISATAP地址格式
u位取值:IPv4地址为全局唯一(公网地址),u=1, 否则u=0
g位为IEEE群体/个体标志
#ISATAP报文抓取
由于ISATAP是通过接口标识来表现的,所以,ISATAP地址有全局单播地址、链路本地地址、ULA(Local IPv6 Unicast Address)地址、组播地址等形式。ISATAP地址的前64位是通过向ISATAP路由器发送请求来得到的,它可以进行地址自动配置。在ISATAP隧道的两端设备之间可以运行ND(邻居发现)协议。ISATAP隧道将IPv4网络看作一个非广播的点到多点的链路(NBMA)。
ISATAP过渡机制允许在现有的IPv4网络内部署IPv6,该技术简单而且扩展性很好,可以用于本地站点的过渡。ISATAP支持IPv6站点本地路由和全局IPv6路由域,以及自动IPv6隧道。ISATAP同时还可以与NAT结合,从而可以使用站点内部非全局唯一的IPv4地址。典型的ISATAP隧道应用是在站点内部,所以,其内嵌的IPv4地址不需要是全局唯一的。
#ISATAP 组网示意图
如上图所示,在IPv4网络内部有两个双栈主机B和C,它们分别有一个私网IPv4地址。要使其具有ISATAP功能,需要进行如下操作:
配置ISATAP隧道接口,这时会根据IPv4地址生成ISATAP类型的接口ID。
根据接口ID生成一个ISATAP链路本地IPv6地址(分别为FE80::5EFE:C0A8:C801和FE80::5EFE:C0A8:D201),生成链路本地地址以后,主机就有了在本地链路上进行IPv6通信的能力。
进行自动配置,主机获得IPv6全球单播地址、ULA(Local IPv6 Unicast Address)地址等。
当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。
其他IPv6隧道
IPv6 over IPv4 GRE隧道
将IPv6报文封装一个GRE头部,然后再封装IPv4头部
#IPv6 over IPv4 GRE隧道
Teredo隧道(UDP封装IPv6报文)
与前面的自动隧道通过在IPv4的数据报文中承载着IPv6数据报文(IPv6-in-IPv4)不同, Teredo隧道利用了UDP(端口3544)头进行了封装,以便于封装后的报文透过NAT进行传输。路由器对TCP、UDP等传输层协议做NAT处理,而无法正确处理IPv6-in-IPv4这种报文,例如使用ISATAP隧道,IPv6双栈节点与ISATAP路由器之前如果存在NAT,ISATAP建立隧道失败;6to4隧道也会遇到同样的问题。
Teredo隧道是有微软公司主导的一项隧道技术,主要用于在NAT网络架构下建立穿越NAT的隧道。Teredo隧道的核心思路,是将IPv6的数据封装成IPv4的UDP数据包,利用NAT对IPv4的UDP支持进行穿越NAT的传输,当UDP包到达隧道的另外一端后,再把IPv4的包头、UDP包头剥离,还原IPv6的数据包,再进行下一步的IPv6数据通信转发。Teredo节点会分配一个以2001::/32的前缀,而且地址中还包含Teredo的服务器、标志位和客户端外部映射模糊地址和端口号等信息。
Teredo的实现还会遇到NAT的类型不同而被限制的问题。NAT的类型有锥形NAT、受限制的NAT、对称NAT几种(见附录1),Teredo只能在锥形NAT和受限制的NAT的环境下正常工作,而且在这两种NAT需要处理的逻辑又是不一样的。
如在win10下开启teredo隧道
netsh interface teredo set state server=teredo.remlab.net
#win 10 teredo虚拟接口
#teredo隧道报文抓取
6rd隧道
6RD是IPv6快速部署(IPv6 Rapid Deployment)的简称,其对应标准为RFC5569,6RD是在6to4基础上发展起来的一种IPv6网络过渡技术方案。通过在现有IPv4网络中增加6RD-BR,向使用IPv6的用户提供IPv6接入;在IPv6用户的家庭网关和6RD网关之间建立6in4隧道,从而实现在IPv4网络提供IPv6服务的能力。
6RD在向IPv6过渡的过程中已经取得了部分成功,因为它容易实施,扩展性强而且可靠,同时它还是无状态的。
6RD是6to4自动隧道的扩展技术,部署更加灵活。它使得运行商通过已经部署完毕的IPv4网络提供IPv6服务,当然也是通过最常用的把IPv6封装在IPv4中实现。
6RD和6to4自动隧道的区别:
6RD不需要特定的使用2002::/16,它可以使用运行商自己的地址块,这大大的增加了实施的便利性。
32位的IPv4的目标地址需要在IPv6的有效负荷重承载。
#6rd组网示意图
附录
NAT类型分类
按照端口转换的工作方式对NAT的类型进行划分:
l 全锥形NAT
其特点为:一旦内部主机端口对(私网IP:端口,目的IP: 端口)被NAT网关映射到公网端口对(公网IP:端口,目的IP:端口),所有后续的该端口对的报文都会被转换为同一个公网端口对;任何一个外部主机发送到公网端口对的报文将会被转换后发到内部的主机端口对。
l 限制锥形NAT
其特点为:一旦内部主机端口对(私网IP:端口,目的IP: 端口)被NAT网关映射到公网端口对(公网IP:端口,目的IP:端口),所有后续的该端口对的报文都会被转换为同一个公网端口对;只有内部主机端口对向特定的外部主机(目的IP)发送过数据,外部主机(目的IP)从任意端口发送到(公网IP: 端口)的报文将会被转发到内部主机端口对。
l 端口限制锥形NAT
其特点为:一旦内部主机端口对(私网IP:端口,目的IP: 端口)被NAT网关映射到公网端口对(公网IP:端口,目的IP:端口),所有后续的该端口对的报文都会被转换为同一个公网端口对;只有内部主机端口对向特定的外部主机(目的IP)发送过数据,外部主机端口对(目的IP:端口)发送到(公网IP: 端口)的报文将会被转发到内部主机端口对。
l 对称型NAT(大多数互联网网关的NAT转换模式)
其特点为:NAT网关会把内部主机“地址端口对”和外部主机“地址端口对”完全相同的报文看作一个连接,在网关上创建一个公网“地址端口对”映射进行转换,只有收到报文的外部主机从对应的端口对发送回应的报文,才能被转换。即使内部主机使用之前用过的地址端口对去连接不同外部主机(或端口)时,NAT网关也会建立新的映射关系。