IPv6 SLAAC

IPv6使用SLAAC进行无状态地址自动配置,设备通过接收RA消息中的前缀信息自动生成IPv6地址,而无需依赖外部的DHCP服务器。RA消息中的A标志和前缀信息决定了设备是否可以使用SLAAC进行配置。重复地址检测(Duplicate Address Detection,DAD)是IPv6协议中的一种机制,旨在确保在网络中没有两个设备使用相同的IP地址,避免地址冲突。

From DHCP to SLAAC

IPv4 组建的家庭网络常见的前缀长度是 /24,这样的网络有 256 个地址,通常使用DHCP方式组网。DHCP自动为网络设备分配 IP 地址以及相关的网络配置信息,例如子网掩码、网关地址和 DNS 服务器。DHCP 避免同一网络内IP地址冲突问题。

IPv6 组建的家庭网络中常见的前缀长度是 /64,能够容纳2^64 个地址,以至于根本不需要 DHCP 那样的中心化管理机制。IPv6 使用SLAAC方式进行IP管理。

SLAAC 简介

SLAAC(Stateless Address Autoconfiguration,无状态地址自动配置)是IPv6中的一种机制,用于设备自动配置自己的IPv6地址,而无需借助DHCP服务器。

SLAAC的工作原理:

  • 链路本地地址生成:设备首先会生成一个链路本地地址,用于在本地网络中通信。链路本地地址通常通过在设备的MAC地址基础上添加前缀 fe80::/64 生成。

  • 路由器通告(Router Advertisement,RA):当设备接入网络时,它会通过发送Router Solicitation (RS) 消息,询问是否有路由器。网络中的IPv6路由器会通过Router Advertisement (RA) 消息进行回应,提供网络前缀、链路信息和其他配置参数。

  • 全局唯一地址生成:设备接收到RA消息后,会结合所收到的网络前缀和自己的接口标识符(通常基于MAC地址)生成一个全局唯一的IPv6地址。这个地址可以用于与网络中的其他设备或互联网通信。

  • 重复地址检测(Duplicate Address Detection,DAD):为了确保地址唯一性,设备会在网络中广播该地址,确认是否已经有其他设备使用了相同的地址。如果没有响应,则表明该地址可以使用。

全局唯一地址生成算法

SLAAC使用的地址生成算法经历的升级:

  • EUI-64算法:基于设备的MAC地址生成,使用硬件特性,较早期版本。
  • RFC 7217 随机化算法:不依赖MAC地址,提供更强的隐私保护。
  • RFC 4941 临时地址算法:生成定期更换的随机地址,进一步增强隐私。

1. 基于 EUI-64 生成接口标识符(旧方法)

在最早的SLAAC标准中,设备的IPv6地址是基于EUI-64格式生成的,使用设备的MAC地址作为地址的一部分。该过程如下:

  • 设备获取到IPv6网络的前缀(通常是64位)。
  • 设备使用它的MAC地址(通常是48位)生成一个64位的接口标识符(Interface Identifier)。
  • 生成接口标识符的算法:
    1. MAC地址的前24位是组织唯一标识符 (OUI),后24位是设备标识符。
    2. 将MAC地址的第7位(“全局/本地位”)取反,以生成EUI-64格式。
    3. 在MAC地址的中间插入16位的值 FFFE,将MAC地址扩展为64位。

这种方法生成的IPv6地址形式为:网络前缀::EUI-64

2. 基于随机化的接口标识符(RFC 7217)

为了避免隐私和跟踪问题(因为EUI-64基于硬件地址是固定的,可以让设备的地址长期不变,暴露隐私),RFC 7217 引入了更安全的随机化算法生成接口标识符。

随机化接口标识符算法的特点:

  • 不依赖设备的MAC地址或硬件特性。
  • 可以为同一设备在同一个网络生成稳定的地址(即便重新启动),但不会暴露设备标识。
  • 如果设备移动到不同的网络,会生成不同的接口标识符。

算法步骤

  1. 设备从RA消息中获取网络前缀和其他相关信息。
  2. 设备结合以下因素生成一个随机的64位接口标识符:
    • 网络前缀。
    • 接口的标识符(如接口的名称或编号)。
    • 网络参数(如RA中的参数)。
    • 秘密密钥或随机数(确保地址生成的不可预测性)。
  3. 设备根据这些输入,使用哈希函数或伪随机生成器生成接口标识符。

3. 临时地址生成(RFC 4941)

为了进一步增强隐私,RFC 4941 引入了“临时地址”(Temporary Addresses)的概念。这种方法通常与基于EUI-64或随机接口标识符的地址并存,提供额外的隐私保护。

临时地址生成算法的步骤

  1. 设备生成一个临时的、随机化的接口标识符,通常是基于伪随机数生成器(PRNG)或哈希函数。
  2. 定期更新临时地址,以确保跟踪困难。
  3. 临时地址不会替代设备的永久地址,而是用于发起对外的连接,隐藏设备的真实身份。

路由器通告(Router Advertisement,RA)

RA(Router Advertisement,路由器通告)消息是IPv6协议中的一种ICMPv6消息类型,主要由IPv6路由器发送,用于向本地网络中的设备传递网络信息。RA消息是IPv6无状态地址自动配置(SLAAC)的核心组成部分,设备通过接收RA消息来获取网络配置信息。

RA消息的功能

RA消息的主要功能是让设备知道如何在IPv6网络中进行配置,它包含了以下重要信息:

  1. 前缀信息:RA消息通常包含IPv6网络前缀(Prefix),设备使用这个前缀生成全局唯一的IPv6地址。这是SLAAC中的关键步骤。前缀的长度通常是64位。

  2. 地址自动配置标志:RA消息中有两个重要标志(flags):

    • A标志(Autonomous Flag):如果设置为1,表示设备可以基于RA消息中的前缀自行生成IPv6地址(即SLAAC)。
    • M标志(Managed Flag):如果设置为1,表示需要使用DHCPv6来获取IP地址,不能通过SLAAC自动生成。
    • O标志(Other Flag):表示设备应通过DHCPv6获取其他配置信息(如DNS服务器等),而非依赖RA消息。
  3. 默认路由信息:RA消息告诉设备哪个IPv6地址是默认网关(通常是发送RA消息的路由器的地址)。设备可以将其设置为默认路由,以便与外部网络通信。

  4. 有效期信息:RA消息中包含前缀的有效期和默认路由的寿命信息,告诉设备前缀和路由的有效时间。这决定了设备多长时间后需要重新验证这些信息。

  5. MTU(最大传输单元):RA消息中可能包含网络的MTU值,告诉设备所连接网络支持的最大数据包大小。

  6. 递归DNS服务器(RDNSS):RA消息有时还包含递归DNS服务器的地址,设备可以通过这个信息配置DNS解析服务。

  7. 其他可选参数:如生存时间(Hop Limit)、重传间隔等。

RA消息的传输方式

  1. 定期发送:IPv6路由器定期广播RA消息,以便通知网络中的所有设备网络参数和配置信息。这种定期广播确保新接入的设备可以及时获取配置信息。

  2. 按需响应:当设备接入网络时,可以发送Router Solicitation(RS)消息,向网络中的路由器询问配置。路由器在接收到RS消息后会立即响应一个RA消息。

RA消息的作用过程

典型的RA消息使用过程如下:

  1. 设备首次接入IPv6网络时,发送RS(Router Solicitation)消息,询问路由器的存在及网络配置。
  2. 路由器响应RA消息,设备根据RA消息中的前缀和标志信息进行地址自动配置。
  3. 如果RA消息允许SLAAC(通过A标志),设备使用RA中的前缀结合自己的接口标识符生成IPv6地址。
  4. 设备会根据RA消息中的其他信息(如默认路由、DNS服务器)进行进一步的网络配置。

RA消息与SLAAC的关系

SLAAC是无状态地址自动配置,设备通过接收RA消息中的前缀信息自动生成IPv6地址,而无需依赖外部的DHCP服务器。RA消息中的A标志和前缀信息决定了设备是否可以使用SLAAC进行配置。

重复地址检测(Duplicate Address Detection,DAD)

重复地址检测(Duplicate Address Detection,DAD) 是IPv6协议中的一种机制,旨在确保在网络中没有两个设备使用相同的IP地址,避免地址冲突。

DAD的工作原理

重复地址检测的基本原理是:在一个节点配置一个IPv6地址时,它会在使用该地址前,先检查这个地址是否已经被其他设备使用。这个过程通过发送特定的 邻居发现协议(Neighbor Discovery Protocol, NDP) 消息来完成。

具体步骤如下:

  1. 生成临时地址:设备首先生成一个候选的IPv6地址。例如,当使用SLAAC时,设备基于链路本地前缀 fe80:: 和设备的MAC地址生成一个链路本地地址。

  2. 发送邻居请求(Neighbor Solicitation,NS)

    • 设备发送一个特殊的 邻居请求(NS) 消息,这个消息的目标地址是它希望使用的IPv6地址。
    • 该消息是多播发送到本地链路上的所有设备,实际上询问网络中的其他设备:“这个地址已经在使用了吗?”
  3. 监听邻居通告(Neighbor Advertisement,NA)

    • 如果网络中的其他设备已经在使用该地址,那么该设备会响应并发送 邻居通告(NA),告知新的设备这个地址已经被占用。
  4. 确认结果

    • 如果没有收到响应:表示这个IPv6地址没有重复,设备可以安全地使用该地址。
    • 如果收到响应:表示该地址已经被其他设备使用,设备将不会使用该地址,可能会生成新的地址或请求手动配置。

DAD的适用范围

  • 链路本地地址(Link-Local Address):IPv6设备在启动时会首先为每个网络接口生成一个链路本地地址,并通过DAD确保该地址在本地链路中是唯一的。
  • 全局单播地址(Global Unicast Address):当使用无状态地址自动配置(SLAAC)生成全球单播地址时,设备也会通过DAD检测全局地址的唯一性。
  • 手动配置的IPv6地址:即使是手动配置的IPv6地址,也会通过DAD来确保地址不冲突。

相关协议与消息

DAD使用的是 邻居发现协议(Neighbor Discovery Protocol,NDP),而其中的核心消息是:

  • NS(邻居请求):设备主动询问目标IPv6地址是否已经在网络中使用。
  • NA(邻居通告):网络中已使用该IPv6地址的设备作出响应,表明地址已被占用。

特点和局限性

  1. 无状态自动配置依赖DAD:IPv6中的无状态地址自动配置(SLAAC)允许设备自行生成IP地址,而无需手动配置或依赖DHCP。在这种情况下,DAD尤为关键,确保生成的地址唯一。
  2. 只在链路本地范围内有效:DAD只在本地链路范围内有效,即检测的是本地链路上的设备是否存在地址冲突,无法跨链路或跨网络检测。
  3. 延迟问题:由于DAD需要检测地址的唯一性,这在设备启动或重新配置时可能会引入短暂的延迟,通常为几百毫秒。
  4. 与IPv4的不同:IPv4中通常通过ARP(地址解析协议)来检测地址冲突,而IPv6则使用NDP的DAD机制来进行类似的功能。
Built with Hugo
Theme Stack designed by Jimmy