Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

IPv6 邻居发现

总结 邻居发现是一种用于 IPv6 流量的协议,它允许同一链路上的不同节点向邻居通告其存在,并了解其邻居的存在。

IPv6 邻居发现概述

邻居发现是一种协议,它允许同一链路上的不同节点向邻居通告其存在,并了解其邻居的存在。

路由器和主机(节点)使用邻居发现 (ND) 消息来确定驻留在附加链路上的邻接方的链路层地址,并覆盖无效的缓存条目。主机还使用 ND 查找可以代表它们转发数据包的相邻路由器。

此外,节点使用 ND 来主动跟踪到达邻居的能力。当路由器(或路由器的路径)发生故障时,节点会主动搜索替代方案以到达目的地。

本节讨论以下主题:

对 IPv4 协议的改进

IPv6 邻居发现对应于许多 IPv4 协议 — ARP、ICMP 路由器发现和 ICMP 重定向。但是,邻居发现比 IPv4 协议集提供了许多改进。这些改进解决了以下问题:

  • 路由器发现 — 主机如何定位驻留在附加链路上的路由器。

  • 前缀发现 - 主机如何发现驻留在附加链路上的目标的地址前缀。节点使用前缀来区分驻留在附加链路上的目标和只能通过路由器到达的目标。

  • 参数发现 — 节点如何学习放置在传出数据包中的各种参数(链路参数或互联网参数)。

  • 地址解析 — 节点如何仅使用目标 IPv6 地址来确定附加链路上目标的链路层地址。

  • 下一跃点确定 — 节点用于将 IPv6 目标地址映射到计划将目标流量发送到的邻居 IPv6 地址(下一个路由器跃点或目标本身)的算法。

  • 邻接方不可访问性检测 - 节点如何确定其无法再到达邻接方。

  • 重复地址检测 - 一个节点如何确定某个地址是否已被另一个节点使用。

路由器定期从其每个组播接口组播路由器播发,并宣布其可用性。主机侦听这些通告,以实现地址自动配置和发现相邻路由器的链路本地地址。当主机启动时,它会多播路由器请求以请求立即播发。

路由器发现消息不构成路由协议。它们使主机能够发现相邻路由器的存在,但不用于确定哪个路由器最适合到达特定目标。

邻居发现使用以下互联网控制消息协议版本 6 (ICMPv6) 消息:路由器请求、路由器通告、邻居请求、邻居通告和重定向。

IPv6 的邻居发现取代了以下 IPv4 协议:路由器发现 (RDISC)、地址解析协议 (ARP) 和 ICMPv4 重定向。

Junos OS 9.3 及更高版本 支持安全邻居发现 (SEND)。SEND使您能够保护邻居发现协议(NDP)消息。它适用于链路上的物理安全性无法保证且关注 NDP 消息攻击的环境。Junos OS 通过加密生成的地址 (CGA) 保护 NDP 消息。

路由器发现

路由器通告可以包含前缀列表。这些前缀用于地址自动配置、维护链路上(在同一数据链路上)前缀数据库以及重复地址检测。如果节点在链路上,路由器会将数据包转发到该节点。如果节点不在链路上,数据包将发送到下一个路由器以供考虑。对于 IPv6,前缀列表中的每个前缀都可以包含前缀长度、前缀的有效生存期、前缀的首选生存期、onlink 标志和自动配置标志。此信息支持地址自动配置和链路参数设置,例如最大传输单元 (MTU) 大小和跳数限制。

Junos OS 22.4R1 及更高版本支持 NAT64 IPv6 地址前缀路由器通告。路由器在路由器通告数据包中通告配置的 NAT64 IPv6 地址前缀。每个接口最多可以配置 3 个 NAT64 IPv6 地址前缀。

您可以使用命令配置 NAT64 IPv6 地址前缀 set protocols router-advertisement interface <interface-name> nat-prefix <prefix>.

您可以使用命令配置路由器通告时间 set protocols router-advertisement interface <interface-name> nat-prefix <prefix> lifetime <lifetime>.

地址解析

对于 IPv6,ICMPv6 邻居发现取代了地址解析协议 (ARP),用于将网络地址解析为链路级地址。邻居发现还可以处理链路层地址、入站负载平衡、任播地址和代理通告方面的更改。

请求目标节点链路层地址的节点使用目标地址组播邻居请求消息。目标会发回包含其链路层地址的邻居通告消息。

邻居请求和播发消息用于检测同一链路上的重复单播地址。IP 地址的自动配置取决于该链路上是否存在重复地址。重复地址检测是自动配置的要求。

邻居请求和播发消息也用于邻居不可访问性检测。邻居不可访问性检测涉及检测给定链路上是否存在目标节点。

重 定向

发送重定向消息是为了通知主机有更好的下一跳路由器到特定目标或链路上邻居。这类似于 ICMPv4 重定向。与 ICMPv4 重定向功能非常相似,路由器使用 ICMPv6 重定向消息通知链路上主机给定目标的下一跃点更好。其目的是允许路由器帮助主机做出最有效的本地路由决策。

SLAAC

除了为网络世界带来的所有其他改进之外,邻居发现还支持地址自动配置,即无状态地址自动配置 (SLAAC)。IPv6 通过 DHCPv6(和静态分配)保持有状态地址分配的功能,但 SLAAC 提供了一种在许多情况下可能需要的轻量级地址配置方法。

SLAAC 分两个阶段提供即插即用 IP 连接:第 1 阶段:链路本地地址分配;然后,在第 2 阶段:全局地址分配中。

  • 阶段 1 - 本地连接步骤:

    1. 链路本地地址生成:每当启用组播的 IPv6 接口打开时,节点都会为该接口生成链路本地地址。这是通过将接口标识符附加到链路本地前缀 (FE80::/10) 来完成的。自动生成的链路本地地址无法删除。但是,也可以手动输入新的链路本地地址,这将覆盖自动生成的链路本地地址。

    2. 重复检测:在为其接口分配新的链路本地地址之前,节点会验证该地址是否唯一。这是通过发送发往新地址的邻居请求消息来实现的。如果有回复,则地址重复,进程停止,需要操作员干预。

    3. 链路本地地址分配:如果地址是唯一的,节点会将其分配给为其生成该地址的接口。

    此时,该节点已与同一链路上的所有其他节点建立 IPv6 连接。第 2 阶段只能由主机完成。路由器的接口地址必须通过其他方式进行配置。

  • 第 2 阶段 — 实现全局连接的步骤:

    1. 路由器通告:节点发送路由器请求,提示所有链路上的路由器向其发送路由器通告。启用路由器以提供无状态自动配置支持时,路由器通告将包含供相邻主机使用的子网前缀。

    2. 全局地址生成:从路由器收到子网前缀后,主机会将接口 ID 附加到提供的前缀,从而生成全局地址。

    3. 重复地址检测:主机再次执行重复地址检测 (DAD),这次是针对新的全局地址。4. 全局地址分配:假设地址不是重复的,主机会将其分配给接口。

    此过程可确保完整的 IPv6 全局连接,无需手动主机配置和极少的路由器配置。

支持的 ICMP 路由器发现和 IPv6 邻居发现标准

Junos OS 实质上支持以下 RFC,这些 RFC 定义了互联网控制消息协议(IP 版本 4 的 ICMP [IPv4])和邻居发现(IP 版本  6 [IPv6])的标准。

  • RFC 1256,ICMP 路由器发现消息

  • RFC 4861,IP 邻居 发现版本 6 (IPv6)

  • RFC 2462,IPv6 无状态地址自动配置

  • RFC 2463, 互联网协议版本 6 (IPv6) 规范的互联网控制消息协议 (ICMPv6)

  • RFC 4443,互联网 协议版本 6 (IPv6) 规范的互联网控制消息协议 (ICMPv6)

  • RFC 4861,IP 邻居发现版本 6 (IPv6)

  • RFC 4862,IPv6 无状态地址自动配置

  • RFC 8335, 探针:用于探测接口的实用程序

示例:配置 IPv6 接口并启用邻居发现

此示例说明如何配置路由器或交换机以发送 IPv6 邻居发现消息。

要求

在此示例中,不需要除设备初始化之外的特殊配置。

概述

在此示例中,示例拓扑中的所有接口都配置了 IPv6 地址。如果计划将 IPv6 功能扩展到 LAN、数据中心或客户网络中,则可能需要使用无状态地址自动配置 (SLAAC),这意味着要配置路由器通告。SLAAC 是一种 IPv6 协议,它提供与 IPv4 中的 DHCP 类似的功能。使用 SLAAC,网络主机可以根据路由器通告中附近路由器提供的前缀自动配置全局唯一的 IPv6 地址。这样就无需在网络的给定部分显式配置每个接口。默认情况下,路由器通告消息处于禁用状态,您必须启用它们才能利用 SLAAC。

要将路由器配置为发送路由器通告消息,必须在配置中至少包含以下语句。所有其他路由器通告配置语句都是可选的。

要配置邻居发现,请包含以下语句。您可以基于每个接口配置路由器通告。

拓扑

图 1 显示了一个简化的示例拓扑。

图 1:ICMP 路由器发现拓扑 ICMP Router Discover Topology

此示例说明如何确保附加到示例拓扑中子网的所有 IPv6 主机都可以自动配置本地 EUI-64 地址。

CLI 快速 配置显示了 图 1 中所有设备的配置。 #d11e197__d11e365 描述了设备 R1 上的步骤。

配置

程序

CLI 快速配置

要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改与您的网络配置匹配所需的任何详细信息,然后将命令复制并粘贴到层次结构级别的 CLI [edit] 中。

设备 R1

设备 R2

设备 R3

设备 R4

分步过程

以下示例要求您在配置层次结构中导航各个级别。有关如何执行此操作的说明,请参阅 CLI 用户指南中的在配置模式下使用 CLI 编辑器

要配置 IPv6 邻居发现,请执行以下操作:

  1. 配置网络接口。

    此示例显示了用于模拟连接的网络的多个环路接口地址。

  2. 启用邻居发现。

结果

在配置模式下,输入 show interfacesshow protocols 命令确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明以进行更正。

如果完成设备配置,请从配置模式输入 提交

验证

要确认配置工作正常,请执行以下任务:

检查接口

目的

验证接口是否已启动,并查看分配的 EUI-64 地址。

行动

在操作模式下,输入 show interfaces terse 命令。

意义

输出显示所有接口都配置了 IPv6 (inet6) 地址族。每个支持 IPv6 的接口都有两个 IPv6 地址;一个链路本地地址和一个全局地址。全局地址与 图 1 中所示的地址匹配。Junos OS 会自动为启用 IPv6 操作的任何接口创建链路本地地址。所有链路本地地址都以 fe80::/64 前缀开头。地址的主机部分长度为 64 位,与链路本地接口标识符匹配。使用该 eui-64 语句配置接口地址时,其接口标识符与链路本地地址的接口标识符匹配。这是因为链路本地地址是根据 EUI-64 规范编码的。

对接口执行 ping 操作

目的

验证直接连接的接口之间的连接。

行动
  1. 确定远程路由器的 IPv6 接口地址。

    在设备 R2 上,对直接连接到设备 R1 的接口运行 show interfaces terse 命令,并将全局地址复制到终端模拟器的捕获缓冲区中。

  2. 在设备 R1 上,使用您复制的全局地址运行 ping 命令。

意义

Junos OS 对 IPv4 和 IPv6 测试使用相同的 ping 命令。由于网络中没有任何内部网关协议 (IGP),因此将 ping 测试限制在直接连接的邻居身上。对其他直接连接的邻居重复 ping 测试。

检查 IPv6 邻居缓存

目的

显示有关 IPv6 邻接方的信息。

执行 ping 测试后,您可以在 IPv6 邻居缓存中找到接口地址的条目。

行动

在操作模式下,输入 show ipv6 neighbors 命令。

意义

在 IPv6 中,地址解析协议 (ARP) 已被邻居发现协议 (NDP) 取代。IPv4 命令由 IPv6 命令show arpshow ipv6 neighbors取代。此命令显示的关键信息是 IP 地址、MAC(链路层)地址和接口。

验证 IPv6 路由器通告

目的

通过确保路由器通告正常工作,确认可以使用 SLAAC 将设备添加到网络中。

行动

在操作模式下,输入 show ipv6 router-advertisement 命令。

意义

输出显示路由器通告正在设备 R1 的接口上发送和接收,表明设备 R1 及其直接连接的邻居均配置为生成路由器通告。

跟踪邻居发现事件

目的

通过跟踪路由器通告执行其他验证。

行动
  1. 配置跟踪操作。

  2. show log运行命令。