一、ipv6 无状态地址管理
与IPv4通过DHCP下发地址方式不同的是,IPv6地址可以不通过DHCP方式获取。归功于IPv6所支持的无状态地址配置机制,由RFC4862定义。
1.1 IPv6的两种单播地址类型
1)本地链路地址
IPv6的地址类型。IPv6单播地址可以分为本地链路地址和全局地址。
IPv6本地链路地址以fe80::/10开头,通常由系统自动为每个网络设备生成。例如下图中的fe80::250:56ff:fe86:1b10就是IPv6 link local地址。
有了这个地址,在同一个交换机下面的机器就能直接通过这个地址通讯啦,不需要再配置别的地址。
2)全局地址
全局地址是通过IPv6前缀下发所拿到的一个全局可达的IPv6地址,例如下图中的fd4d:e0f1:f1db::250:56ff:fe86:1b10。有了这个全局IPv6地址,就能跟世界上任何一个IPv6全局地址通讯了,类似于通俗说的公网地址。所以IPv6本地链路地址只有本地链路可达,而IPv6全局地址则所有IPv6网络都可达。
1.2 IPv6无状态地址配置
1)EUI-64网络唯一号
如果仔细观察两个地址,会发现两个地址的后64位完全一样,都是250:56ff:fe86:1b10!这可不是巧合,这就是IPv6的一种地址生成机制。后面这串64位的地址叫EUI-64网络唯一号。这个地址就是通过mac地址和一定的规则变换来的。
转换规则如下,再加上fe80::/64前缀就是本地链路地址fe80::250:56ff:fe86:1b10
2)IPv6无状态地址配置
既然知道IPv6地址后64bit的网络唯一号是如何生成的之后,看看这前64bit的前缀是怎么下发的了。首先当这个网络设备启动之后,会向路由器发送一个路由请求RS(Router Solicitation)。地址都没配好呢怎么知道路由器在哪?其实这个请求发往的目标IP地址是FF02::2,这是一个路由器多播地址,是一个约定俗成的地址,如果是一个IPv6路由器,就得监听这个多播地址。那这个地址对应的mac是33:33:00:00:00:02,这也是根据规定来的,多播地址mac开头都是33:33,后面则是多播地址的最后32位。路由器受到RS请求之后,会回复一个RA(Router Advertisement)消息,这个消息里面就会带有一个IPv6地址前缀啦,然后系统会把前缀和EUI64合并生成一个全局IPv6地址。
总结:主机或路由器从RA报文里获得64位前缀,然后通过EUI-64规范自动生成64bit的接口标识,然后得到IPV6单播地址。默认情况下,路由器发布RA报文是处于抑制状态(也就是不发送),避免占用链路带宽。需要使用命令undo ipv6 nd ra halt,解除抑制RA报文发送。路由器发现示例:如下图
1.3 无状态地址配置两种情况
主动(RA),被动(RS)
1.3.1 路由器通告RA(router advertisement)
报文:路由器周期组播发送RA报文,报文中会含有网络的前缀消息,以及其他标志位信息。RA报文type字段值=134.
-
在R1接口在配置了IPV6单播地址2012::/64,并且开启接口RA报文。type=134.路由器会周期发送RA报文,里面包含前缀2012::/64。
-
报文的源IP为AR1的G0/0/0的链路本地地址,目的IPV6地址为FF02::1所有节点组播地址;源MAC是AR1的MAC,目的MAC是,目的IP对应的组播MAC(3333-0000-0001)
RA报文中的Flags字段:其中的含义
M位:表示是否需要使用DHCPv6来获取IPV6单播地址
M=0(默认)表示使用非DHCPv6来获取IPV6单播地址
M=1,表示使用DHCPv6来获取IPV6单播地址
O位:表示是否需要使用DHCPv6来获取其他参数(DNS等等)
O=0(默认)表示不需要使用DHCPv6来获取其他参数
O=1表示使用DHCPv6获取其他参数
前缀字段里面的Flags
L位:表示该RA消息前缀是否分配给本地链路
L=1(默认)表示该RA消息中前缀是分配给本地链路
L=0表示…
A位:表示该前缀能不能用于无状态自动配置
A=1(默认)表示该前缀可以用于无状态自动配置
A=0表示该前缀不能被用于无状态自动配置
以上字段中值都可以通过命令修改
1.3.2 路由器请求RS(router solicitation)
报文:为了尽快获得前缀进行通信,主机可以发送RS报文来请求,路由器收到后会回复RA报文,RS报文中type字段=133.
RS报文,type=133.。源IP地址为发这个报文的主机链路本地地址(前提是通过DAD检测),目的地址为FF02::1(所以组播节点地址)。产品手册上为FF02::2
路由器发现示例
源MAC为主机MAC。目的MAC为FF02::1对应的组播MAC:3333-0000-0001.通过RA报文获取的路由前缀,经过EUI-64后,会对该地址进行DAD检测,通过了就可以使用,没通过就需要手工配置。