【IPv6】ISATAP隧道技术详解

一、基本概念

 

    ISATAP(Intra-SiteAutomatic Tunnel Addressing Protocol)

ISATAP是一种非常容易部署和使用的IPv6过渡机制。在一个IPv4网络中,我们可以非常轻松的进行ISATAP的部署,首先你的PC需是V4/V6双栈PC,然后,需要有一台支持ISATAP的路由器,ISATAP路由器可以在网络中的任何位置,只要PC能够ping通它(当然,你要知道路由器的IPv4地址)。那么接下去,我们可以通过在路由器上部署ISATAP,这样网络中支持ISATAP的双栈主机,在需要访问IPv6资源时,可以与ISATAP路由器建立起ISATAP隧道,ISATAP主机根据ISATAP路由器下发的IPv6前缀构造自己的IPv6地址(这个IPv6地址是被自动关联到ISATAP主机本地产生的一个ISATAP虚拟网卡上),并且将这台ISATAP路由器设置为自己的IPv6默认网关,如此一来,后续的这台主机就能够通过这台ISATAP路由器去访问IPv6的资源。

这种方法部署起来非常简单,在许多场合,客户为了节省成本,又希望网络中的IPv6主机能够访问V6资源,同时又不愿意对现有网络做大规模的变更及设备升级,那么就可以采用这种方法,购买一台支持ISATAP的路由器,甚至可以将ISATAP路由器旁挂在网络上,只要它能够访问V6资源并且响应ISATAPPC的隧道建立请求。

二、ISATAP的功能组件如下:

?

1、自动隧道:

ISATAP的隧道机制也是自动的,隧道在主机和ISATAP路由器之间被创建。主机首选需要知道ISATAP路由器的IPv4地址。

2、ISATAP地址格式:

分配给ISATAP路由器的IPv6地址是全局单播地址,该地址的前缀将被ISATAP主机用于自己的IPv6地址构造。ISATAP主机通过在IPv4建立起来的ISATAP隧道从ISATAP路由器发送的消息中接收/64的IPv6前缀,并且使用这个前缀结合“特殊的接口标识”来构造自己的IPv6地址。

3、接口标识:

ISATAP在主机上启用后,会产生一个ISATAP虚拟网卡,该虚拟网卡会产生一个64bits的特殊接口标识,有点类似EUI-64,但是产生机制不同,它是由专为ISATAP保留的32位的0200:5EFE加上主机上配置的IPv4地址构成,如下图,假设ISATAP主机配置的IPv4地址为1.1.1.1,那么ISATAP虚拟网卡的64bits接口标识就是:

另一方面,在路由器上部署ISATAP后,路由器也会产生一个tunnel接口,用于响应ISATAP主机的隧道建立请求,这个tunnel接口同样会产生接口标识。地址的格式是IANA保留给ISATAP的32比特的0000:5EFE后追加32比特的IPv4地址。如下图,假设给ISATAP路由器配置的IPv4地址(用于隧道的)是2.2.2.2,那么ISATAPtunnel的接口标识就是

这里关于64bits的接口标识中“为ISATAP保留的”高阶32bits在维基百科上有这么一段描述:“The link-localaddress is determined by concatenatingfe80:0000:0000:0000:0200:5efe: for global unique andfe80:0000:0000:0000:0000:5efe: for private addresses with the 32bits of the host‘s IPv4address.”。貌似有全局唯一和私有之分,不过在IETF的相关草案上找到的更多是0200:5efe的描述,在我所作的测试环境中,windows主机上系统使用的是0200:5ede,而CISCO路由器上用的是0000:5efe。

ISATAP主机和ISATAP路由器产生的这个64btis的接口标识,可进一步用于构造隧道接口的Linklocal地址,以及IPv6全局单播地址。这个下面会描述到。

另外,因为ISATAP的操作范围在站点内,所以ISATAP主机和ISATAP路由器的IPv4地址可以是私有IP,也可以是公有IP。

三、工作机制

首先,我们有一个IPv4的网络,IPv4网络中绝大部分网路设备都不支持IPv6,除了终端主机,以及一台路由器,这台能够访问我们需要的IPv6资源。现在,一种最廉价的方式是,在这台路由器上部署ISATAP,终端ISATAP主机与路由器之间建立一个ISATAPtunnel,这样一来PC可以直接将IPv6流量放进tunnel传到ISATAP路由器从而穿越整个IPv4网络。

1)现在我们在ISATAP路由器上进行相应的配置,给路由器分配的IPv4地址是2.2.2.2/24,同时建立一个tunnel接口用于ISATAP,此时tunnel接口会根据IPv4地址产生一个64bits的接口标识。这个接口标识搭配上高位的fe80::就形成了tunnel接口的Linklocal地址:fe80::0000:5efe:202:202。另外,还需给ISATAPtunnel接口配置一个全局单播IPv6地址,这里可以手工配置,也可以通过前缀+EUI64的方式来构建,这里的EUI-64就是上面所述的特殊的64bits接口标识。如上图,构建出来的IPv6地址就是2001:1111::0000:5efe:0202.0202/64,因此IPv4的前缀为2001:1111::/64,这个前缀稍后会通过tunnel下发给ISATAP主机,从而使它能够构建自己的IPv6地址。

2)现在我们在ISATAP主机上,配置ISATAP,一般来说,在WIN7系统上默认安装了IPv6协议栈,默认就会有一个ISATAP的虚拟网卡。在我们给PC的物理网卡配置IPv4地址如1.1.1.1/24后,ISATAP虚拟网卡就会自动根据这个IPv4地址计算出上面所讲的特殊的接口标识:0200:5efe:1.1.1.1,注意这种格式等同与0200:5efe:0101.0101,在windows系统上我们可以看到前者的简便写法。

3)当我们在主机上配置了ISATAP路由器之后(指向的是ISATAP路由器的IPv4地址),ISATAP主机开始向ISATAP路由器发送RS消息,如下图:

这个RS消息是通过IPv4隧道传输的,外层是IPv4的头,源地址是ISATAP的IPv4地址1.1.1.1,目的地址是2.2.2.2,也就是ISATAP的IPv4地址。IPv4头里面裹着IPv6的报文,源地址是ISATAP主机的ISATAP虚拟网卡的Linklocal地址,目的地址是ISATAP路由器的Linklocal地址。

4)ISATAP主机发出的这个RS消息,会在IPv4网络中被路由,最终转发到ISATAP路由器。这将使得路由器立即以一个RA进行回应:

而这个回应的RA消息里,就包含ISATAP上所配置的那个IPv6全局单播地址的/64前缀。

5)ISATAP主机收到这个RA回应后,会拿出里头的IPv6前缀,随后在后面加上自己ISATAP虚拟网卡的64bits的接口标识地址,构成128bits的IPv6全局单播地址,同时会产生一条默认路由,指向ISATAP路由器的Linklocal地址:

6)从现在起,ISATAP主机需要访问IPv6资源的时候,将IPv6数据包封装在IPv4的隧道里,也就是说,套上ISATAP隧道的IPv4头,然后传给ISATAP路由器,再由ISATAP路由器解封装,再帮忙转发IPv6数据。

四、典型实验

  • 环境描述
  1. PC是ISATAP主机,它是一台双栈PC,这里我们使用的是一台win7系统的电脑做测试。电脑网卡的IP地址为1.1.1.1/24,网关为1.1.1.254,网关是SW1的interfacevlan10。
  2. SW1创建两个VLAN:VLAN10及20,分别对应PC及ISATAP路由器。VLAN20的SVI口IP为2.2.2.254,是ISATAP路由器的默认网关。
  3. ISATAPRouter的接口IP为2.2.2.2。该IPv4地址在后续的ISATAP配置中使用到,ISATAP主机就是通过这个IP找到ISATAPRouter并与之建立ISATAP tunnel。ISATAPRouter同时连接到了一个IPv6网络,这里我们用loopback模拟:2001:8888::8/64,用于后续的测试。
  4. 最终的实验结果是首先PC要能够ping通ISATAP Router的IPv4地址也就是2.2.2.2。然后PC与ISATAProuter建立隧道并拿到IPv6地址,而且要能够ping通20001:8888::8
  • 设备配置

PC1的配置:

网卡配置IP地址1.1.1.1/24,网关为1.1.1.254

安装IPv6协议栈,此时Win7会自动产生一个ISATAP隧道虚拟接口:

隧道适配器isatap.{0DB7233C-89B7-49DB-A8C0-D1AA005F4E6A}:

SW1的配置:

vlan 10

vlan 20

interface fast0/1

switchport access vlan 10

interface fast0/15

switchport access vlan 20

interface vlan 10

ip address 1.1.1.254 255.255.255.0

interface vlan 20

ip address 2.2.2.254 255.255.255.0

Router的配置:

ipv6 unicast-routing

!

interface FastEthernet0/0

ip address 2.2.2.2 255.255.255.0

no shutdown

!

interface Tunnel1

ip unnumbered fastEthernet 0/0            !! 这个IPv4地址就是ISATAP隧道的目的地址

ipv6 enable

ipv6 address 2001:1111::/64 eui-64          !!这个IPv6地址的前缀会被通告给ISATAP主机

no ipv6 nd suppress-ra

tunnel source fastEthernet 0/0

tunnel mode ipv6ip isatap

!

interface loopback0

ipv6 enable

ipv6 address 2001:8888::8/64

!

ip route 0.0.0.0 0.0.0.0 2.2.2.254

注意ISATAP路由器的配置,关键部分在于tunnel的配置,tunnel模式是ipv6ipisatap的,同时注意在tunnel这里配置的IPV4地址,就是对应的ISATAP主机上配置的那条CMD命令里ISATAP路由器的地址。我们这个实验演示的是tunnel直接用fa0/0的地址,当然,tunnel也可以有自己的IPv4地址,只要保证ISATAP主机到这个IPv4地址路由可达就行。另外tunnel的IPv6地址,对应的前缀就是稍后要下发给ISATAP主机的前缀,这个实验中,我们tunnel的IPv6全局单播地址使用的是前缀+eui-64的配置方式,这里的eui-64实际上指的就是前面我们介绍的那个特殊的64bits接口标识。(红茶三杯原创博文,版权所有,转载请注明出处http://weibo.com/vinsoney)

  • 实验测试

我们首先在路由器上查看一下:

R2#show ipv6 interface brief 

FastEthernet0/0          [up/up]

Tunnel0                 [up/up]

FE80::5EFE:202:202

2001:1111::5EFE:202:202

注意,这里的Linklocal地址:FE80::5EFE:202:202就是一个ISATAP格式的地址,最后的64bits是由32bits的0000:5EFE加上32bits的接口IPv4地址(这里是2.2.2.2)构成的,如下图。而IPv6全局单播地址,也是使用64bits的接口标识构成的,当然,你也可以手工配置IPv6全局单播地址,不一定要使用接口标识。

接下去,我们在ISATAP主机上,CMD模式下输入:

netsh interface ipv6 isatap set router 2.2.2.2

PC就会开始发送RS,报文如下:

我们看到这个RS的ICMPv6报文外是IPv6的头,IPv6的头外是IPv4的头。

注意外层IPv4的头,源是1.1.1.1,目的是2.2.2.2

然后内层IPv6的头,源是ISATAP主机的Linklocal地址,目的是ISATAP路由器的Linklocal地址

在路由器收到RS后回回应一个RA:

路由器回应的这个RA里,就有一个ICMPv6的Option,其中就包含着ISATAP路由器的IPv6前缀。而ISATAP主机就可以根据这个前缀,结合自己的接口标识构建IPv6地址。

最终PC获取到的IPv4地址如下:

隧道适配器 isatap.{0DB7233C-89B7-49DB-A8C0-D1AA005F4E6A}:

连接特定的 DNS 后缀 . . . . . .. :

IPv6 地址 . . . . . . . . .. . . : 2001:1111::200:5efe:1.1.1.1

本地链接 IPv6 地址. . . . . . .. : fe80::200:5efe:[email protected]

默认网关. . . . . . . . . . .. . : fe80::5efe:[email protected]

我们看到PC首先根据自己本地配置的IPv4地址:1.1.1.1,生成64bits的接口ID:

这个64bits的接口ID,与从ISATAP路由器获取到的IPv6全局单播地址前缀2001:1111::的前64bits,构成了PC的IPv6全局单播地址:2001:1111::200:5efe:1.1.1.1。

这个64bits的接口ID,与FE80::/10构成了PC的Linklocal地址:fe80::200:5efe:1.1.1.1

同时,PC将ISATAP路由器的Linklocal地址fe80::5efe:2.2.2.2设置为默认网关

当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。

我们最后再做一个测试,就是ISATAP主机去ping 2008:8888::1。

这个到达ISATAP的loopback的IPv6数据包,被套上一个ISATAP的IPv4隧道头,然后传给ISATAP路由器,由路由器进行下一步的IPv6转发。

时间: 2024-10-10 05:37:51

【IPv6】ISATAP隧道技术详解的相关文章

IPv6技术系列十二——IPv6 ISATAP隧道

一.基本原理 基本概念 ① 在一个IPv4网络中主机与路由器之间创建一条ISATAP隧道,以便让该主机可以访问IPv6网络中的资源.② 条件:IPv4中的PC主机需要支持IPv4和IPv6双栈协议,然后需要一台支持ISATAP的路由器.该路由器可以在网络中的任何位置,只要PC能通过IPv4地址与其相连接.③ 当IPv4中的PC主机需要访问IPv6资源时,需要先与ISATAP路由器建立ISATAP隧道,然后根据路由器提供的IPv6前缀构造自己的IPv6地址,并将这台路由器设置为自己的IPv6默认网

Comet技术详解:基于HTTP长连接的Web端实时通信技术

前言 一般来说,Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询.Comet技术.WebSocket技术.SSE(Server-sent Events). 关于这4种技术方式的优缺点,请参考<Web端即时通讯技术盘点:短轮询.Comet.Websocket.SSE>.本文将专门讲解Comet技术.(本文同步发布于:http://www.52im.net/thread-334-1-1.html) 学习交流 - 即时通

腾讯技术分享:GIF动图技术详解及手机QQ动态表情压缩技术实践

本文来自腾讯前端开发工程师" wendygogogo"的技术分享,作者自评:"在Web前端摸爬滚打的码农一枚,对技术充满热情的菜鸟,致力为手Q的建设添砖加瓦." 1.GIF格式的历史 GIF ( Graphics Interchange Format )原义是"图像互换格式",是 CompuServe 公司在1987年开发出的图像文件格式,可以说是互联网界的老古董了. GIF 格式可以存储多幅彩色图像,如果将这些图像((https://www.q

实现高性能纠删码引擎 | 纠删码技术详解(下)

作者介绍: 徐祥曦,七牛云工程师,独立开发了多套高性能纠删码/再生码编码引擎.柳青,华中科技大学博士,研究方向为基于纠删码的分布式存储系统. 前言: 在上篇<如何选择纠删码编码引擎>中,我们简单了解了 Reed-Solomon Codes(RS 码)的编/解码过程,以及编码引擎的评判标准.但并没有就具体实现进行展开,本篇作为<纠删码技术详解>的下篇,我们将主要探讨工程实现的问题. 这里先简单提炼一下实现高性能纠删码引擎的要点:首先,根据编码理论将矩阵以及有限域的运算工程化,接下来主

Linux磁盘阵列技术详解(二)--raid 1创建

我在Linux磁盘阵列技术详解(一)里已经详细介绍了几种RAID磁盘阵列方式,原理以及创建raid 0 的详细步骤.那么这篇文档就着重讲解如何创建raid 1的技术: 步骤如下: ① 分区 同样我们还是以一块硬盘的不同分区为例,实际工作中应该是不同的硬盘才对. 具体分区步骤不再赘述! 分区后结果如下图所示: ② 创建raid 1 mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sdc1 /dev/sdc2 /dev/sdc3 或者 mdadm -C -v /de

CDN技术详解及实现原理

CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精华放上网.公诸同好. 第一章    引言    “第一公里”是指万维网流量向用户传送的第一个出口,是网站服务器接入互联网的链路所能提供的带宽.这个带宽决定了一个 网站能为用户提供的访问速度和并发访问量.如果业务繁忙,用户的访问数越多,拥塞越严重,网站会在最需要向用户提供服务时失去用户.(还有“中间一公里” 和

Protocol Buffer技术详解(语言规范)

Protocol Buffer技术详解(语言规范) 该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的主要在于不仅可以保持Google文档的良好风格和系统性,同时再结合一些比较实用和通用的用例,这样就更加便于公司内部的培训,以及和广大网友的技术交流.需要说明的是,Blog的内容并非line by line的翻译,其中包含一些经验性总结,与此同时,对于一些不是非常常用的功能并未予以说明,有兴趣的开发者

红帽Linux故障定位技术详解与实例(2)

红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 3.内核故障情形及处理 (1)内核panic panic是内

红帽Linux故障定位技术详解与实例(1)

红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 红帽Linux故障定位技术详解与实例是本文要介绍的内容,主要