跳到主要内容

1. 简介 (Introduction)

邻居发现 (Neighbor Discovery, ND) [RFC4861] 规定了同一链路上的 IPv6 节点 (主机和路由器) 用于通信并相互发现的机制. 无状态地址自动配置 (Stateless Address Autoconfiguration, SLAAC) [RFC4862] 基于这些 ND 机制, 使节点能够配置自己的 IPv6 地址. 在分析节点可能遇到的 ND 问题时, 将 SLAAC 纳入考虑, 并观察节点在整个生命周期中交换的 ND 消息会很有帮助.

对于主机, 整体过程如下:

  1. LLA DAD: 主机构造链路本地地址 (Link-Local Address, LLA), 并使用组播邻居请求 (Neighbor Solicitation, NS) 执行重复地址检测 (Duplicate Address Detection, DAD).

  2. 路由器发现: 主机发送组播路由器请求 (Router Solicitation, RS), 以发现链路上的路由器. 路由器以路由器通告 (Router Advertisement, RA) 响应, 提供子网前缀和其他信息. 主机收到 RA 后, 会为该路由器安装邻居缓存条目 (Neighbor Cache Entry, NCE). 相比之下, 在此交换时刻, 路由器无法为该主机安装 NCE, 因为主机的全局 IP 地址仍未知. 当路由器稍后需要向主机的全局地址转发分组时, 它会执行地址解析并为该主机安装 NCE.

  3. GUA DAD: 主机构造全局单播地址 (Global Unicast Address, GUA) [RFC3587] 或唯一本地地址 (Unique Local Address, ULA) [RFC4193], 并使用组播 NS 执行 DAD. 为简化描述, 本文档后续不再进一步区分 GUA 和 ULA.

  4. 下一跳确定和地址解析: 当主机需要发送分组时, 它会先确定下一跳是路由器还是链路上的主机 (即目的主机). 如果下一跳是路由器, 主机已经拥有该路由器的 NCE. 如果下一跳是链路上的主机, 主机将使用组播 NS 对目的主机执行地址解析. 因此, 源主机会为目的主机安装 NCE.

  5. 节点不可达检测 (Node Unreachability Detection, NUD): 主机使用单播 NS 判断另一个已有 NCE 的节点是否仍可达.

  6. 链路层地址变更通告: 如果主机的链路层地址发生变化, 它可以使用组播邻居通告 (Neighbor Advertisement, NA) 向其他节点通告其新的链路层地址.

对于路由器, 过程类似, 只是没有路由器发现. 取而代之的是, 路由器会执行主机没有的重定向 (Redirect) 过程. 路由器发送 Redirect, 告知某个节点其流量存在更好的下一跳.

ND 在许多消息中使用组播, 并信任来自所有节点的消息; 此外, 当路由器需要向主机转发分组时, 可能会按需为这些主机安装 NCE. 这些行为可能导致问题. 具体而言, 20 多篇 RFC 已经发布了各种 ND 问题和缓解方案, 包括:

  • "IPv6 Neighbor Discovery (ND) Trust Models and Threats" [RFC3756]
  • "SEcure Neighbor Discovery (SEND)" [RFC3971]
  • "Cryptographically Generated Addresses (CGA)" [RFC3972]
  • "Neighbor Discovery Proxies (ND Proxy)" [RFC4389]
  • "Optimistic Duplicate Address Detection (DAD) for IPv6" [RFC4429]
  • "IPv6 in 3rd Generation Partnership Project (3GPP) Evolved Packet System (EPS)" [RFC6459]
  • "IPv6 for Third Generation Partnership Project (3GPP) Cellular Hosts" [RFC7066]
  • "IPv6 in the context of TR-101" [TR177]
  • "Address Resolution Protocol (ARP) Mediation for IP Interworking of Layer 2 VPNs" [RFC6575]
  • "Operational Neighbor Discovery Problems" [RFC6583]
  • "Neighbor Discovery Optimization for IPv6 over Low-Power Wireless Personal Area Networks (6LoWPANs)" [RFC6775]
  • "Registration Extensions for IPv6 over Low-Power Wireless Personal Area Network (6LoWPAN) Neighbor Discovery" [RFC8505]
  • "Address-Protected Neighbor Discovery for Low-Power and Lossy Networks" [RFC8928]
  • "IPv6 Backbone Router" [RFC8929]
  • "Architecture and Framework for IPv6 over Non-Broadcast Access" [SND]
  • "Duplicate Address Detection Proxy" [RFC6957]
  • "Source Address Validation Improvement (SAVI) Framework" [RFC7039]
  • "IPv6 Router Advertisement Guard" [RFC6105]
  • "Implementation Advice for IPv6 Router Advertisement Guard (RA-Guard)" [RFC7113]
  • "Enhanced Duplicate Address Detection" [RFC7527]
  • "The Scalable Address Resolution Protocol (SARP) for Large Data Centers" [RFC7586]
  • "Reducing Energy Consumption of Router Advertisements" [RFC7772]
  • "Unique IPv6 Prefix per Host" [RFC8273]
  • "Transparent Interconnection of Lots of Links (TRILL): ARP and Neighbor Discovery (ND) Optimization" [RFC8302]
  • "Gratuitous Neighbor Discovery: Creating Neighbor Cache Entries on First-Hop Routers" [RFC9131]
  • "Operational Aspects of Proxy ARP/ND in Ethernet Virtual Private Networks" [RFC9161]
  • "Using DHCPv6 Prefix Delegation (DHCPv6-PD) to Allocate Unique IPv6 Prefixes per Client in Large Broadcast Networks" [RFC9663]

本文档将这些 RFC 汇总为一个一站式参考 (截至撰写时), 以便查阅. 本文档还识别了这些问题的三个成因, 并定义了三种主机隔离方法来处理这些成因并预防潜在 ND 问题.

1.1. 术语 (Terminology)

本文档使用 [RFC4861] 中定义的术语. 本节定义其他术语.

MAC (Media Access Control): 为避免与链路本地地址混淆, 本文档将链路层地址称为 "MAC 地址".

主机隔离 (Host Isolation): 将主机分隔到不同子网或链路中.

L3 隔离 (L3 Isolation): 为每台主机分配唯一前缀 (Unique Prefix per Host, UPPH) [RFC8273] [RFC9663], 使每台主机位于不同子网. 鉴于可在共享介质上为每台主机分配唯一前缀, 不同子网中的主机可能位于同一链路上.

L2 隔离 (L2 Isolation): 采取措施阻止主机在第 2 层 (Layer 2, L2) 直接到达其他主机, 使每台主机位于不同链路. 由于存在多链路子网 (Multi-Link Subnet) [RFC4903], 不同链路中的主机可能位于同一子网. 因此, L2 隔离并不意味着 L3 隔离, L3 隔离也不意味着 L2 隔离.

L3+L2 隔离 (L3+L2 Isolation): 同时应用 L3 隔离和 L2 隔离, 使每台主机位于不同子网和不同链路.

部分 L2 隔离 (Partial L2 Isolation): 使用 L3 ND Proxy [RFC4389] 设备, 代表其后方主机面向同一子网中的其他主机. 在该子网内, ND 组播交换被划分为多个较小范围, 每个范围由一个 ND Proxy 设备代表.