跳到主要内容

2. 已清点 ND 问题回顾 (Review of Inventoried ND Issues)

2.1. 多播可能导致性能和可靠性问题 (Multicast May Cause Performance and Reliability Issues)

在某些情况下, ND 会对 NS, NA, RS 和 RA 使用多播 (multicast). 虽然多播在某些场景中可能非常高效 (例如有线网络), 但在其他场景中也可能效率低下 (例如大型 L2 网络或无线网络).

通常, 多播可能在大型 L2 网络中产生大量协议流量. 这会消耗网络带宽, 增加处理开销, 并降低网络性能 [RFC7342].

在无线网络中, 由于传输干扰概率更高, 数据速率更低, 且缺少确认 (acknowledgements), 多播可能效率低下, 甚至不可靠 ([RFC9119] 第 3.1 节).

各种 ND 消息中与多播相关的性能问题总结如下:

  • 问题 1: LLA DAD 降低性能

    在一个包含 N 个地址的 L2 网络中 (地址数量可能远大于主机数量, 因为每台主机可以有多个地址), 可能会有 N 条此类多播消息. 当 N 很大时, 这可能导致性能问题.

  • 问题 2: 路由器周期性非请求 RA 消耗主机电池

    多播 RA 通常受限为每 MIN_DELAY_BETWEEN_RAS (3 秒) 一包, 并且链路上通常只有一台或两台路由器, 因此不太可能导致性能问题. 然而, 对于电池供电的主机, 此类消息可能唤醒主机并消耗其电池 [RFC7772].

  • 问题 3: GUA DAD 降低性能

    这与问题 1 相同.

  • 问题 4: 路由器对主机的地址解析降低性能

    这与问题 1 相同.

  • 问题 5: 主机对主机的地址解析降低性能

    这与问题 1 相同.

  • 有待进一步研究的问题: 用于主机 MAC 地址变化的多播 NA 可能降低性能

    随着随机化且会变化的 MAC 地址 [MADINAS] 的使用, 可能会出现大量此类多播消息.

在无线网络中, 多播更容易造成丢包. 由于 DAD 将无响应视为未检测到重复地址, 丢包可能导致重复地址无法被检测到. 与多播相关的可靠性问题总结如下:

  • 问题 6: LLA DAD 在无线网络中并非完全可靠

  • 问题 7: GUA DAD 在无线网络中并非完全可靠

注: IPv6 地址冲突极不可能发生. 因此, 这两个问题在很大程度上是理论问题, 而不是实际问题.

在公共接入网络等场景中, 某些节点可能并不可信. 链路上的攻击者可能造成以下链路上 (on-link) 安全问题 [RFC3756] [RFC9099]:

  • 问题 8: 源 IP 地址伪造

    攻击者可以使用另一个节点的 IP 地址作为其 ND 消息的源地址, 从而冒充该节点. 随后, 攻击者可以发起各种重定向 (Redirect) 或拒绝服务 (Denial-of-Service, DoS) 攻击.

  • 问题 9: 拒绝 DAD

    攻击者可以反复回复受害者的 DAD 消息, 导致受害者的地址配置过程失败, 从而对受害者造成 DoS.

  • 问题 10: 流氓 RA

    攻击者可以向受害主机发送 RA, 冒充路由器. 随后, 攻击者可以发起各种 Redirect 或 DoS 攻击.

  • 问题 11: 伪造的重定向

    攻击者可以向受害主机发送伪造的 Redirect, 将其流量重定向到合法路由器本身.

  • 问题 12: 重放攻击

    攻击者可以捕获有效的 ND 消息, 并在之后重放这些消息.

2.3. 按需路由器 NCE 可能导致转发延迟, NCE 耗尽和地址问责问题 (Router-NCE-on-Demand May Cause Forwarding Delay, NCE Exhaustion, and Address Accountability Issues)

当路由器需要向某个节点转发数据包, 但还没有该节点的邻居缓存条目 (Neighbor-Cache Entry, NCE) 时, 它首先创建一个处于 INCOMPLETE 状态的 NCE. 然后, 路由器向该节点的被请求节点多播地址 (solicited-node multicast address) 多播一个 NS. 当目的节点回复包含其 MAC 地址的 NA 时, 路由器用该地址更新 NCE, 并将其状态改为 REACHABLE, 从而完成该条目. 本文档将此过程称为 "Router-NCE-on-Demand" (按需路由器 NCE).

Router-NCE-on-Demand 可能造成以下问题:

  • 问题 13: NCE 耗尽

    攻击者可以发送大量以不存在的 IP 地址为目标的数据包, 导致路由器创建大量处于 INCOMPLETE 状态的 NCE. 由此产生的资源耗尽可能导致路由器故障. 本文档将这种脆弱性称为 "NCE 耗尽" (NCE exhaustion), 且攻击者不需要位于同一链路上.

  • 问题 14: 路由器转发延迟

    当数据包到达路由器时, 路由器会在尝试确定主机 MAC 地址期间缓存该数据包. 这种缓存会延迟转发, 并且取决于路由器的缓冲区大小, 还可能导致丢包. 本文档将这种延迟称为 "Router-NCE-on-Demand 转发延迟" (Router-NCE-on-Demand forwarding delay).

  • 问题 15: 缺少地址问责

    使用 SLAAC 时, 主机会生成自己的 IP 地址. 只有在创建 NCE 条目后, 路由器才会知道主机的 IP 地址. 使用 DHCPv6 [RFC8415] 时, 除非路由器执行 DHCPv6 窥探 (DHCPv6 snooping), 否则它可能不知道主机的地址. 在公共接入网络中, 订户管理通常依赖 IP 地址 (或前缀) 标识, 因而这种缺少地址问责 (address accountability) 的情况会带来挑战 [AddrAcc]. 如果不知道主机的 IP 地址, 网络管理员就无法有效管理订户, 这在公共接入网络中尤其成问题. 此外, 如 [RFC9099] 第 2.6.1 节所述, 一旦路由器创建了其 NCE, ND [RFC4861] 并没有提供任何机制来检索这些 NCE 以用于管理或监控.

2.4. ND 问题总结 (Summary of ND Issues)

第 2.1, 2.2 和 2.3 节讨论的 ND 问题总结如下. 这些问题源自三个主要原因: 多播, 信任所有节点 (Trusting-all-nodes), 以及 Router-NCE-on-Demand. 消除其中任一原因, 也会缓解对应的问题. 这些观察结果为处理和预防 ND 相关问题提供了指导.

  1. 多播相关问题:

    • 性能问题:

      • 问题 1: LLA DAD 降低性能
      • 问题 2: 路由器周期性非请求 RA 消耗主机电池
      • 问题 3: GUA DAD 降低性能
      • 问题 4: 路由器对主机的地址解析降低性能
      • 问题 5: 主机对主机的地址解析降低性能
    • 可靠性问题:

      • 问题 6: LLA DAD 在无线网络中并非完全可靠
      • 问题 7: GUA DAD 在无线网络中并非完全可靠
  2. 信任所有节点相关问题:

    • 问题 8: 源 IP 地址伪造
    • 问题 9: 拒绝 DAD
    • 问题 10: 流氓 RA
    • 问题 11: 伪造的重定向
    • 问题 12: 重放攻击
  3. Router-NCE-on-Demand 相关问题:

    • 问题 13: NCE 耗尽
    • 问题 14: 路由器转发延迟
    • 问题 15: 缺少地址问责

这些问题是潜在脆弱性, 可能不会在所有使用场景中显现.

当这些问题可能出现在某个具体部署中时, 建议考虑可用的缓解方案. 这些方案将在下一节描述.