一、基本概念
ISATAP(Intra-Site Automatic 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资源并且响应ISATAP PC的隧道建立请求。
二、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,那么ISATAP tunnel的接口标识就是:
这里关于64bits的接口标识中“为ISATAP保留的”高阶32bits在维基百科上有这么一段描述:“The link-local address is determined by concatenating fe80:0000:0000:0000:0200:5efe: for global unique and fe80:0000:0000:0000:0000:5efe: for private addresses with the 32 bits of the host's IPv4 address.”。貌似有全局唯一和私有之分,不过在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主机与路由器之间建立一个ISATAP tunnel,这样一来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。另外,还需给ISATAP tunnel接口配置一个全局单播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数据。
四、典型实验