邻居发现(Neighbor Discovery)协议及***防范

<转载请注明出处>缓存

1. ND协议介绍安全

邻居发现协议(Neighbor Discovery Protocol,如下称ND协议)是IPv6的一个关键协议,能够说,ND协议是IPv4某些协议在IPv6中综合起来的升级和改进,如ARP、ICMP路由器发现和ICMP重定向等协议。固然,做为IPv6的基础性协议,ND还提供了其余功能,如前缀发现、邻居不可达检测、重复地址检测、地址自动配置等。服务器

1.1 IPv6协议格式网络

NDP-graphic1

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报文格式以下图

NDP-graphic2

  • Type 类型字段,值133
  • Code 代码字段,值0
  • Options 选项字段
    • 源链路层地址选项 仅用于已编址的链路层可用于RS报文的只有源链路层地址选项,代表该报文发送者的链路层地址。若是IPv6头的源地址为未指定地址,则不能包括该选项

同时,IPv6报文头中的字段要求以下:

  • Hop Limit 值255,保证是本地链路上的报文
  • Source Address 发送接口的本地链路地址或未指定地址
  • Destination Address 本地链路中全部路由器的组播地址FF02::2

1.2.2 路由器通告报文RA Router Advertisement Message

路由器周期性的发布RA消息,其中包括前缀和一些标志位的信息,或者以RA报文响应路由器请求报文RS。RA的报文格式以下图。

NDP-graphic3

  • Type 类型字段,值134
  • Code 代码字段,值0
  • M管理地址配置标识(Managed address configuration)
    • 0-无状态地址分配,客户端经过无状态协议(如ND)得到IPv6地址;
    • 1-有状态地址分配,客户端经过有状态协议(如DHCPv6)得到IPv6地址。
  • O 其它有状态配置标识(Other stateful configuration)
    • 0-客户端经过无状态协议(如ND)获取除地址外的其余配置信息;
    • 1-客户端经过有状态协议(如DHCPv6)获取除地址外的其余配置信息,如DNS、SIP服务器信息。协议规定,若M标记置为1,则O标记也应置为1,不然无心义。
  • Router Lifetime 缺省路由器的生命周期(单位:秒)

表示发送该RA报文的路由器做为缺省路由器的生命周期。Router Lifetime最长9000秒小时,缺省值30分钟。若是该字段为0时,表示该路由器不能做为缺省路由器,但RA报文的其余信息仍然有效。

  • Reachable Time 可达时间(单位:毫秒)

发送NS报文后,在获得邻居可达性确认后,认为邻居可达的时间,0表示不指定。路由器在接口上经过发送RA报文,让同一链路上的全部节点都使用相同的可达时间。若Reachable Time为0,表示路由器不指定该字段参数。该值可配置,RA报文中缺省值为0。

  • Retrans Timer 重传定时器(单位:毫秒)

重传NS报文的时间间隔,用于邻居不可达检测和地址解析。若该值为0,表示路由器不指定该字段参数。该值可配置,RA报文缺省值为0。

  • Options 选项字段
    • 源链路层地址选项 仅用于已编址的链路层。当路由器正在多个链路层地址上进行负荷分担时,要忽略该选项。
    • MTU选项 链路的可变MTU
    • 前缀信息选项 用于地址自动配置的前缀信息,可包含多个
    • 路由信息选项 用于主机生成缺省路由,代表前缀经过该路由器是可达的

同时,IPv6报文头中的字段要求以下:

  • Source Address 必须是发送接口的本地链路地址
  • Destination Address 组播地址FF02::1,或发送RS请求报文的主机的单播地址

1.2.3 邻居请求报文NS Neighbor Solicitation Message

主机经过NS消息能够获得邻居的链路层地址、检查邻居是否可达、重复地址检测等。

NDP-graphic4

  • Type 类型字段,值135
  • Code 代码字段,值0
  • Target Address 目标地址,16bytes

请求目标的IP地址,不能是组播地址,能够是本地链路、本地站点、全局地址。

  • Options 选项字段
    • 源链路层地址选项 ,和RS报文的选项相同,可用于NS报文的只有源链路层地址选项。源链路层选项仅用于已编址的链路层,若是IPv6头的源地址为未指定地址,则不能包括该选项。

同时,IPv6报文头中字段要求以下:

  • Source Address 发送接口的地址或未指定地址(DAD检测)
  • Destination Address 目的节点单播地址或目的节点地址对应的请求节点组播地址

须要说明,若是源地址为未指定地址,则目的地址应为被请求节点的组播地址,而且没有源链路层地址选项。

1.2.4 邻居通告报文NA Neighbor Advertisement Message

NA报文是主机对NS的响应报文,同时主机在链路层地址变化时也能够主动发送NA消息,以通知相邻节点本身的链路层地址或者角色发生改变。

NDP-graphic5

  • Type 类型字段,值136
  • Code 代码字段,值0
  • R 路由器标记(Router Flag)

表示NA报文发送者的角色。置位表示发送者是路由器,复位表示发送者为主机。

  • S 请求标记(Solicited Flag)

置位表示为响应单播NS发送的NA报文。在NUD探测中,S标记做为邻居可达性确认标记;在组播通告或非请求单播通告中,S标记必须清零,如DAD检测中NS报文用的是被请求节点的组播地址,当地址冲突时,回应的NA报文的S标记须要清零。

  • O 重载标记(Override Flag)

1-表示须要用目标链路层地址选项中的链路层地址,来更新邻居缓存表。

0-只有在链路层地址未知时,才能用目标链路层地址选项来更新邻居缓存表。

  • Target Address 目标地址,16bytes

若是是针对NS而发送NA,该字段直接拷贝NS报文目标地址;若是不是针对NS发送的NA,该地址是链路层地址发生改变的网络节点的IP地址。目标地址不能是组播地址。

  • Options 选项字段,只能是目的链路层地址选项,通告发送者的链路层地址。

同时,IPv6报文头中字段要求以下:

  • Source Address 必须是发送接口的单播地址
  • Destination Address 单播地址或者全部节点的组播地址(FF02::1)

1.2.5 重定向报文 Redirect Message

路由器经过重定向报文通知主机到目的地有更好的下一跳地址,或者通知主机目的地址为本网段邻居。

NDP-graphic6

  • Type 类型字段,值137
  • Code 代码字段,值0
  • Target Address 目标地址,16bytes

到达目的地址的下一跳地址。若是目标为路由器(本地链路外的报文),必须使用路由器的本地链路地址;若是是主机(本地链路报文),目标地址和目的地址必须一致。

  • Destination Address 目的地址,即IPv6头部的目的地址,16bytes
  • Options 选项字段
    • 目标链路层地址选项:新下一跳的链路层地址。
    • 重定向头选项:触发报文尽量多的部分,但不该使重定向报文超过1280bytes。

同时,IPv6报文头中字段要求以下:

  • Source Address 发送接口的本地链路地址
  • Destination Address 触发重定向的数据报文的单播地址

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报文检测是否存在重复地址。详细步骤以下:

  • 主机发送NS请求,并设置以下字段值
    • source address为0.0.0.0
    • desnation address为ff02::1(组播地址)
    • target address为主机准备配置的地址,DAD即检测这个地址是否在网络上有重复
    • Hop Limit字段值为255,主要是为了防止一跳之外的节点伪造ND报文
  • 链路内收到该NS报文的主机将检测自身地址是否和target address重复,不重复则忽略,重复则发送NA报文,若是target address也是本身准备配置的地址,则放弃该地址并忽略NS报文
  • 回复的NA报文的target address是从NS报文target address段直接复制过来,destination address 为组播地址

3.2 ND snooping监听过程

ND snooping则监听DAD交互过程,产生MAC-IP对应表filter table.步骤以下:

  • 交换机收到DAD过程当中的NS报文,将NS中的target address插入监听列表BST(Binding State Table)(若是这个地址不在BST中的话)设置ND snooping状态为SAC_START,初始化计时器MAX_DAD_DELAY
  • MAX_DAD_DELAY超时前若是收到其余主机的NA回复报文,则删除BST中该地址信息,本次ND snooping监听结束,反之设置ND snooping状态为SAC_BOUND,初始化计时器MAX_SAC_LIFETIME,将该地址信息加入FT(filter table)
  • 计时器MAX_SAC_LIFETIME超时后, 重设计时器MAX_DAD_PREPARE_DELAY,并发送NS报文到这个地址以指望获得它的MAC地址,在MAX_DAD_PREPARE_DELAY超时前若是没有收到NA回复,则删除BST,FT中的该地址信息,ND snooping监听结束,反之取出NA报文中的MAC地址,加入FT中,并设置计时器MAX_SAC_LIFETIME,ND snooping状态为SAC_QUERY
  • 计时器MAX_SAC_LIFETIME超时后,交换机将返回上一步从新发送NS报文,以确认该地址是否正常,是否须要更新BST,FT。

3.3 ND snooping流程图

NDP-graphic7

相关文章
相关标签/搜索