IPv6简介
IPv6早期被称为IPng (next generation)目前是IP协议的最新版本。 IP协议是一种网络层协议,采用IP协议构建的数据通信网络可提供高效的数据、语音和图像的传输服务。目前,在Internet上广泛采用的IP协议是IPv4版。随着Internet的迅猛发展,在充分享用了IPv4协议的简单高效的同时,人们也就意识到了IPv4的32位地址空间是不够的,因此必须建立新的IP标准。
IPv6最根本的改变是提供了未来对全球范围内可确定的地址空间的需求。基于移动设备的应用,如:个人数字设备(PDAs), 移动电话,汽车, 家庭网络和其他的移动数据通信设备都需要全球范围内可确定的地址。IPv6将网络地址位数从32位扩展到128位, 这代表着可以为地球上的任何需要联网的设备提供唯一确定的地址。正是因为有了全球范围内可确定的地址,IPv6提供了全球范围内的地址可达,端到端的安全通信,以及对所有对地址有要求的应用和服务的支持。 除此之外,丰富的IPv6地址空间消除了网络中的NAT(Network Address Translation)瓶颈,提高了网络效率。
IPv6编址
由于 IPv6 的地址有128位长,比32位的IPv4地址表示起来复杂的多。目前,IPv6的地址由一串16进制的数字表示,每16位之间用分号(:)隔开,格式如下: x:x:x:x:x:x:x:x. 下面是两个 IPv6地址例子: 2001:0DB8:7654:3210:FEDC:BA98:7654:3210 1080:0:0:0:8:800:200C:417A 通常情况下 IPv6地址会包含连续的0。为避免IPv6地址表示的复杂性,连续的0可缩写为两个冒号表示(::)。 Table1 lists IPv6地址的缩写格式。 两个冒号可以用在IPv6地址的一部分。你可以在一个接口上配置多个地址,但只能一个link-local 地址。 注意两个冒号(::) 只能在IPv6地址中出现一次,只能代表最长的连续的0。 IPv6地址中的十六进制数的表示是大小写不敏感的。
IPv6 Address Type Preferred Format Compressed Format
Unicast 1080:0:0:0:8:800:200C:417A 1080::8:800:200C:417A
Multicast FF01:0:0:0:0:0:0:101 FF01::101
Loopback 0:0:0:0:0:0:0:1 ::1
Unspecified 0:0:0:0:0:0:0:0 ::
Table中所列的loopback 地址可以是一个网络节点送一个IPv6的数据包给自己。这个loopback 地址功能与IPv4的loopback地址 (127.0.0.1)一样。注意IPv6的loopback 地址不能配置在物理接口。一个不管是原地址还是目的地址是IPv6 loopback 地址的数据包必须停留在产生他的网络节点内,不能出现在网络链路上。IPv6 路由器不能转发代有IPv6 loopback 地址的数据包,不管是原地址还是目的地址。
在Table 中的未定义的地址是不存在的IPv6地址.例如,一个刚刚进入网络的,正在初始化的节点可以用未定义的IPv6地址作为源地址,直到获得真正的 IPv6 地址为止. 注意未定义的 IPv6地址不可以用作接口地址。未定义的IPv6地址不能用作在IPv6数据包的目的地址或出现在IPv6 数据包头的路由信息内。
一个用 ipv6-prefix/prefix-length 的格式的IPv6地址前缀可表示一个连续的地址空间。其中,ipv6-prefix 部分必须是在RFC2373正式定义的以分号隔开的连续16进制数。前缀的长度是一个十进制的数值,他表示前多少位是网络 地址的前缀(网络标示)。 例如, 1080:6809:8086:6502::/64 是一个合法的IPv6前缀。
单播 Unicast 地址
一个IPv6 单播地址是用来标示一个网络节点的一个接口。一个数据包的目的地址是一个单播地址时,他将被送到以这个地址标示的网络接口。
一个IPv6的路由器应支持下列单播地址类型:
Global aggregatable address:可汇聚的全球化地址
Site-local address:区域内的地址
Unique Local 以FD00::/8开头
Link-local address: 链路接口地址
IPv4-compatible IPv6 address: 兼容IPv4的地址
注意Site-local address 是在RFC 3513中定义的,相当于私网地址,不过在RFC 3879 中取消了这个概念,取而代之的是Unique Local Unicast Address,即唯一本地单播地址,虽然只能在一个私有的管理域内使用但是地址仍然是全球唯一的。
可汇聚的全球地址
一个可汇聚的全球地址是一个带有全球化的可汇聚的 IPv6前缀的地址。这种结构化的全球化的单播地址可以进行严格的路由前缀的汇聚,这样就可以大大减少整个路由表的路由条数,减少路由的复杂度。 可汇聚的全球 地址用来标示链路地址,可以进行多级的路由汇聚,一直到顶级的 Internet服务提供商(ISPs).全球化的可汇聚的 IPv6地址被定义为全球化的路由前缀, 子网络号,和接口地址。除了以二进制000开始的地址, 所有的全球化的IPv6单播地址都带有64位的接口地址。目前,全球化的单播地址的分配范围从以二进制的001 (2000::/3)开始。
全球化的可汇聚地址的格式
带有前缀从 2000::/3 (001) 到E000::/3 (111)的地址需要带有从(EUI)-64格式的64位接口地址。IANA (Internet Assigned Numbers Authority)将 2000::/16 IPv6 地址空间下发到各个区域的地址注册机构分发,如APNIC等。在通常情况下,全球化的可汇聚的 IPv6地址包含一个48位的全球路由前缀和16位的子网络号或称为区域级的可汇聚前缀(Site-Level Aggregator-- SLA)。在IPv6的全球化的可汇聚单播地址格式文件(RFC 2374)中指出, 全球化的路由前缀包括两层的层次化结构:顶层汇聚(Top-Level Aggregator--TLA) 和第二层汇聚(Next-Level Aggregator -- NLA)。
现在,IETF决定从RFCs把TLS 和 NLA的区域规定删除,这样可以使路由汇聚有更多的灵活性。在一些已经采用了RFC 2374中的汇聚方式的网络可继续沿用原有的方式。一个16位的子网络标示被称作子网号,他可以被不同的组织机构用来区分自己内部的地址分配。一个子网号与IPv4的子网非常类似, 知识他可以有多达65535个子网。 一个接口地址用来标示链路的接口。接口地址在一个链路上必须是唯一的 ,他们可以是64位接口地址中的任何一个,只要确保是唯一的。在多数情况下,接口地址可以是从链路层的地址中衍生而来。在全球化的可汇聚的IPv6地址中,接口地址必须是64位长,并且采用修改的EUI-64 的格式。
修改的 EUI-64 的格式的接口地址可从下列的产生方法之一产生: 所有的IEEE 802的接口类型(如:以太网,FDDI等), 前三个八进制数(24bits)从MAC 地址中的OUI (Organizationally Unique Identifier)复制;第四和第五个八进制数为FFFE, 最后的三个八进制数(24bits)复制MAC地址中的后24位。最后,在构成的 64位接口地址的第一个八进制数的第七位(U/L) bit表示该接口地址是本地化的还是本地的:0 表示本地地址,1 表示全球唯一的接口地址。对其他的接口类型(如:串行接口, loopback, ATM, Frame Relay, 和tunnel接口—除IPv6 overlay tunnel的接口), 接口地址的构成采用IEEE 802 接口类型相似的方法:MAC地址来自于设备的MAC地址池中的第一个MAC 地址。
当接口类型是IPv6 overlay tunnels时, 接口地址是低32位的IPv4 地址加上高位的全0。 注意当接口类型是 PPP时, 两端的不同接口可能具有相同的MAC地址;这时,两端设备需要重新协商,重新选择接口地址,直到他们是唯一的。网络设备的第一个MAC地址用来构建PPP接口地址。 当网络设备不具有 IEEE802类型接口, link-local 的IPv6地址按以下方式产生:
1.路由器请求 MAC地址 (从路由器本身的MAC地址池)。
2.如果没有MAC地址可用, 路由器的序列号可用做link-local 地址。
3.如果序列号不可用,路由器将采用MD5算法结合自己的名字创建MAC地址。
Site-Local 地址 (已废除)
一个site-local地址是一个带着前缀 FEC0::/10和16位子网号加上64位的EUI-64格式的IPv6单播地址。Site-local地址非常像IPv4中的私有地址空间10.0.0.0/8;可以在一个区域内部进行路由的查找,而不需要全球化的唯一的地址前缀。Site-local地址可以被认为是私有地址,因为他只能在一个严格限制的区域内使用。IPv6路由器不可以将带有site-local的源地址或目的地址的数据包转发到区域之外。
Link-Local 地址
一个link-local地址是一个带有link-local前缀FE80::/10(1111 1110 10)的IPv6单播地址,他采用修改的EUI-64地址格式自动产生。Link-local地址可用于邻居发现协议(neighbor discovery protocol)和无状态自动配置进程。在同一个链路上的节点可使用link-local地址来通信;不需要site-local地址或全球化的单播地址。IPv6路由器不能将带有link-local的源地址或目的地址的数据包转发到其他网络或链路。
IPv4兼容的IPv6地址
一个 IPv4兼容的IPv6地址是一个高96位全0的,低32位为IPv4地址的IPv6单播地址。这种IPv4兼容的IPv6地址可表示为0:0:0:0:0:0:A.B.C.D或::A.B.C.D. 整个128位的IPv4兼容的IPv6地址是将网络节点的IPv4地址直接植入IPv6地址的低32位。IPv4兼容的IPv6地址用来在运行IPv4和IPv6 双栈时使用自动的隧道技术(tunnels)。
Anycast 地址
一个 anycast地址是一个属于多个网络节点的接口的IPv6的地址。一个以anycast地址为目的地址的数据包将被转发到最近的网络接口;接口的远近由路由的计算结果来确定。Anycast地址从地址的结构上来说同单播地址是不可分的,因为anycast地址存在于单播地址的地址空间。但一个单播地址可以被超过一个网络接口接收时,他就是一个anycast地址。Anycast地址需要在网络节点上明确定义:这个地址是一个anycast地址。 注意Anycast地址只能被路由器使用,不能被主机使用。Anycast 地址不可以出现在IPv6数据包的源地址。 下图表示了 anycast 地址的构成;Anycast地址是由一个前缀跟上一连串的0(接口地址)来构成。
Multicast组播地址
一个前缀 FF00::/8(1111 1111)的IPv6 地址就代表它是一个IPv6 组播地址。一个数据包的目的地址为组播地址时,他将被复制转发到多个网络的接收者。组播地址前缀的第二个八进制数代表组播地址的范围。这个八进制数被分为两部分:前四位为0000代表是一个永久性的组播地址,前四位为0001代表是暂时的组播 地址;后四位代表组播范围,目前定义了1, 2, 5, 8, or E,分别代表不同的组播范围。如下图所示。比如:组播地址的前缀为FF02::/16代表是一个永久性的组播地址,在链路范围。
IPv6 组播地址格式IPv6的设备(主机和路由器)必须加入下列组播组(必须接收的相应的组播数据包):
All-nodes 所有节点的组播组
FF02:0:0:0:0:0:0:1 (link-local范围)
Solicited-node节点请求组播组
FF02:0:0:0:0:1:FF00:0000/104 用来对应单播地址和anycast地址
IPv6 路由器必须加入所有路由器组播组 FF02:0:0:0:0:0:0:2 (link-local范围). 节点请求的组播组地址( solicited-node)是用来确定IPv6的单播地址或 anycast地址的. IPv6节点设备必须加入为地址和anycast地址对应的组播组。 当网络节点的IPv6单播或anycast地址的低24位再加上IPv6节点请求组播地址前缀FF02:0:0:0:0:1:FF00:0000/104就构成了这个节点的节点请求组播地址。 如下图。比如:当一个节点的IPv6地址为2037::01:800:200E:8C6C时,他的节点请求组播地址是FF02::1:FF0E:8C6C。节点请求地址用来接收邻居节点的请求信息。
IPv6报文格式
IPv6包头经过改进,效率大为提高。 新的格式引入了扩展包头的概念,使支持可选项功能的灵活性有所增强。 IPv6包头中的字段包括:
Version(版本):4位因特网协议(Internet Protocol)版本号,值=6。
Traffic Class(业务负载类别):8位业务负载类别字段,类似于IPv4的服务类型。
Flow Label(流标号):20位流标号,用于确定服务质量方面附加控制的业务流。
Payload Length(有效负载长度):16位无符号整数,IPv6有效负载的长度。
Next Header(下一包头):8位选择器,用于识别紧随IPv6包头之后的包头类型。
Hop Limit(跳转限度):8位无符号整数,根据转发数据包的每个节点按1递减。 如果Hop Limit 减 至零,则数据包被丢弃。
Source Address(源地址):数据包始发方的128位地址。
Destination Address(目标地址):数据包预期接收方的128位地址。
IPv6扩展包头
扩展包头在IPv6中为可选项。如果存在,扩展包头则紧随包头字段。IPv6扩展包头具有以下特性: 它们按64位排列,其系统开销远远低于IPv4选项。 不像IPv4那样有大小限制。唯一的限制就是IPv6数据包的大小。 它们仅由目的节点处理。唯一的例外就是Hop-by- Hop(逐段跳转)包头选项。 基本IPv6包头的Next Header(下一包头)字段识别扩展包头。
当同一IPv6数据包内存在多个扩展包头时,其发生顺序如下: 逐跳(Hop-by-Hop)包头携带需由发送路径上的所有节点检验的信息。当逐跳选项存在时,则其始终紧 随基本IPv6包头之后。 目的(Destination)包头携带仅能由目的节点检验的附加信息。 选路(Routing)包头由源节点使用,以列出数据包通过路径到达其目的地所需的所有节点。 分段(Fragmentation)包头由源节点使用,以表明数据包已经被分为片段,适合在最大传输单元(MTU 大小)内使用。与IP4不同的是,在IPv6内,数据包分段与组装是通过端节点完成,而非通过路由器 完成,这进一步提高了IPv6网络的效率。 认证包头(AH)与封装安全有效负载(ESP)包头用于IPSec中,以提供安全服务,确保数据包的认证、 完整性和保密性。
IPv6操作
相邻节点发现
相邻节点发现协议使IPv6节点和路由器能够判定相同网络上相邻节点的链路层地址,并发现和跟踪相邻的路由器。IPv6相邻节点发现方法使用IPv6 ICMP (ICMPv6)消息与被请求的节点组播地址判定相同网络上 相邻节点的链路层地址,验证相邻节点的可到达性,并跟踪相邻的路由器。
当一个节点要判定相同本地链路上另一节点的链路层地址时,一个相邻节点的请求消息携带着发送者自身的链路层地址,在本地链路上被发送出去。目的节点在收到相邻节点的请求消息后,将在本地链路上使用其自 身的链路层地址发送一个相邻节点通告消息,以此来回复请求。在收到相邻节点的通告之后,源节点与目的 节点便可进行通信。相邻节点的通告消息也可在本地链路上一个节点的链路层地址发生改变时发出。
路由器发现
IPv6路由器发现法使用路由器通告和请求消息发现本地链路上的路由器。路由器通告消息在IPv6路由器 的每个配置接口上定期发出,并回应来自链路上IPv6节点的路由器请求消息。当主机没有配置好的单播地址时,便发送一个路由器请求消息,使主机能够迅速自行自动配置,而不必等待下一个列入计划的路由器通告消息路由器通告包含或决定: 节点应该使用何种类型的自动配置——是无状态的还是有状态的。节点应该放入IPv6包头的跳转(Hop)限度值。节点应该用来形成单播地址的网络前缀。所包含网络前缀的寿命信息。节点在发送数据包中应该使用的最大传输单元(MTU)大小。 发端路由器是否应该用作默认路由器。 无状态的自动配置与IPv6节点的重新编号。
无状态的自动配置使IPv6节点能够完成不用服务器的基本配置,并方便地进行重新编号。无状态的自动配置使用路由器通告消息中的网络前缀信息作为节点地址前缀的/64。余下的64位地址由分配给结合EUI-64格式附加位的以太网接口的MAC地址获得。例如,带有以太网接口地址0003B61A2061的一个节点,结合由路由器通告提供的网络前缀2001:0001:1EEF:0000/64,将具有一个如2001:0001:1EEF:0000:0003:B6FF:FE1A:2061这样的IPv6地址。
IPv6节点通过包含新、旧前缀的路由器通告消息,即有可能进行重新编号。旧前缀的寿命值减少,在仍以 旧前缀保持其连接完好的同时,即提醒节点使用新前缀。在此期间,节点有两个单播地址在同时使用。当 旧前缀不再使用时,路由器通告将只包含新前缀。
路径发现MTU IPv6路由器不处理数据包的分段。在需要时,数据包分段由数据包的发端节点或源节点处理。IPv6使用ICMP错误报告来判定传输路径上的数据包大小是否与MTU大小相匹配。当一个节点通过ICMP错误报 告报告“数据包过大”时,源节点将缩小传输数据包的大小。该过程反复进行,直至传输路径上没有“数据 包过大”错误为止。这使节点能够动态发现特定数据路径上每个链路MTU大小之间的差异,并做出调整。
DHCPv6和DNSv6 IPv6除了支持无状态的自动配置以外,还通过DHCPv6支持有状态的配置。IPv6节点具有一个在路由器 未被发现时通过DHCP服务器请求地址的选项。DHCPv6的操作与DHCPv4大体类似,但是,DHCPv6 为其多数消息使用组播。IPv6还引进了新的记录类型,以满足域名服务器中IPv6地址的需要。AAAA记录,又称“四A”,已由IETF推荐,用于将主机名映射到IPv6地址。
IPv6扩展
一般本地链路地址不需要配置,IPv6路由器接口会自动配置(前提是有一个本地站点地址或者全球单播可聚合地址),本地站点地址相当于私网地址,不能在全球路由表存在,而全球单播可聚合地址可以在全球范围内进行通告。
2000::/3 单播可聚合地址 FEC0::/10 本地站点地址 FE80::/10 本地链路地址
自动通告前缀(比如2020::/64)是IPv6的一个基本特性,一般末节主机均采用这种自动配置的方式,前提就是存在能将前缀通告出来的路由器。
在获得或者配置/64的单播地址前缀后,后64位会根据EUI-64格式来自动构造,这是RFC 2462中定义的节点自行配置IPv6地址的机制。EUI-64是利用接口的Mac地址,格式为:Mac前24位 + FFFE + Mac地址后24位。而对于点到点链路或者环回口这样不存在Mac地址的接口,也是用同样格式,只不过Mac地址是借用本设备Mac地址池中的第一个地址,这样在一台路由器上可能会出现多个接口相同链路本地地址的情况。
实现IPv6的autoconfig是通过ICMPv6协议,该协议实现IPv6邻居的自动发现,无状态自动配置,代替ARP,即在IPv6主机之间的通信已经不需要ARP,而使用ICMPv6来发现邻居的链路层地址。
ICMPv6采用协议类型135(请求),136(应答)的消息来获得邻居地址,IPv6只在广播型链路上才会有对应邻居表项。
IPv6静态路由
1.配置下一跳为单播地址(本地站点或者全球可聚合地址),该方式不被RFC所推荐,因为会导致ICMPv6重定向失败。
ip route 2020:2::/64 2020:10::2
2.配置下一跳为本地链路地址,需指定本地接口(之所以要指定接口,是因为本地链路地址只在链路本地有效,所有接口的链路地址前缀均为FE80::10,如果不指定对应接口,无法确定从哪个接口转发出去)
ip route 2020:2::/64 s1/0 FE80::A8BB:CCFF:FE00:FC00 (仅指定接口也行)
注意:在NBMA链路上配置静态路由,一定要指定一下跳的本地链路地址,这样路由器在封装时才知道对应的PVC出口,否则会导致封装失败。
3.配置默认路由,相当于IPv4中的8个0
ip route ::/0 next-hop
RIPng协议
RIPng是RIPv2的下一代协议,其功能大都相同,主要区别是RIPng支持IPv6,AD值和RIP相同,并且依然以跳数为度量值。
RIPng基于UDP 521端口运行,使用组播地址 FF02::9 来通告路由。RIPng 中的 Garbage collect 计时器相当于RIPv2中的Flush 刷新计时器。
如果手动关闭正在运行RIPng的路由器接口,在接口真正关闭之前会触发一个即时更新通告,所有RIPng路由器会立即删除对应的路由。
RIPng的路由条目在180s之后超时即从路由表中删除,但是仍会在RIP database中保存120s(在此期间仍向外通告该条目为16hop不可达)RIPng默认没有holddown时间。
RIPng形成的路由条目仍以R表示,下一跳均为本地链路地址,因为RIPng使用本地链路地址作为通告源,即使在本接口配置了单播地址也是如此。
在traceout过程中,IPv6路由器优先使用接收接口的单播地址(单播可聚合 或者 本地站点)应答。如果该接口没有就用其他接口的单播地址,只有一台路由器上一个单播地址都没有,才会采用本地链路地址来应答。
IS-ISv6
IS-IS同EIGRP相同以TLV为扩展手段,可以对不认识的TLV做忽略处理,所以升级支持IPv6非常容易。
在IS-IS邻接的路由器上,如果一边同时启用IPv4和IPv6,而另一边只启用了一种,会导致邻居丢失。这是IS-IS非常重要的特点,可以用命令(router)# no adjacency-check 来忽略对IPv4地址的检查。
该命令链路两端都要配,如果要忽略支持IPv6的邻接关系的检查,要在IPv6子模式下进行:
(router)# address-family ipv6
(router-af)# no adjacency-check
(router-af)# no adjacency-check
事实上在IPv6网络中运行IPv6协议,和IPv6相关的路由协议操作(重发布,产生默认路由,调整进行参数等)均需在IPv6子命令模式中进行。因为IPv4/6的IS-IS在单个SPF进程下进行,而RIPng和OSPFv3则是启用的新进程。
OSPFv3
在Cisco路由器上配置OSPFv3非常类似于v2,配置上有两点主要改变:
1.不使用network命令,在OSPFv3中是在接口下用 ipv6 ospf 100 area 1 这样的命令将对应接口放在Area 1中运行
2.启用OSPFv3并不是使用命令 router ospf(这和IS-IS和BGP不同),而是使用命令 ipv6 router ospf process-id
在OSPFv3中的router-id格式和v2是一样的,如果在路由器中没有配置IPv4地址,那么OSPFv3进程就无法自动指定,需要手动来完成。
在OSPFv3中LSA 1,2,3类型基本和v2一样,类型8和9得到应用:
类型8:仅在本地链路泛洪,通知对象为本地链路上的邻居,内容为本地链路地址 FE80::/10 地址的列表,使用 show ipv6 ospf database link 来查看具体内容。
类型9:OSPFv3路由器为区域内的每一台路由器产生LSA,包含区域内的全部网络前缀,以及指出这些前缀对应通告的LSA1 和 LSA2。使用命令 show ipv6 ospf database prefix internal 查看。
OSPFv3的选路原则和v2没有区别
OSPFv3通告环回口网络使用/128主机路由,同样的可以通过命令 ipv6 ospf network point-to-point 来消除。
ipv6 enable 用于启用接口的IPv6转发功能,配置一个IPv6单播地址效果也是这样。
BGP4+
BGP4+即MBGP,支持多种协议,包括IPv4和IPv6,而所谓的双栈网络就是同时支持IPv4和v6。BGP对等体可以使用IPv4 或IPv6 建立邻居,在邻居建立后默认只运载IPv4的BGP路由表,若要支持IPv6协议族,必须在IPv6子模式下激活对应邻居的路由信息交换。
如果在一个纯IPv6的网络中配置BGP对等体,需要注意的问题是:
1.需要手动指定BGP router-id,格式等同于IPv4地址,这个很重要,否则会无法建立邻居。
2.neighbor的地址可以是IPv6单播地址或者本地链路地址。
3.如果用本地链路地址指定neighbor,需配置更新源接口,因为路由器仅凭本地链路地址无法关联物理接口。重复一点,一个本地链路地址与单条链路密不可分。
4.如果用本地链路地址指定neighbor,需设置Route-map来改变通告的下一跳地址,否则BGP路由表里对应前缀的下一跳地址为本地链路地址,对BGP路由条目而言不包含接口,会产生歧义。
5.如果用本地链路地址指定neighbor,而且路由器所有接口的本地链路地址又一致,会导致对等体无法建立(软件问题),通过show ipv6 interface brief 确认本路由器所有接口的本地链路地址是否相同,若相同需通过命令 ipv6 address xxx link-local 手动更改使其不同。
在纯IPv6的网络中,通过本地链路地址指定邻居,即使邻居已经形成,路由器也不会收到任何BGP路由信息,因为默认的Next-hop是(::),这样对等体会拒绝接收对应的Updates,在这种情况下,必须手动指定BGP通告的下一跳地址,具体动作为在接口添加全球单播地址,再应用Route-Map,修改NEXT_HOP属性。
如果是用单播地址建立的对等提关系,就不必那么麻烦,向对方通告的路由信息NEXT_HOP属性会自动为对应接口的单播地址。
当两个IPv6网络之间的通信经过IPv4网络,需要在v4网络中建立Tunnel隧道,隧道的接口ipv6 enable,然后有IPv6接口的路由器运行OSPFv3协议,实现互通。
通过Traceroute可以发现,在数据包经过Tunnel的时候,路由器如果没有可用的单播地址进行应答,会用本地链路地址作为源地址进行应答,但该应答只能在本地链路有效,无法传递。
另一种方法是 6to4 隧道,该隧道的特点是:
1.自动隧道。
2.在站点边缘启用,6to4的路由器通过IPv4基础设施到达对方。
3.自动前缀分配,所有前缀均使用2002::/16,IPv4的地址转换为16进制附在2002::/16后面,最终表现形式为2002:ipv4-add::/48
4.没有IPv6路由传播,每个前缀都是基于IPv4地址,因此IPv4的路由域已经足够使用。
当有多条 6to4 隧道时会选择最近的一条,IANA为此分配了 6to4 中继任播前缀为192.88.99.0/24,专门用于自动路由6to4数据包到最近的6to4中继。理论上任何一个单播地址都可以作为任播地址。
自动IPv4兼容隧道是一种在IPv4网络中传送IPv6数据包的技术,允许在IPv4网络中的2台IPv6主机自动启用隧道。源和目的IPv6地址的低32bit地址标识对应隧道的IPv4地址。
尽管这种技术看起来可以简便的使2台主机之间使用IPv6来通讯,但是它仍基于IPv4,所有兼容IPv4的IPv6地址前缀均为::/96,因此这种技术无法解决IPv4地址空间短缺的问题。在6to4和ISATAP等过渡和共存机制推出后,自动IPv4兼容隧道机制就废弃了。
NAT-PT在RFC2766中定义,可以把IPv6地址转换为IPv4,反之亦然。NAT-PT仅用于IPv6单协议和IPv4单协议网络节点之间的通信时使用,即某些新的网络节点只能申请到单播的IPv6地址(对某些小国家而言申请全球单播IPv4地址是一个漫长的过程),而一写旧的网络节点可能根本就不支持IPv6协议,这些新旧节点之间的通信,就必须使用IPv4和IPv6之间的地址转换机制。
NAT-PT操作定义的前缀是3ffe:b00:ffff::1:0:0/96,由于是公认可用的前缀,这样方便ISP表示出IPv4和IPv6的交界点,其实理论上可以用任何前缀地址用于NAT-PT。IPv6网络将使用该前缀地址的数据包路由到NAT-PT设备,然后数据包中的IPv6地址转换成IPv4地址。
NAT-PT路由器是IPv4网络和IPv6网络的分界点,实现互通有两个步骤:
1.将IPv6地址转换为IPv4地址,这个IPv6地址需可达,即安装在各个IPv4路由器的路由表里。
2.将IPv4地址转换为IPv6地址,这个IPv6地址需可达,即安装在各个IPv6路由器的路由表里
具体实施的过程:
1.在NAt-PT路由器上配置IPv6 NAT所使用的前缀,完成该配置后,路由器上会自动生成相应的直连路由,这个条目需要通过路由协议通告给整个IPv6网络。
(config)# ipv6 nat prefix 3FFE:B00:FFFF::1:0:0/96
(config)# ipv6 router ospf 10
(config-rtf)# redistribute connected
(config)# ipv6 router ospf 10
(config-rtf)# redistribute connected
2.在NAT-PT路由器上将连接IPv4和v6网络的接口均启用IPv6 NAT,并指定地址转换
(config)# ipv6 nat v6v4 source 2001::4 13.1.1.10
(config)# ipv6 nat v4v6 source 5.5.5.5 3ffe:b00:ffff::1:0505:0505
(config)# ipv6 nat v4v6 source 5.5.5.5 3ffe:b00:ffff::1:0505:0505
举例来说,IPv4网络中的路由器以35.1.1.5访问IPv6网络,源地址在R4上查看的时候,可以发现已经自动转换为3FFE:B00:FFFF::1:2301:105,即最后的32位对应十进制就是35.1.1.5。
注意:从IPv4转换为IPv6,如果没有静态转换条目,那么自动会根据指定前缀生成一个IPv6地址,但是从IPv6转换为IPv4地址,则必须手动配置静态转换条目,或者采用NAT-PT动态模式,即每次发起IPv4的会话时,自动分配一个地址,这种转换受限于IPv4的地址数量。
动态映射的配置:
1.定义允许被转换的IPv6地址范围
(config)# ipv6 access-list ipv6-2001 permit 2001::/16 any
2.定义可用的IPv4地址池
(config)# ipv6 nat v6v4 pool to-ipv4 13.1.1.10 13.1.1.20 prefix-length 24
(config)# ipv6 nat v6v4 pool to-ipv4 13.1.1.10 13.1.1.20 prefix-length 24
3.配置映射
(config)# ipv6 nat v6v4 source list ipv6-2001 to-ipv4
动态条目默认的超时时间是1天时间(86400 s),可以用 ipv6 nat translation timeout 命令来修改这个全局参数。