什么是IPv6
IPv6,全称Internet Protocol version 6,即网际协议版本6,也叫互联网通信协议第六版。是互联网
工程任务组(IETF)设计的用于替代IPv4的下一代IP协议,其地址数量号称可以为全世界的每一粒沙子编
上一个地址。由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,
不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。
IPv6与IPv4优势对比
● IPv6具有更大的地址空间
IPv4中规定IP地址长度为32,最大地址个数为2^32;而IPv6中IP地址的长度为128,即最大地址个数为
2^128。与32位地址空间相比,其地址空间增加了2^128-2^32个。
● IPv6使用更小的路由表
IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(E
ntry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。
● IPv6具有更高的安全性。
在使用IPv6网络中用户可以对网络层的数据进行加密并对IP报文进行校验,在IPV6中的加密与鉴别选项
提供了分组的保密性与完整性。极大的增强了网络的安全性。
● IPv6增加了增强的组播(Multicast)支持以及对流的控制(Flow Control),这使得网络上的多媒体
应用有了长足发展的机会,为服务质量(QoS,Quality of Service)控制提供了良好的网络平台。
● IPv6加入了对自动配置(Auto Configuration)的支持。这是对DHCP协议的改进和扩展,使得网络(尤
其是局域网)的管理更加方便和快捷。
IPv6地址的格式
IPv6地址的长度为128位,相比IPv4地址长度32位变的更长,因此IPv6地址采用每4位组合起来转换成16进
制的方式,每4个16进制数再以冒号分隔成8段,例如:2001:0000:0001:00a2:0000:0000:0000:0ec3。每
一节中起始的0可以省略,全是0的使用一个0表示。
省略前:2001:0000:0001:00a2:0000:0000:0000:0ec3
省略后:2001:0:1:a2:0:0:0:ec3
然后,用双冒号替代一组联续出现的0,只能取代一组,所以选最长的一组。
取代前:2001:0:1:a2:0:0:0:ec3
取代后:2001:0:1:a2::ec3
最终,2001:0000:0001:00a2:0000:0000:0000:0ec3 = 2001:0:1:a2::ec3
IPv6地址分类
IPv6主要有三种类型的地址:单播地址、组播地址和任播地址。
● 单播地址:用来唯一标识一个接口,类似于IPv4的单播地址。发送到单播地址的数据报文将被传送给此地
址所标识的接口。
● 组播地址:用来标识一组接口(通常这组接口属于不同的节点),类似于IPv4的组播地址。发送到组播地
址的数据报文被传送给此地址所标识的所有接口。
● 任播地址:用来标识一组接口(通常这组接口属于不同的节点)。发送到任播地址的数据报文被传送给此
地址所标识的一组接口中距离源节点最近(根据使用的路由协议进行度量)的一个接口。
注:IPv6中没有广播地址,广播地址的功能通过组播地址来实现。
IPv6的Prefix
在IPv6网络,路由器使用Prefix来判断IPv6地址是否位于同一个网络,比较普遍的方式是将128位的IPv6
地址切割成64位的Prefix和64位的Interface ID,IPv6 Prefix长度的表示方法是在地址后面加上/xx,
例如上图中的::1/128,表示Prefix为128位。假设所有IPv6地址都使用64位Prefix,就可以拥有2^64个
网络,每个网络可以容纳2^64个IP地址,2的64次方:18446744073709551616,这是个天文数字。所以在
IPv6网络里,已经不需要再把网络分成Subnet。
EUI-64
IPv6单播地址中的接口标识符用来标识链路上的一个唯一的接口。目前IPv6单播地址基本上都要求接口标
识符为64位。IEEE EUI-64格式的接口标识符是从接口的链路层地址(MAC地址)变化而来的。IPv6地址中
的接口标识符是64位,而MAC地址是48位,因此需要在MAC地址的中间位置(从高位开始的第24位后)插入
十六进制数FFFE(1111111111111110)。为了确保这个从MAC地址得到的接口标识符是唯一的,还要将Uni
versal/Local (U/L)位(从高位开始的第7位)设置为“1”。最后得到的这组数就作为EUI-64格式的接口标
识符。IPv6地址太长,如果要逐个端口配置IPv6地址是件很痛苦的事情,使用EUI-64就可以只设定Prefix
部份,然后接口就会用MAC地址自动生成Interface ID,大大减少工作量。
举例,MAC地址:0012-3400-ABCD
中间插入FFFE使其成为EUI-64 Interface ID: 0012:34FF:FE00:ABCD
最后把第7位改成1:0212:34FF:FE00:ABCD
Link-Local Address
Link-Local Address,链路本地地址,链路本地地址的前10位为1111111010。此地址用于邻居发现协议,
也用于无状态自动配置中本地链路上节点之间的通信。使用链路本地地址作为源或目的地址的数据报文不会
被转发到其他链路上。通常使用FE80::/10表示。下面我们演示一下如何配置Link-Local Address。如下
图路由器R1与R2通过f0/0互联。
1、手动配置R1 f0/0的Link-Local IPv6地址:
R1(config)#int fa0/0
R1(config-if)#ipv6 address fe80::1234 link-local
2、查看R1 f0/0的Link-Local IPv6地址:
R1#show ipv6 interface
3、使用EUI-64自动配置R2 f0/0的Link-Local IPv6地址:
R2(config)#int fa0/0
R2(config-if)#ipv6 enable
4、查看R2 f0/0的Link-Local IPv6地址:
R2#show ipv6 interface
5、从R2 Ping R1的IPv6 Link-Local 地址,注意,Ping Link-Local地址时要指定端口
R2#ping fe80::1234
Output Interface: fastethernet0/0
6、IPv6没有ARP机制,两个相连的设备配置好IPv6地址后,会自动生成IPv6 Neighbor。
Uniquel Local Address
Uniquel Local Address,站点本地地址,前10位为1111111011或FEC0::/10。与IPv4中的私有地址类似
(10.0.0.0/8、172.16.0.1/12、192.168.0.0/16)。使用站点本地地址作为源或目的地址的数据报文不
会被转发到本站点(相当于一个私有网络)外的其它站点,也就是在Internet上不可路由。私有地址在IPv4
中被广泛使用在NAT中用来弥补IPv4地址不足的情况,而在IPv6中,ip地址非常充足,所以站点本地地址通
常只用在测试环境中。
1、手动配置R1 f0/0的IPv6站点本地地址:
R1(config)#int fa0/0
R1(config-if)#ipv6 address FC00::4321/64
2、查看R1 f0/0的IPv6站点本地地址
R1#show ipv6 interface
3、使用EUI-64自动配置R2 f0/0的IPv6站点本地地址:
R2(config)#int fa0/0
R2(config-if)#ipv6 address FC00::/64 eui-64
4、查看R2 f0/0的IPv6站点本地地址
R2#show ipv6 interface
5、从R2 Ping R1的IPv6的站点本地地址。
R2#ping fc00::4321
Global Aggregatable Address
Global Aggregatable Address,全球单播地址,前三位是001或2000::/3。等同于IPv4公网地址,提
供给网络服务提供商。这种地址类型允许路由前缀的聚合,从而限制了全球路由表项的数量。全球单播地
址的设定方法与上面介绍的配置站点本地地址相同,这里我们就不演示了。其中2002::/16特别用作6to4
Tunnel。
无状态地址自动配置
Stateless Address Autoconfiguration(SLAAC),无状态地址自动配置。在IPv4网络中,我们可以通
过DHCP让端口自动获取到IP地址,而在IPv6网络里,则通过Auto-configuration来获取IP地址。前面我们
说过EUI-64可以自动产生Interface ID,所以现在要解决的就是如何自动获得Prefix。IPv6使用的是Stat
eless Address Autoconfiguration,Interface向Link-Local发出RS(Router Solicitation)多播
请求来获取配置参数,IPv6 Router回应RA(Router Advertisement)包含Internet层配置参数的路由器
宣告报文进行回应。下面我们来进行一下演示,R1为路由器,R2通过SLAAC获取IP地址。
1、配置R1的接口配置IPv6地址
R1(config)#int fa0/0
R1(config-if)#ipv6 address 2001::/64 eui-64
2、配置R2的接口,启用IPv6,只让它先有一个Link-Local地址
R2(config)#int fa0/0
R2(config-if)#ipv6 enable
3、在R1上开启IPv6 Routing,使其成为IPv6 Router。这样R1在收到RS后便会回应RA。
R1(config)#ipv6 unicast-routing
4、配置R2通过Auto-configuration获取IPv6地址,通过R1获得Prefix,2001::/64。
5、通show ipv6 route命令可以看到prefix:2001::/64通过fa0/0获得。
IPv6 Tunneling
将互联网完全从IPv4转换到IPv6将会是一个及其漫长的过程,目前IPv4仍然占据重要地位。所以在这个转
换的过程中,将会有相当长的一个时期IPv4与IPv6会共同存在于互联网当中。如果两张网完全各自独立是
不现实的,所以就需要一种技术实现IPv4可以与IPv6网络互通。IPv6 Tunneling可以让IPv6报文包裹在
IPv4之中进行传输,IPv6 Tunneling有两种技术,分别是ISATAP和6to4 Tunnel。
ISATAP
ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是一种IPv6转换传送机制,允许IPv6
数据包通过IPv4网络上双栈节点传输。它将IPv4地址夹入IPv6地址中,当两台 ISATAP 主机通讯时,可自
动抽取出IPv4地址建立Tunnel即可通讯,且并不需透过其它特殊网络设备,只要彼此间IPv4网络通畅即可。
ISATAP分为Server与Client两个角色,Client向Server请求IPv6地址并建立IPv6 Tunnel。这样Client
便可以透过ISATAP Server与IPv6网络通讯。我们以下面的场景来演示一下ISATAP如何工作。
● R1和R2位于IPv4网络中,R1(ISATAP Client)的default Route指向R2,无法与IPv6网络进行通信。
● R2与R3跑EIGRP,让R1可以与R3(ISATAP Server)通过IPv4进行通信。
● R3是ISATAP Server,充当中介的角色,连接IPv4和IPv6网络。
● R3与R4跑OSPFv3。
● R4和R5位于IPv6网络中,只有IPv6地址,没有IPv4地址。
1、配置R1的IP地址和Default Route。
R1(config)#int fa0/0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config)#ip route 0.0.0.0 0.0.0.0 192.168.1.2
R1#show ip route
2、配置R2的两个接口的IP地址,并配置EIGRP。
R2(config)#int e0/0
R2(config-if)#ip address 192.168.1.2 255.255.255.0
R2(config)#int e0/1
R2(config-if)#ip address 192.168.2.2 255.255.255.0
R2(config)#router eigrp 1
R2(config-router)#network 192.168.1.0
R2(config-router)#network 192.168.2.0
3、配置R3的两个接口,并配置EIGRP和OSPF
R3(config)#ipv6 unicast-routing
R3(config)#int e0/0
R3(config-if)#ip address 192.168.2.1 255.255.255.0
R3(config)#int e0/1
R3(config-if)#ipv6 address 2001:DB8:33::3/64
R3(config-if)#ipv6 ospf 1 area 0
R3(config)#router eigrp
R3(config-router)#network 192.168.2.0
R3(config)#ipv6 router ospf 1
R3(config-rtr)#router-id 3.3.3.3
4、配置R4两个端口的IP地址,并配置OSPF。
R4(config)#ipv6 unicast-routing
R4(config)#int e0/0
R4(config-if)#ipv6 address 2001:DB8:33::4/64
R4(config-if)#ipv6 ospf 1 area 0
R4(config)#ipv6 unicast-routing
R4(config)#int e0/1
R4(config-if)#ipv6 address 2001:DB8:55::3/64
R4(config-if)#ipv6 ospf 1 area 0
R4(config)#ipv6 router ospf 1
R4(config-rtr)#router-id 4.4.4.4
5、配置R5的IP地址,并确认R5可以从R4收到RA Default Route。
R5(config)#int e0/0
R5(config-if)#ipv6 address 2001:DB8:55::4/64
R5#show ipv6 route
6、确认EIGRP和OSPF运行正常。
7、在R3上配置Tunnel 1
R3(config-if)#ipv6 address 2001:DB8:3::3/64 eui-64
R3(config-if)#ipv6 ospf 1 area 0
R3(config-if)#tunnel source 192.168.2.1
R3(config-if)#tunnel mode ipv6ip isatap
8、在R1上配置Tunnel 1
R1(config-if)#ipv6 address autoconfig
R1(config-if)#ipv6 enable
R1(config-if)#tunnel source 192.168.1.1
R1(config-if)#tunnel destination 192.168.2.1
R1(config-if)#tunnel mode ipv6ip
9、如果配置正确,R1将会从R3获取到IPv6地址,同时还会得到IPv6 Default Route。
10、现在从R1 Ping R5的IPv6地址。现在IPv4网络中的R1已经可以与IPv6网络中的R5进行通信。
11、通过Traceroute可以看到R1直接通过R3连接到了IPv6网络。
6to4 Tunnel
ISATAP比较适合单机连接到IPv6网络,并且现在大部分OS都支持ISATAP,比如Windows、Linux系统。如果
希望把两个IPv6网络通过IPv4连接起来,即点对点连接,则使用6to4比较合适。我们以下图为例,这是一个
全路由网络的示例 ,来演示一下如何配置6to4 Tunnel将两个独立的IPv6网络通过IPv4网络打通。
● R2和R3位于IPv4网络中,配置6to4 tunnel。
● R1和R5位于IPv6网络A中,通过R1连接到R2。
● R4和R6位于IPv6网络B中,通过R4连接到R3。
1、首先配置R2,这里我们使用Loopback0接口用作Tunnel Source,R2与R3的Loopback0接口配置静态路
由。然后还需要配置IPV6 OSPF,以及开启ipv6 unicast-routing。最后注意按规划正确配置各接口的IP
地址。
2、配置R3,R3需要配置的内容与R2相同,注意仔细按上图配置正确的IP地址。
3、配置R1和R4,同样需要开启ipv6 unicast-routing,配置ipv6 ospf,各接口配置正确的IPv6地址。
4、R5和R6同样需要开启ipv6 unicast-routing,配置ipv6 ospf,各接口配置正确的IPv6地址。
5、通过以上配置,6to4的演示环境就完成了,下面我们验证一下R5与R6是否可以通信,如果可以,说明
6to4 Tunnel配置成功。分别在R5和R6上进行以下测试。
● R5:
show ipv6 route ospf #查看R5的ospf external route
ping 2002.303.303.46::6 #ping R6的IPv6地址
traceroute 2002.303.303.46::6 #查看路由路径
● R6:
show ipv6 route ospf #查看R6的ospf external route
ping 2002.202.202.15::5 #ping R5的IPv6地址
traceroute 2002.202.202.15::5 #查看路由路径