### [IPv6系列-彻底弄明白有状态与无状态配置IPv6地址](https://dashen.wang/article/30433) **Published:** 2023-01-21T17:07:29 **Author:** 大神 **Excerpt:** 在今天的数字世界中,互联网连接无处不在,而IPv6作为下一代互联网协议,已经逐渐取代了IPv4,以满足不断增长的互联网设备需求。IPv6不仅为我们带来更多的IP地址,还引入了新的方式来分配这些地址。本教程将深入研究IPv6地址分配中的两种主要方式:Stateless(无状态)和Stateful(有状态),以及与之相关的RA报文和DHCPv6协议。 IPv6地址分配方式详解 IPv6地址分配涉及两个主要方面:Link-Local地址和Global地址。Link-Local地址用于在同一链路上的设备间通信,而Global地址用于互联网上的全球通信。让我们逐一了解这两种地址生成方式: 一. Link-Local地址的生成方式 生成"链路本地地址"有两种方式: 手动配置 自动配置 其中,自动配置又可以分为以下三种算法: eui64:根据MAC地址计算生成 stable_secret:随网络环境的变化而变化,但在固定网络环境下保持不变 random:随机生成 这些方式允许设备在同一链路上自动配置Link-Local地址,无需手动干预。 二. Global地址的生成方式 生成"全球单播地址"(或者"唯一本地地址")也有两种方式: 手动配置 自动配置 自动配置又根据获取方式分为两种: 无状态(Stateless):根据路由通告报文RA(Router Advertisement)中包含的prefix前缀信息自动配置IPv6地址,通常采用Prefix + (EUI64或随机)的方式。无状态配置也可以称为SLAAC(Stateless Address Autoconfiguration)。 有状态(Stateful):通过DHCPv6协议获得IPv6地址。有状态配置又分为两种: 有状态DHCPv6(Stateful DHCPv6):IPv6地址和其他参数(如DNS)均通过DHCPv6获取。 无状态DHCPv6(Stateless DHCPv6):IPv6地址仍然通过RA报文方式生成,但其他参数(如DNS)通过DHCPv6获取。 要注意,有状态和无状态仅针对IPv6地址分配方式,不包括其他参数。有状态分配是可控、可管理的,通常由网络中的IP地址管理者(DHCPv6 Server)进行管理,而无状态分配则不可控,每个设备根据RA报文自行配置IPv6地址。 三. RA报文中的3个关键Flag RA报文中包含三个关键的Flag位: Autonomous flag(A flag):表示是否配置无状态IP。在RA报文中,每个prefix可以独立配置A flag。 当A flag为on(对应bit位为1)时,客户端会自动生成IPv6地址,并配置子网路由条目和网关。 当A flag为off(对应bit位为0)时,客户端不会生成IPv6地址,但仍然可以配置子网路由和网关。 Managed flag(M flag):表示是否配置有状态IP。M flag是RA报文的全局参数,一个RA报文只有一个M flag。 当M flag为on(对应bit位为1)时,客户端可以通过DHCPv6获得IPv6地址和其他参数(如DNS列表)。 当M flag为off(对应bit位为0)时,客户端不会通过DHCPv6获得IPv6地址。 Other flag(O flag):表示是否通过DHCPv6获得除IP以外的其他参数(如DNS列表)。O… 在今天的数字世界中,互联网连接无处不在,而IPv6作为下一代互联网协议,已经逐渐取代了IPv4,以满足不断增长的互联网设备需求。IPv6不仅为我们带来更多的IP地址,还引入了新的方式来分配这些地址。本教程将深入研究IPv6地址分配中的两种主要方式:Stateless(无状态)和Stateful(有状态),以及与之相关的RA报文和DHCPv6协议。 ## IPv6地址分配方式详解 IPv6地址分配涉及两个主要方面:Link-Local地址和Global地址。Link-Local地址用于在同一链路上的设备间通信,而Global地址用于互联网上的全球通信。让我们逐一了解这两种地址生成方式: ### 一. Link-Local地址的生成方式 生成”链路本地地址”有两种方式: - 手动配置 - 自动配置 其中,自动配置又可以分为以下三种算法: - **eui64**:根据MAC地址计算生成 - **stable\_secret**:随网络环境的变化而变化,但在固定网络环境下保持不变 - **random**:随机生成 这些方式允许设备在同一链路上自动配置Link-Local地址,无需手动干预。 ### 二. Global地址的生成方式 生成”全球单播地址”(或者”唯一本地地址”)也有两种方式: - 手动配置 - 自动配置 自动配置又根据获取方式分为两种: - **无状态(Stateless)**:根据路由通告报文RA(Router Advertisement)中包含的prefix前缀信息自动配置IPv6地址,通常采用Prefix + (EUI64或随机)的方式。无状态配置也可以称为SLAAC(Stateless Address Autoconfiguration)。 - **有状态(Stateful)**:通过DHCPv6协议获得IPv6地址。有状态配置又分为两种: - **有状态DHCPv6(Stateful DHCPv6)**:IPv6地址和其他参数(如DNS)均通过DHCPv6获取。 - **无状态DHCPv6(Stateless DHCPv6)**:IPv6地址仍然通过RA报文方式生成,但其他参数(如DNS)通过DHCPv6获取。 要注意,有状态和无状态仅针对IPv6地址分配方式,不包括其他参数。有状态分配是可控、可管理的,通常由网络中的IP地址管理者(DHCPv6 Server)进行管理,而无状态分配则不可控,每个设备根据RA报文自行配置IPv6地址。 ### 三. RA报文中的3个关键Flag RA报文中包含三个关键的Flag位: - **Autonomous flag(A flag)**:表示是否配置无状态IP。在RA报文中,每个prefix可以独立配置A flag。 - 当A flag为on(对应bit位为1)时,客户端会自动生成IPv6地址,并配置子网路由条目和网关。 - 当A flag为off(对应bit位为0)时,客户端不会生成IPv6地址,但仍然可以配置子网路由和网关。 - **Managed flag(M flag)**:表示是否配置有状态IP。M flag是RA报文的全局参数,一个RA报文只有一个M flag。 - 当M flag为on(对应bit位为1)时,客户端可以通过DHCPv6获得IPv6地址和其他参数(如DNS列表)。 - 当M flag为off(对应bit位为0)时,客户端不会通过DHCPv6获得IPv6地址。 - **Other flag(O flag)**:表示是否通过DHCPv6获得除IP以外的其他参数(如DNS列表)。O flag也是RA报文中的全局参数,一个RA报文只有一个O flag。注意:仅当M flag为off时,该参数才会被读取。 - 当O flag为on(对应bit位为1)时,客户端在M flag为on或至少有一个A flag为on的情况下,将通过DHCPv6获得其他参数。 - 当O flag为off(对应bit位为0)时,客户端不会通过DHCPv6获得其他参数。 ### 四. 流程示意图 无状态和有状态IPv6地址分配方式并不相互对立,它们可以同时存在于同一网络设备上。下面的流程示意图展示了这一过程: 1. Stateless自动配置链路本地地址 2. Stateless自动配置全球地址(或唯一本地地址) 3. Stateful自动配置全球地址(或唯一本地地址)和其他参数,包括Stateful DHCPv6或Stateless DHCPv6。 需要注意的是,一些客户端操作系统或网络管理器在Stateless阶段未收到RA报文时可能结束,不会继续Stateful阶段,例如CentOS 7和Ubuntu 17的默认逻辑,而Windows Server 2012则会继续Stateful阶段。 ### 五. 测试获得IP效果 我们进行了一系列测试,测试环境基于CentOS 7和NetworkManager进行搭建。以下是测试内容和结果: - 测试M、O、A flag在所有排列组合的情况下,客户端是否会通过RA报文配置无状态IP。 - 客户端是否会通过RA报文配置prefix子网路由和网关。 - 客户端是否会通过RA报文配置无状态IPv6地址。 - 客户端是否会通过DHCPv6获得有状态IPv6地址。 - 客户端是否会通过DHCPv6获得 DNS。 测试结果如下表所示: | M flag | O flag | A flag | Stateless IP | Prefix Subnet Route | Gateway Configuration | Stateful IP | DHCPv6 DNS | | --- | --- | --- | --- | --- | --- | --- | --- | | on | on | on | Yes | Yes | Yes | No | No | | on | on | off | Yes | Yes | Yes | No | No | | on | off | on | Yes | Yes | Yes | No | No | | on | off | off | Yes | Yes | Yes | No | No | | off | on | on | Yes | Yes | Yes | Yes | Yes | | off | on | off | Yes | Yes | Yes | Yes | Yes | | off | off | on | Yes | Yes | Yes | Yes | No | | off | off | off | Yes | Yes | Yes | No | No | ### 六. 应用场景(选择无状态还是有状态) 何时采用无状态或有状态取决于具体的应用场景。关键在于是否需要控制IPv6地址。如果需要控制地址,例如保持地址不变,那么应该选择有状态IPv6地址分配方式;如果不需要控制,可以选择无状态IPv6地址分配方式。 - 在服务端领域,需要对外提供服务,通常需要采用有状态IPv6地址,因为业务IP地址的突然变化容易导致业务中断,除非有良好的服务发现机制。 - 在客户端领域,如移动设备或办公室内的PC机,通常只需要连接到IPv6互联网,不需要对外提供服务,因此可以采用无状态IPv6地址分配方式。 ### 七. 后续内容 由于篇幅限制,本文未提供详细的配置信息。我们将在后续的IPv6系列文章中提供完整的实验配置,包括RA和DHCPv6的配置,以及客户端的配置。请继续关注我们的系列文章以获取更多信息。 ### 附. 参考文档 1. [IPv6 Autoconfiguration Mechanisms](http://www.6deploy.eu/tutorials/080-6deploy_ipv6_autoconfiguration_mechs_v0_4.pdf) 2. [DHCPv6基础](https://cshihong.github.io/2018/02/01/DHCPv6%E5%9F%BA%E7%A1%80/) 本教程深入研究了IPv6地址分配的Stateless和Stateful方式,以及与之相关的RA报文和DHCPv6协议。了解这些方式和参数对于构建和管理IPv6网络至关重要。希望本教程能帮助您更好地理解IPv6地址分配,并根据实际需求选择合适的方式。 原文来源:[小慢哥的原创文章,欢迎转载](https://www.shuzhiduo.com/A/lk5a4NqZJ1/) **Tags:** Linux, Windows, 教程, 网络 **Categories:** 技术折腾 ---