<转载请注明出处>缓存
1. ND协议介绍安全
邻居发现协议(Neighbor Discovery Protocol,如下称ND协议)是IPv6的一个关键协议,能够说,ND协议是IPv4某些协议在IPv6中综合起来的升级和改进,如ARP、ICMP路由器发现和ICMP重定向等协议。固然,做为IPv6的基础性协议,ND还提供了其余功能,如前缀发现、邻居不可达检测、重复地址检测、地址自动配置等。服务器
1.1 IPv6协议格式网络
Version(4-bit):IP版本,该字段值为6并发
Traffic Class(8-bit):流量分类,与IPv4包头的TOS相似ide
Flow Label(20-bit):流标签,用来标记IPv6数据包的一个流wordpress
Payload Length(16-bit):有效载荷的长度,有效载荷为紧跟IPv6包头的数据包的其余部分oop
Next Header(8-bit):处理选项字段,分段,安全,移动性,松散源路由,记录路由等的新方式。该字段在承载ND报文时字段值为58(ICMPv6)。该字段详细字段值对应以下表学习
Value | Type of Header |
0 | Hop-by-Hop Options Header |
6 | TCP |
17 | UDP |
41 | Encapsulated IPv6 Header |
43 | Routing Header |
44 | Fragment Header |
50 | Encapsulating Security Payload |
51 | Authentication Header |
58 | ICMPv6 |
59 | No next header |
60 | Destination Options Header |
Hop Limit:(8-bit):定义IP数据包所能通过的最大跳数,每跳一次将此值减1spa
Source Address(128-bit):IP数据包的源地址
Destination Address(128-bit):IP数据包的目的地址
1.2 ND报文类型
ND协议定义的报文使用ICMP承载,其类型包括:路由器请求报文(RS)、路由器通告(RA)报文、邻居请求报文(NS)、邻居通告报文(NA)和重定向报文。
1.2.1 路由器请求报文RS Router Solicitation Message
主机启动后,经过RS消息向路由器发出请求,指望路由器当即发送RA消息响应。RS报文格式以下图
同时,IPv6报文头中的字段要求以下:
1.2.2 路由器通告报文RA Router Advertisement Message
路由器周期性的发布RA消息,其中包括前缀和一些标志位的信息,或者以RA报文响应路由器请求报文RS。RA的报文格式以下图。
表示发送该RA报文的路由器做为缺省路由器的生命周期。Router Lifetime最长9000秒小时,缺省值30分钟。若是该字段为0时,表示该路由器不能做为缺省路由器,但RA报文的其余信息仍然有效。
发送NS报文后,在获得邻居可达性确认后,认为邻居可达的时间,0表示不指定。路由器在接口上经过发送RA报文,让同一链路上的全部节点都使用相同的可达时间。若Reachable Time为0,表示路由器不指定该字段参数。该值可配置,RA报文中缺省值为0。
重传NS报文的时间间隔,用于邻居不可达检测和地址解析。若该值为0,表示路由器不指定该字段参数。该值可配置,RA报文缺省值为0。
同时,IPv6报文头中的字段要求以下:
1.2.3 邻居请求报文NS Neighbor Solicitation Message
主机经过NS消息能够获得邻居的链路层地址、检查邻居是否可达、重复地址检测等。
请求目标的IP地址,不能是组播地址,能够是本地链路、本地站点、全局地址。
同时,IPv6报文头中字段要求以下:
须要说明,若是源地址为未指定地址,则目的地址应为被请求节点的组播地址,而且没有源链路层地址选项。
1.2.4 邻居通告报文NA Neighbor Advertisement Message
NA报文是主机对NS的响应报文,同时主机在链路层地址变化时也能够主动发送NA消息,以通知相邻节点本身的链路层地址或者角色发生改变。
表示NA报文发送者的角色。置位表示发送者是路由器,复位表示发送者为主机。
置位表示为响应单播NS发送的NA报文。在NUD探测中,S标记做为邻居可达性确认标记;在组播通告或非请求单播通告中,S标记必须清零,如DAD检测中NS报文用的是被请求节点的组播地址,当地址冲突时,回应的NA报文的S标记须要清零。
1-表示须要用目标链路层地址选项中的链路层地址,来更新邻居缓存表。
0-只有在链路层地址未知时,才能用目标链路层地址选项来更新邻居缓存表。
若是是针对NS而发送NA,该字段直接拷贝NS报文目标地址;若是不是针对NS发送的NA,该地址是链路层地址发生改变的网络节点的IP地址。目标地址不能是组播地址。
同时,IPv6报文头中字段要求以下:
1.2.5 重定向报文 Redirect Message
路由器经过重定向报文通知主机到目的地有更好的下一跳地址,或者通知主机目的地址为本网段邻居。
到达目的地址的下一跳地址。若是目标为路由器(本地链路外的报文),必须使用路由器的本地链路地址;若是是主机(本地链路报文),目标地址和目的地址必须一致。
同时,IPv6报文头中字段要求以下:
1.3 ND主要功能
1.3.1 路由器发现
路由器发现是指主机怎样定位本地链路上路由器和肯定其配置信息的过程,主要包含如下三方面的内容:
在路由器通告报文RA中承载着路由器的相关信息,ND协议经过RS和RA的报文交互完成路由器发现、前缀发现和参数发现三大功能。协议交互主要有两种状况:主机请求触发路由器通告和路由器按期发送路由器通告。
1.3.2 地址解析
地址解析是指某节点在知道目的节点IP地址的状况下,肯定目的链路层地址的过程。
当一个节点须要获得同一本地链路上另一个节点的链路层地址时,须要进行地址解析,该机制相似于IPv4中的ARP。 ND协议用NS和NA报文完成IPv6地址到链路层地址的解析,解析后的链路层地址和IP地址等信息用来创建节点的一个邻居缓存表项。
1.3.3 邻居不可达检测NUD
邻居不可达检测是节点怎样肯定邻居不可达状态的过程。ND协议用NS和NA报文来验证邻居节点的可达性。
1.3.4 重复地址检测DAD
重复地址检测是节点肯定即将使用的地址是否被另外一节点使用的过程。
在节点自动配置某个接口的IPv6单播地址以前,必须在本地链路范围内验证要使用的临时地址是惟一的,而且未被其余节点使用过。ND协议使用NS/NA报文完成该功能。
2. ND常见***
2.1 重复地址检测DAD***
在结点使用无状态协议自动配置时发送NS报文,NS报文中附带告终点准备使用的地址target address,***者伪造NA报文,回复称该地址已被使用,迫使结点更换target address,如此反复,结点将没法完成无状态协议自动配置。
针对DAD***,能够采用ND snooping,DHCP snooping,ND detection技术防范。
DHCP snooping与IPv4同样,经过监听DHCP的交互进程,得到用户的IP,MAC,链接的交换机端口号的绑定表项。ND snooping与前者很相似,监听ND协议的DAD交互过程,获取用户的IP、MAC、Port的对应关系。
ND Detection是H3C在ND防***方面的创新技术,经过结合已经创建的绑定表项,这个绑定表项能够是使用ND snooping,DHCP snooping,手工来进行配置的,经过比较已经获取到的可信表项中的IP与MAC地址,对ND报文进行过滤,丢弃异常的报文。相比单纯使用ACL进行的用户绑定,ND Detection技术结合绑定表项对ND报文进行过滤,可以较好的防护ND***。
2.2 地址欺骗
地址欺骗相似IPv4中的ARP欺骗,***者伪造RS/NS/NA报文来修改受害主机或网关上受害主机的MAC地址,形成受害主机没法与网络进行正常的通讯。
防范方法与DAD***防范方法相似。
2.3 网络配置参数***(RA伪造***)
RA可以携带不少网络配置信息,包括默认路由器,网络前缀列表,是否使用DHCP服务器进行有状态地址分配等网络配置的关键信息。若是受害者接收了虚假的RA信息,会形成网络配置错误,从而引起欺骗***。
防范方法为设置RA信任端口,未来自不信任端口的RA报文丢弃。
2.4 针对网关的泛洪***
经过发送大量的NS/RS报文,形成网关的表项溢出。
为了不网关的ND表项被异常的ND报文打满溢出形成DoS***,在网关上可以针对端口配置最大的ND表项学习数量,可以缓解此类***。
3. ND snooping实现机制
如下为简单翻译结果,详细请参考 IETF草案Control Packet Snooping Based Binding draft-bi-savi-cps-00.txt 8.3节
3.1 DAD交互过程
根据本文1.3.4重复地址检测DAD的描述,主机在自动配置或手动配置IPv6地址时,会经过NS/NA报文检测是否存在重复地址。详细步骤以下:
3.2 ND snooping监听过程
ND snooping则监听DAD交互过程,产生MAC-IP对应表filter table.步骤以下:
3.3 ND snooping流程图