一、基本概念
二、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的接口标识就是:

三、工作机制
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消息,如下图:

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

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

6)从现在起,ISATAP主机需要访问IPv6资源的时候,将IPv6数据包封装在IPv4的隧道里,也就是说,套上ISATAP隧道的IPv4头,然后传给ISATAP路由器,再由ISATAP路由器解封装,再帮忙转发IPv6数据。
四、典型实验
- 环境描述
- PC是ISATAP主机,它是一台双栈PC,这里我们使用的是一台win7系统的电脑做测试。电脑网卡的IP地址为1.1.1.1/24,网关为1.1.1.254,网关是SW1的interfacevlan10。
- SW1创建两个VLAN:VLAN10及20,分别对应PC及ISATAP路由器。VLAN20的SVI口IP为2.2.2.254,是ISATAP路由器的默认网关。
- ISATAPRouter的接口IP为2.2.2.2。该IPv4地址在后续的ISATAP配置中使用到,ISATAP主机就是通过这个IP找到ISATAPRouter并与之建立ISATAP tunnel。ISATAPRouter同时连接到了一个IPv6网络,这里我们用loopback模拟:2001:8888::8/64,用于后续的测试。
- 最终的实验结果是首先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
interface fast0/15
interface vlan 10
interface vlan 20
Router的配置:
ipv6 unicast-routing
!
interface FastEthernet0/0
!
interface Tunnel1
!
interface loopback0
!
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]

接下去,我们在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}:
我们看到PC首先根据自己本地配置的IPv4地址:1.1.1.1,生成64bits的接口ID:

同时,PC将ISATAP路由器的Linklocal地址fe80::5efe:2.2.2.2设置为默认网关
我们最后再做一个测试,就是ISATAP主机去ping 2008:8888::1。

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