• IPv6实例详解


    原文:http://www.qingsword.com/qing/749.html

    这篇文章简单的介绍一下IPv6技术,其中会涉及到IPv6的表示格式(格式和IPv4有很大不同,刚开始可能不习惯)、在Cisco路由接口上配 置IPv6地址(普通静态配置和静态EUI-64配置)、IPv6静态和动态路由配置,最后会介绍一个IPv4到IPv6过渡阶段的技术(IPv6- Over-IPv4隧道)。


    文章目录


    [*1*].IPv6概述

    * IPv6地址格式

    IPv6地址一共有128位长度(IPv4一共是32位长度),每16位为一个分组,每个16位分组写成4个十六进制数,一共分为8组,中间用冒号分隔,下面举个例子:

    1 2001:3CA1:010F:001A:121B:0000:0000:0010

    上面这个就是一个完整的IPv6地址格式,一共用冒号分为8组,每组4个十六进制数,每个十六进制数占4位,那么4个十六进制数字就是4X4=16位,即每组是16位,8组就是128位。

    从上面这个例子看起来IPv6地址非常冗长,不过IPv6有下面几种简写形式:

    1.IPv6地址中每个16位分组中前导零位可以去除做简化表示,但每个分组必须保留一位数字,请看下面的例子。

    1 /*完整版的IPv6地址*/
    2 2001:3CA1:010F:001A:121B:0000:0000:0010
    3  
    4 /*
    5  * 简写去除前导0简写形式,可以看到第三个和第四个分组去除了前导0,
    6  * 第七个和第八个分组因为全部是0,但必须保留一位数字。
    7  * 这还不是最简写形式,请接着往下看。
    8  */
    9 2001:3CA1:10F:1A:121B:0:0:10

    2.可以将冒号十六进制格式中相邻的连续零位合并,用双冒号表示”::”,并且双冒号在地址格式中只能出现一次,请看下面的例子。

    1 /*完整版的IPv6地址*/
    2 2001:3CA1:010F:001A:121B:0000:0000:0010
    3  
    4 /*去除前导零并将连续的零位合并。*/
    5 2001:3CA1:10F:1A:121B::10
    6  
    7 /*另一个完整的IPv6地址*/
    8 2001:0000:0000:001A:0000:0000:0000:0010
    9  
    10 /*
    11  * 可以看到虽然第二组和第三组也是连续的零位,
    12  * 但双冒号只能在IPv6的简写中出现一次,运用到了后面更长的连续零位上。
    13  * 这个地址还可以简写成这样2001::1A:0:0:0:10。
    14  */
    15 2001:0:0:1A::10
    16  
    17 /*
    18  * 需要将上面这个地址还原也很简单,只要看存在数字的分组有几个,
    19  * 然后就能推测出双冒号代表了多少个连续的零位分组。
    20  * 一共有5个保留了数字的分组,那么连续冒号就代表了3个连续的零位分组。
    21  */
    22  
    23 /*
    24  * 需要注意的是,只有前导零位可以去除,如果这个地址写成下面这样就是错误的,
    25  * 注意最后一组,不能去除1后面的那个0。
    26  */
    27 2001:0:0:1A::1  /*这是错误的写法*/

    * IPv6地址类型

    IPv6中的地址有单播地址(Unicast)、组播地址(Multicast)、任意播地址(Anycast)除此之外还包含一些特殊的地址,下面将介绍到。

    1.全局单播地址

    全局单播地址是全球可路由的,可以分配给任何个人和机构,IANA组织当前规定全局单播地址是2000::/3,然后IANA再将这个地址空间逐级分下去,/23是注册机构前缀,/32是ISP运营商前缀,/48是站点前缀,/64是子网前缀。

    有一点很重要,IPv6中没有广播地址。

    2.组播地址

    IPv6组播地址的格式是FF00::/8,其作用与IPv4中的组播地址相同。

    3.私有地址

    IPv6中的私有地址和IPv4的私有地址意义相同,都是用作本地使用,只具有本地意义,IPv6中有两种私有地址:

    • 链路本地地址(Link-local addresses):当两个支持IPv6特性的路由器直连时,直连的接口会自动给自己分配一个链路本地地址,其主要作用是在没有管理员配置时设备就能互 相通信。链路本地地址中的前10bit是FE80(转换成二进制就是1111 1110 10,一共十位),后54bit全0,最后64bit是EUI-64地址(稍后会介绍到),也就是说链路本地地址的前缀是FE80::/64。
    • 站点本地地址(Site-local addresses):站点本地地址现在已经被废除。出于历史原因,这里还是简单的介绍一下,站点本地地址的前10bit是FEC0,后54位是0,最后 64位是EUI-64地址,因为IPv6地址空间很大,所以这种类型的私有地址没有了存在的必要。

    4.回环地址

    IPv6中只有一个回环地址”0:0:0:0:0:0:0:1″,简写成”::1″,IPv6的回环地址功能和IPv4的127.0.0.0/8网段的回环地址功能是一样的。

    5.不确定地址

    IPv4中的不确定地址是用”0.0.0.0″表示,在IPv6中不确定地址使用”0:0:0:0:0:0:0:0″表示,简写成”::”。

    [*2*].Cisco路由器配置IPv6地址

    * 手工静态配置

    在GNS3中用一个小实例来简单演示一下的IPv6手工静态配置(必须在模拟器中给每个路由器添加至少一个快速以太网模块,否则两端会无法ping通,稍后介绍为什么):

    CCNA-IPv6手工静态配置实例

    R1配置:

    1 R1(config)#int s 0/0
    2 /*
    3  * 后面的/64代表子网掩码位,这是简写形式,这个地址的完整形式应该是:
    4  * 2008:0012:0012:0012:0000:0000:0000:0001/64
    5  */
    6 R1(config-if)#ipv6 address 2008:12:12:12::1/64
    7 R1(config-if)#no shut
    8 R1(config-if)#end
    9 R1#

    R2配置:

    1 R2(config)#int s 0/1
    2 R2(config-if)#ipv6 address 2008:12:12:12::2/64
    3 R2(config-if)#no shut
    4 R2(config-if)#end
    5  
    6 /*Ping测试,Ping一下R1*/
    7 R2#ping 2008:12:12:12::1
    8  
    9 Type escape sequence to abort.
    10 Sending 5,100-byte ICMP Echos to 2008:12:12:12::1,timeout is 2seconds:
    11 !!!!!   /*成功Ping通*/
    12  
    13 /*查看IPv6路由表*/
    14 R2#show ipv6 route
    15 IPv6 Routing Table - 4 entries
    16 Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
    17        U - Per-user Static route
    18 ....
    19 C   2008:12:12:12::/64 [0/0]
    20      via ::, Serial0/1
    21 L   2008:12:12:12::2/128 [0/0]
    22      via ::, Serial0/1
    23 L   FE80::/10 [0/0]
    24      via ::, Null0
    25 L   FF00::/8 [0/0]
    26      via ::, Null0
    27 R2#

    * 静态EUI-64配置

    首先还是通过一个实例来配置一下EUI-64,然后再介绍EUI-64是怎么得来的。

    注意:在GNS3中配置EUI-64的时候,必须给两个路由添加上至少一个快速以太网接口。这是GNS3的一个小缺陷,因为真实路由器默认都是存在以太网接口的,而EUI-64地址需要使用以太网接口的MAC地址。

    CCNA-IPv6静态EUI-64配置实例

    R1配置:

    1 R1(config)#int s 0/0
    2 /*
    3  * 静态EUI-64的配置方法,前64位手工指定,
    4  * 后64位地址使用eui-64地址来代替。
    5  */
    6 R1(config-if)#ipv6 add 2008:12:12:12::/64 eui-64
    7 R1(config-if)#no shut
    8 R1(config-if)#end
    9 R1#

    R2配置:

    1 R2(config)#int s 0/1
    2 R2(config-if)#ipv6 add 2008:12:12:12::/64 eui-64
    3 R2(config-if)#no shut
    4 R2(config-if)#end
    5 R2#

    配置完成后,查看一下R2的S0/1接口到底被分配了一个什么样的地址:

    1 R2#show ipv6 interface s 0/1
    2 Serial0/1 is up, line protocol is up
    3                   /*这里是这个接口的链路本地地址*/
    4   IPv6 is enabled, link-local address is FE80::CE01:6FF:FE04:10
    5  
    6 /*这个地方显示的就是我们配置的静态EUI-64地址*/
    7   Global unicast address(es):
    8     2008:12:12:12:CE01:6FF:FE04:10, subnet is 2008:12:12:12::/64 [EUI]
    9   Joined group address(es):
    10     FF02::1
    11     FF02::2
    12     FF02::1:FF04:10
    13   MTU is 1500 bytes
    14   ICMP error messages limited to one every 100 milliseconds
    15   ICMP redirects are enabled
    16   ND DAD is enabled, number of DAD attempts: 1
    17   ND reachable time is 30000 milliseconds
    18 R2#

    从上面的输出中可以看到R2的S0/1接口的IPv6地址是:

    2008:12:12:12:CE01:6FF:FE04:10/64

    这个地址的前64位是我们静态指定的(2008:12:12:12),后面64位(CE01:6FF:FE04:10)是按照下面的方法得到的:

    假设给路由器的fa1/0配置静态EUI-64地址,fa1/0接口的MAC地址是CE0106040010,前64位我们静态指定了 (2008:12:12:12),后面的64位会使用这个接口的MAC地址中间插入FFFE得出(CE0106 FFFE 040010),用冒号按4位十六进制一组分隔就是(CE01:06FF:FE04:0010),写成简写形式就是 (CE01:6FF:FE04:10),这就是上面的IPv6地址的由来。

    但是细心的朋友可能发现了,我们配置的R1和R2之间的连线是串行线路s0/0-s0/1,串行接口是没有MAC地址的,实际上,串行接口上配置 IPv6地址时,串行接口会使用路由器上最小的那个以太网接口的MAC地址来计算EUI-64地址(这就是为什么我要在GNS3中给R1和R2分别添加一 个fa1/0接口的原因,经过我的测试,如果不添加这个以太网接口,两边的路由会出现”链路本地地址”冲突的情况。也就是说,在GNS3中路由器没有添加 以太网接口时,默认情况下会两边使用相同的MAC地址计算EUI-64地址,这种情况在真实环境是不会发生的)

    [*3*].IPv6路由配置实例

    * 如何配置IPv6静态路由

    使用GNS3配置下面的拓扑(R1、R2、R3上面都必须添加一个以太网接口,这是GNS3的一个小缺陷,上面”静态EUI-64配置”中已经解释过。):

    CCNA-IPv6静态路由配置实例

    图中,R1开启了一个回环接口,这个回环接口下配置了4个IPv6地址,和IPv4不同的是,IPv6在一个接口下配置多个IP地址的时候不需要添 加Secondary参数;R3也开启了一个回环接口;在R1和R3上使用默认路由指向R2,在R2上使用路由汇聚,将去往R1回环接口的4个IPv6地 址汇聚成一条静态路由,R2上另外一条静态路由去往R3的回环接口。请看下面的配置:

    R1配置:

    1 /*路由默认不支持IPv6路由,需要用这条命令开启*/
    2 R1(config)#ipv6 unicast-routing
    3  
    4 /*配置与R2相连的串口IPv6地址*/
    5 R1(config)#int s 0/0
    6 R1(config-if)#ipv6 add 2008:12:12:12::1/64
    7 R1(config-if)#no shut
    8  
    9 /*在R1的lo0接口上配置了4个IPv6地址*/
    10 R1(config)#int lo 0
    11 R1(config-if)#ipv6 add 2008:1:1:8::1/64
    12 R1(config-if)#ipv6 add 2008:1:1:9::1/64
    13 R1(config-if)#ipv6 add 2008:1:1:A::1/64
    14 R1(config-if)#ipv6 add 2008:1:1:B::1/64
    15 R1(config-if)#no shut
    16 R1(config-if)#exit
    17  
    18 /*
    19  * 使用默认路由指向R2,
    20  * 其中的::/0等价于0:0:0:0:0:0:0:0/0。
    21  */
    22 R1(config)#ipv6 route ::/0 2008:12:12:12::2
    23 R1(config)#end
    24 R1#

    R2配置:

    1 R2(config)#ipv6 unicast-routing
    2 R2(config)#int s 0/0
    3 R2(config-if)#ipv6 add 2008:12:12:12::2/64
    4 R2(config-if)#no shut
    5 R2(config-if)#int s 0/1
    6 R2(config-if)#ipv6 add 2008:23:23:23::2/64
    7 R2(config-if)#no shut
    8 R2(config-if)#exit
    9  
    10 /*指向R3回环接口的静态路由*/
    11 R2(config)#ipv6 route 2008:3:3:3::/64 2008:23:23:23::3
    12  
    13 /*
    14  * 指向R1回环接口的汇聚静态路由,路由的汇聚和IPv4是一样的,
    15  * R1的回环接口上面的4个IPv6地址中的8、9、A、B都是十六进制数,
    16  * 将他们转换成二进制就是:
    17  * 8=10 00
    18  * 9=10 01
    19  * A=10 10
    20  * B=10 11
    21  * 二进制中前面两位是相同的,所以前缀长度64减去后面两位不同的,就是62了。
    22  */
    23 R2(config)#ipv6 route 2008:1:1:8::/62 2008:12:12:12::1
    24 R2(config)#end
    25 R2#

    R3配置:

    1 R3(config)#ipv6 unicast-routing
    2 R3(config)#int s 0/1
    3 R3(config-if)#ipv6 add 2008:23:23:23::3/64
    4 R3(config-if)#no shut
    5 R3(config-if)#int lo 0
    6 R3(config-if)#ipv6 add 2008:3:3:3::1/64
    7 R3(config-if)#no shut
    8 R3(config-if)#exit
    9 /*使用默认静态路由指向R2*/
    10 R3(config)#ipv6 route ::/0 2008:23:23:23::2
    11 R3(config)#end
    12 R3#
    13  
    14 /*测试Ping R1回环接口任意一个IP都可以通*/
    15 R3#ping 2008:1:1:A::1
    16  
    17 Type escape sequence to abort.
    18 Sending 5, 100-byte ICMP Echos to 2008:1:1:A::1, timeout is 2 seconds:
    19 !!!!!

    配置完成后全网测试都能Ping通。不要关闭这个实验,我们在这个实验的基础上继续配置下面的RIPng动态路由。

    * 如何配置IPv6 RIPng

    RIPng(Routing Information Protocol Next Generation,RIP下一代版本),是针对IPv6的RIP版本,和RIPv2非常相似,是一个距离矢量的路由协议,最大跳数是15,使用水平分 隔和毒性反转来阻止路由环路。RIPng使用多播地址FF02::9作为目的更新地址,发送更新使用UDP协议的521端口。

    在上面一个实例的基础上,删除R1、R2、R3上面配置的静态路由,然后配置RIPng。

    R1配置:

    1 /*删除上一个实例中配置的默认路由*/
    2 R1(config)#no ipv6 route ::/0
    3  
    4 /*启用RIPng协议,后面的test1是自定义的名称,只具有本地意义*/
    5 R1(config)#ipv6 router rip test1
    6 R1(config-rtr)#exit
    7  
    8 R1(config)#int lo 0
    9  
    10 /*和IPv4的RIP不同,RIPng是直接在接口下开启RIPng*/
    11 R1(config-if)#ipv6 rip test1 enable
    12 R1(config-if)#int s 0/0
    13 R1(config-if)#ipv6 rip test1 enable
    14 R1(config-if)#end
    15 R1#

    R2配置:

    1 R2(config)#no ipv6 route 2008:1:1:8::/62
    2 R2(config)#no ipv6 route 2008:3:3:3::/64
    3 R2(config)#ipv6 router rip test2
    4 R2(config-rtr)#int s 0/0
    5 R2(config-if)#ipv6 rip test2 enable
    6 R2(config-if)#int s 0/1
    7 R2(config-if)#ipv6 rip test2 enable
    8 R2(config-if)#end
    9 R2#

    R3配置:

    1 R3(config)#no ipv6 route ::/0
    2 R3(config)#ipv6 router rip test3
    3 R3(config-rtr)#int s 0/1
    4 R3(config-if)#ipv6 rip test3 enable
    5 R3(config-if)#int lo 0
    6 R3(config-if)#ipv6 rip test3 enable
    7 R3(config-if)#end
    8 R3#

    网络收敛后,在R3上查看IPv6路由表:

    1 R3#show ipv6 route
    2 IPv6 Routing Table - 12 entries
    3 Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
    4        U - Per-user Static route
    5 ....
    6 /*这四条R开头的是R1的回环接口路由条目*/
    7 R   2008:1:1:8::/64 [120/3]
    8      via FE80::CE01:DFF:FE4C:10, Serial0/1
    9 R   2008:1:1:9::/64 [120/3]
    10      via FE80::CE01:DFF:FE4C:10, Serial0/1
    11 R   2008:1:1:A::/64 [120/3]
    12      via FE80::CE01:DFF:FE4C:10, Serial0/1
    13 R   2008:1:1:B::/64 [120/3]
    14      via FE80::CE01:DFF:FE4C:10, Serial0/1
    15  
    16 C   2008:3:3:3::/64 [0/0]
    17      via ::, Loopback0
    18 L   2008:3:3:3::1/128 [0/0]
    19      via ::, Loopback0
    20  
    21 /*这里是R1和R2相连的那个网段的路由条目*/
    22 R   2008:12:12:12::/64 [120/2]
    23      via FE80::CE01:DFF:FE4C:10, Serial0/1
    24 C   2008:23:23:23::/64 [0/0]
    25      via ::, Serial0/1
    26 L   2008:23:23:23::3/128 [0/0]
    27      via ::, Serial0/1
    28 L   FE80::/10 [0/0]
    29      via ::, Null0
    30 L   FF00::/8 [0/0]
    31      via ::, Null0
    32 R3#
    33  
    34 /*
    35  * RIPng的条目和RIP有很大不同,其中跳数比IPv4下运行RIP多1,
    36  * 在默认情况下,进入路由表之前RIPng度量值就已经加了1。
    37  *
    38  * 另外可以看到,via也就是下一跳地址不是邻居的接口IPv6地址,
    39  * 这个地址是邻居接口的本地链路地址,本地链路地址上面有介绍到,
    40  * 是使用FE80::/64前缀加上EUI-64地址得到的。
    41  */

    [*4*].配置IPv6-Over-IPv4隧道实例

    在下面这个拓扑图中,R1和R3上面开启了回环接口来模拟IPv6网络,R1-R2-R3相连的串行接口运行的是IPv4网络,各设备的IP地址如图所示。

    CCNA-IPv6-Over-IPv4隧道配置实例

    (同上面几个实例一样,一定不要忘记在GNS3中给各个路由添加一个以太网接口,虽然这里并没有使用这个以太网接口,但是链路本地地址的EUI-64部分需要这个以太网接口的MAC地址)

    对于这样的拓扑结构,两端运行的是IPv6网络,中间是IPv4网络,可以使用一种叫做Tunneling(隧道)的技术,来实现两端的IPv6网络能够跨越IPv4网络进行通信:

    R1配置:

    1 /*开启IPv6支持*/
    2 R1(config)#ipv6 unicast-routing
    3 R1(config)#int lo 0
    4 R1(config-if)#ipv6 add 2008:1:1:1::1/64
    5 R1(config-if)#no shut
    6 R1(config-if)#int s 0/0
    7 R1(config-if)#ip add 12.1.1.1 255.255.255.0
    8 R1(config-if)#no shut
    9 R1(config-if)#exit
    10  
    11 /*配置去往R2的IPv6默认路由*/
    12 R1(config)#ip route 0.0.0.0 0.0.0.0 12.1.1.2
    13  
    14 /*创建一个隧道接口*/
    15 R1(config)#int tunnel 0
    16  
    17 /*隧道的源IP地址是R1的s0/0*/
    18 R1(config-if)#tunnel source 12.1.1.1
    19  
    20 /*
    21  * 隧道的目的IP地址是R3的s0/1,为了保证隧道两端能够正常通信,
    22  * 隧道的源和目的必须是路由可达的(IPv4的路由要可达)。
    23  */
    24 R1(config-if)#tunnel destination 23.1.1.3
    25  
    26 /*
    27  * 配置隧道模式,ipv6ip就是IPv6-Over-IPv4模式,
    28  * 也就是将IPv6的包封装在IPv4的包中。
    29  */
    30 R1(config-if)#tunnel mode ipv6ip
    31  
    32 /*给隧道接口配置一个IPv6地址*/
    33 R1(config-if)#ipv6 add 2008:13:13:13::1/64
    34 R1(config-if)#exit
    35  
    36 /*配置IPv6默认路由,指向R3上面的隧道接口地址*/
    37 R1(config)#ipv6 route ::/0 2008:13:13:13::3
    38 R1(config)#end
    39 R1#

    R2配置:

    1 R2(config)#int s 0/0
    2 R2(config-if)#ip add 12.1.1.2 255.255.255.0
    3 R2(config-if)#no shut
    4 R2(config-if)#int s 0/1
    5 R2(config-if)#ip add 23.1.1.2 255.255.255.0
    6 R2(config-if)#no shut
    7 R2(config-if)#end
    8 R2#

    R3配置:

    1 R3(config)#ipv6 unicast-routing
    2 R3(config)#int s 0/1
    3 R3(config-if)#ip add 23.1.1.3 255.255.255.0
    4 R3(config-if)#no shut
    5 R3(config-if)#int lo 0
    6 R3(config-if)#ipv6 add 2008:3:3:3::3/64
    7 R3(config-if)#no shut
    8 R3(config-if)#exit
    9 R3(config)#ip route 0.0.0.0 0.0.0.0 23.1.1.2
    10 R3(config)#int tunnel 0
    11 R3(config-if)#tunnel source 23.1.1.3
    12 R3(config-if)#tunnel destination 12.1.1.1
    13 R3(config-if)#tunnel mode ipv6ip
    14 R3(config-if)#ipv6 add 2008:13:13:13::3/64
    15 R3(config-if)#exit
    16 R3(config)#ipv6 route ::/0 2008:13:13:13::1
    17 R3(config)#end
    18 R3#

    配置完成后在R3上面Ping测试:

    1 /*Ping R1的隧道地址,成功*/
    2 R3#ping 2008:13:13:13::1
    3  
    4 Type escape sequence to abort.
    5 Sending 5, 100-byte ICMP Echos to 2008:13:13:13::1, timeout is 2 seconds:
    6 !!!!!
    7 Success rate is 100 percent (5/5), round-trip min/avg/max = 28/59/76 ms
    8  
    9 /*Ping R1的回环接口地址,成功*/
    10 R3#ping 2008:1:1:1::1
    11  
    12 Type escape sequence to abort.
    13 Sending 5, 100-byte ICMP Echos to 2008:1:1:1::1, timeout is 2 seconds:
    14 !!!!!
    15 Success rate is 100 percent (5/5), round-trip min/avg/max = 56/92/148 ms
    16  
    17 /*Ping R1的串口地址,成功*/
    18 R3#ping 12.1.1.1
    19  
    20 Type escape sequence to abort.
    21 Sending 5, 100-byte ICMP Echos to 12.1.1.1, timeout is 2 seconds:
    22 !!!!!
    23 Success rate is 100 percent (5/5), round-trip min/avg/max = 48/91/140 ms
    24 R3#

    IPv6-Over-IPv4隧道实验完成,两端的IPv6网络可以穿越IPv4网络进行通信。

  • 相关阅读:
    多个手机号逗号分开
    字符转码
    短信发送AZDG加密算法
    判断手机所属三大运营商 移动、联通、电信
    MD5加密 时间差 流水号等方法
    VS2012的创建单元测试功能
    Oracle数据库操作类及连接方法
    python生成器,函数,数组
    javascript的单线程
    linux下/var/run目录下.pid文件的作用
  • 原文地址:https://www.cnblogs.com/qiangupc/p/4090122.html
Copyright © 2020-2023  润新知