今天给大家介绍一下IPv6的一大特性——SLAAC。本文从SLAAC的原理出发,详细介绍了SLAAC的原理及RS和RA包的内容,最后通过简单的实验进行了SLAAC的配置。
阅读本文,您需要对IPv6相关基础知识有一定了解,如果对此还需要学习,欢迎关注我的博客,在我之前的文章里有关于IPv6的详细介绍。相关链接如下:IPv6报文格式讲解及其科学性探究、IPv6地址简介、IPv6各地址计算方式汇总、IPv6地址解析详解、IPv6邻居状态与邻居检测机制。
所谓LSAAC,即Stateless Address Autoconfiguration,无状态地址自动配置。SLAAC技术是自动获取IP地址的技术,在IPv6中,除了配置使用HDCP外,还支持使用SLAAC技术获取IPv6地址,以达到设备即插即用的效果。
SLAAC的实现依托于NDP协议中的RS报文和RA报文。在IPv6的NDP协议中,共有五种报文,而RS报文,即Router Solicitation,路由器请求报文,RA报文,即Router Advertisement,路由器公告报文。
IPv6可以设置一个网络设备上线后,先发送RS报文,在其上层路由器上可以配置定时发送RA报文。在一个网络设备收到RA报文后,就可以得到该链路上的IPv6地址前缀,之后,该网络设备就会根据IPv6地址范围和EUI64规则计算出一个IPv6地址给自己使用。因此,利用RS和RA报文,一个IPv6的网络设备就可以实现无状态IP地址配置了。
(一)RS报文
RS报文主要用来请求链路上相连的路由器发送RA报文。对于RS的发送方而言,此时必须先要有一个链路本地地址,RS报文的源IP地址就是该链路上的LLA地址,而目的地址是一个组播地址:ff02::1。由于所有的IPv6路由器都会监听这个组播地址,因此收到RA报文的路由器会向其通告RA报文。
Wireshark抓取RS报文如下:
(二)RA报文
对路由器而言,RA报文的源IP地址也是自己的本地链路地址,而目的地址也是ff02::1。
Wireshark抓取RA报文如下:
RA报文除了携带本地网段信息外,还将携带两个重要的参数,就是在上图中标红的参数。路由器可以设置自己的接口IP地址作为其他网络设备的网关。Router LifeTime参数就是将自己作为网关的生存时间,而Flags就是将自己作为网关的优先级。通过合适的修改这两个参数,可以实现类似于IPv6 VRRP的功能。
下面,我将通过一个实验,介绍一下IPv6 SLAAC的配置
实验拓扑如下所示:
现在要求在R1、R2和R3之间运行SLAAC,当R1上线后,R2和R3向R1发定期通告RA报文,使得R1能够自动获取IPv6地址。并且设置类似VRRP的功能,将R3作为R1的主网关,当R3宕机后,自动将网关切换到R2。
(一)IPv6配置相关命令
要使得路由器开启IPv6,则必须首先在全局模式开启IPv6,然后再接口模式下使能IPv6。命令如下:
ipv6
interface GigabitEthernet0/0/0
ipv6 enable
(二)R3上RA相关配置
interface GigabitEthernet0/0/0
ipv6 enable
ipv6 address 3000::FFFF/64
ipv6 nd ra Max-interval 4
ipv6 nd ra router-lifetime 10
ipv6 nd ra preference high
undo ipv6 nd ra halt
R3 的G0/0/0接口上配置如上,要实现本实验需求,首先在接口上配置一个IPv6的地址。在华为的设备中,默认接口不发送RA报文,因此需要执行命令:undo ipv6 nd ra halt,来使其发送RA报文并对RS报文进行相应。此外,默认设置下,RA报文中路由生存时间为1800s,发送周期为200s-300s之间的随机数值。而如果按照默认配置,则如果R3宕机,R1需要很长时间才会感知到,因此通过命令: ipv6 nd ra Max-interval 4 和 ipv6 nd ra router-lifetime 10 使得路由生存时间为10s,RA报文发送间隔为4s。以实现网关的快速切换。
(三)R1上RS相关配置
除了上述配置外,要实现R1将收到的RA报文产生的路由作为默认地址,还必须在接口G0/0/0上,执行以下命令:
ipv6 address auto global default
到此为止,所有的配置就已经完成了。
最后,给大家验证一下上面的配置结果。
(一)实验过程抓包分析
首先,我们抓包看一下当R1上线后,究竟发生了什么。抓包如下所示:
如上图所示,第10个包时接口上线后的第一个数据包,(在这里使用shutdown和undo shutdown来模拟设备上线)可以看出,首先,R1会生成本地链路地址,然后发送NS报文进行地址冲突检测。之后没有收到回应的NA报文,因此R1连发三个RA报文(11、15、18),之后收到了R2和R3向其通告的RA报文(28、29)。(注:在我的实验中,因为中间交换机的缘故,RS报文引发的RA报文并没有发送到本接口上)最后,R1路由器对由RA报文生成的两个IPv6地址发NS报文进行本地地址冲突检测,没有收到NA报文,因此这两个地址可以正常使用。
(二)R1上效果
最后,我们在R1上执行命令:
display ipv6 routing-table ::
dis ipv6 int g0/0/0
来查看一下配置结果
最后,将R3的G0/0/0口断开,发现在R1上确实能够实现网关的自动切换。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200/article/details/118682784