1. 简介 (Introduction)
邻居发现 (Neighbor Discovery, ND) [RFC4861] 规定了同一链路上的 IPv6 节点 (主机和路由器) 用于通信并相互发现的机制. 无状态地址自动配置 (Stateless Address Autoconfiguration, SLAAC) [RFC4862] 基于这些 ND 机制, 使节点能够配置自己的 IPv6 地址. 在分析节点可能遇到的 ND 问题时, 将 SLAAC 纳入考虑, 并观察节点在整个生命周期中交换的 ND 消息会很有帮助.
对于主机, 整体过程如下:
-
LLA DAD: 主机构造链路本地地址 (Link-Local Address, LLA), 并使用组播邻居请求 (Neighbor Solicitation, NS) 执行重复地址检测 (Duplicate Address Detection, DAD).
-
路由器发现: 主机发送组播路由器请求 (Router Solicitation, RS), 以发现链路上的路由器. 路由器以路由器通告 (Router Advertisement, RA) 响应, 提供子网前缀和其他信息. 主机收到 RA 后, 会为该路由器安装邻居缓存条目 (Neighbor Cache Entry, NCE). 相比之下, 在此交换时刻, 路由器无法为该主机安装 NCE, 因为主机的全局 IP 地址仍未知. 当路由器稍后需要向主机的全局地址转发分组时, 它会执行地址解析并为该主机安装 NCE.
-
GUA DAD: 主机构造全局单播地址 (Global Unicast Address, GUA) [RFC3587] 或唯一本地地址 (Unique Local Address, ULA) [RFC4193], 并使用组播 NS 执行 DAD. 为简化描述, 本文档后续不再进一步区分 GUA 和 ULA.
-
下一跳确定和地址解析: 当主机需要发送分组时, 它会先确定下一跳是路由器还是链路上的主机 (即目的主机). 如果下一跳是路由器, 主机已经拥有该路由器的 NCE. 如果下一跳是链路上的主机, 主机将使用组播 NS 对目的主机执行地址解析. 因此, 源主机会为目的主机安装 NCE.
-
节点不可达检测 (Node Unreachability Detection, NUD): 主机使用单播 NS 判断另一个已有 NCE 的节点是否仍可达.
-
链路层地址变更通告: 如果主机的链路层地址发生变化, 它可以使用组播邻居通告 (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 设备代表.