注:本文为 “IPv6 地址分配 | Stateless(无状态)与Stateful(有状态)” 相关文章合辑。
未整理去重。
有状态与无状态配置 IPv6 地址
作者:小慢哥本人 2019-10-09 08:29:30
一. Link-Local Address 的生成方式
生成 “链路本地地址”,有 2 种方式
▷ 手动配置
▷ 自动配置
其中 “自动配置” 根据算法,又分为
▷ eui64:根据 mac 地址换算而来
▷ stable_secret:跟随网络环境的变化而变化,处于固定网络环境时其值将固定
▷ random:随机生成
二. Global Address 的生成方式
生成 “全球单播地址”(或者 “唯一本地地址”),有两种方式
▷ 手动配置
▷ 自动配置
其中 “自动配置” 根据获取方式,又分为
▷ 无状态(Stateless)
根据路由通告报文 RA(Router Advertisement)包含的 prefix 前缀信息自动配置 IPv6 地址,组成方式是 Prefix + (EUI64 or 随机)。Stateless 也称为 SLAAC(Stateless address autoconfiguration)
▷ 有状态(Stateful)
通过 DHCPv6 方式获得 IPv6 地址
其中 “有状态” 又分为 2 种
▷ 有状态 DHCPv6(Stateful DHCPv6)
IPv6 地址、其他参数(如 DNS)均通过 DHCPv6 获取
▷ 无状态 DHCPv6(Stateless DHCPv6)
IPv6 地址依然通过路由通告 RA 方式生成,其他参数(如 DNS)通过 DHCPv6 获取
为了避免混淆,在此解释下有状态、无状态到底是什么。
首先,请明确一点,有状态、无状态仅针对于 IPv6 地址分配方式,并不包含其他参数.
▷ 有状态:可控、可管理
在网络中存在一个 IP 地址管理者,它能够识别客户端,根据不同的客户端,分配对应的 IPv6 地址,客户端与服务端之间需要维护 IP 地址的租期及续约。目前实现这种效果的,就是 DHCPv6 协议,IP 地址管理者就是 DHCPv6 Server
▷ 无状态:不可控、难管理
在网络中只有网关,没有 IP 地址管理者。因此无人去识别客户端,每个客户端根据网关发送的相同的 RA 报文内容,自行配置 IPv6 地址
三. RA 报文中 3 个关键的 Flag
RA 报文中存在 3 个关键的 flag bit:
flag type | 状态 | 置位(bit) | 含义 |
---|---|---|---|
Autonomous flag(A flag) 表示是否配置无状态 IP。 在一个 RA 报文中,可存在多个 prefix,比如 2401::/64、2402::/64、2403::/64,每个 prefix 都可以独立配置 A flag。 |
on | 1 | 表示客户端应当在该 prefix 范围内自动生成 IPv6 地址(客户端通过 DAD 自行保证地址可用),并配置子网路由条目、网关。 |
off | 0 | 表示客户端不应当在该 prefix 范围内自动生成 IPv6 地址,但是可以配置子网路由条目、网关。 | |
Managed flag(M flag) 表示是否配置有状态 IP。 M flag 是 RA 报文的全局参数,一个 RA 报文只有一个 M flag。 |
on | 1 | 表示在 stateless 流程结束后开始 stateful 流程,也就是告诉客户端可以通过 DHCPv6 来获得 IPv6 地址和其他参数(如 DNS 列表) |
off | 0 | 表示不通过 DHCPv6 来获得 IPv6 地址。 | |
Other flag( O flag) 表示是否通过 DHCPv6 获得除 IP 以外的其他参数(如 DNS 列表)。 O flag 也是 RA 报文中的全局参数,一个 RA 报文只有一个 O flag。 注意:仅当 M flag 为 off 时,该参数才会被读取。 |
on | 1 | 当 M flag 为 on,或者 M flag 为 off 且至少有一个 A flag 为 on 时,将通过 DHCPv6 获得其他参数。 |
off | 0 | 当 M flag 为 on 时,依然将通过 DHCPv6 获得其他参数;当 M flag 也为 off 时,将不通过 DHCPv6 获得其他参数。 |
四. 流程示意图
无状态和有状态并不是相互对立的,可以同时存在,也就是一张网卡上可以同时出现通过 RA 生成的 IP 以及通过 DHCPv6 获得的 IP。通过下面这张笔者绘制的流程图可知晓其中奥秘。
从图中可以看到,顺序为:
1️⃣ Stateless 自动配置“链路本地地址”
2️⃣ Stateless 自动配置“全球地址”(或“唯一本地地址”)
3️⃣ Stateful 自动配置“全球地址”(或“唯一本地地址”)和其他参数,其中 Stateful 阶段中存在 Stateful DHCPv6 或 Stateless DHCPv6
注意:
部分客户端操作系统或网络管理器当 Stateless 阶段没有收到 RA 报文后,就到此结束,不会走 Stateful 阶段,比如 CentOS 7、Ubuntu 17 的默认逻辑都是这样,而 windows server 2012 就会继续走 Stateful 阶段。
五. 测试获得 IP 效果
测试环境:客户端基于 CentOS 7+NetworkManager(即系统默认的网络管理方式)进行测试
▪ 网关会发送 RA 报文,包含一个 prefix
▪ DHCPv6 Server 会分配 IP、DNS
测试内容:测试 M、O、A flag 在所有排列组合的情况下
▪ 客户端是否会通过 RA 报文配置无状态 IP
▪ 客户端是否会通过 RA 报文配置 prefix 子网路由
▪ 客户端是否会通过 RA 报文配置 gateway
▪ 客户端是否会通过 DHCPv6 获得有状态 IP
▪ 客户端是否会通过 DHCPv6 获得 DNS
测试结果:
六. 应用场景(选择无状态还是有状态)
何时采用无状态、何时采用有状态,关键看应用场景。核心在于是否需要控制IP地址,比如保持IP不变,如果需要控制,就采用有状态;如果无需控制,就采用无状态。
▷ 服务端领域:如对外提供服务,通常需要采用有状态IP。因为业务IP的突然变化容易导致业务中断(除非做好服务发现)
▷ 客户端领域:如移动设备、办公室内PC机,只需要上IPv6互联网,并不需要对外提供服务,可以采用无状态IP
七. 后续内容
由于篇幅有限,本文尚未贴出实验的详细配置。将会在《IPv6系列》后续文章里,贴出实验的完整信息,包括RA、DHCPv6的配置,以及客户端的配置,敬请关注。
附. 参考文档
http://www.6deploy.eu/tutorials/080-6deploy_ipv6_autoconfiguration_mechs_v0_4.pdf
DHCPv6 基础
发表于 2018-02-01
DHCPv6 简介
IPv6 动态主机配置协议 DHCPv6 (Dynamic Host Configuration Protocol for IPv6) 是针对 IPv6 编址方案设计,为主机分配 IPv6 地址 / 前缀和其他网络配置参数。
目的:
IPv6 协议具有地址空间巨大的特点,但同时长达 128 比特的 IPv6 地址又要求高效合理的地址自动分配和管理策略。IPv6 无状态地址配置方式(参看协议 RFC2462)是目前广泛采用的 IPv6 地址自动配置方式。配置了该协议的主机只需相邻设备开启 IPv6 路由通告功能,即可以根据通告报文包含的前缀信息自动配置本机地址。
无状态地址配置方案中设备并不记录所连接的 IPv6 主机的具体地址信息,可管理性差。而且当前无状态地址配置方式不能使 IPv6 主机获取 DNS 服务器的 IPv6 地址等配置信息,在可用性上有一定缺陷。对于互联网服务提供商来说,也没有相关的规范指明如何向设备自动分配 IPv6 前缀,所以在部署 IPv6 网络时,只能采用手动配置的方法为设备配置 IPv6 地址。
DHCPv6 技术解决了这一问题。DHCPv6 属于一种有状态地址自动配置协议。
与其他 IPv6 地址分配方式(手工配置、通过路由器通告消息中的网络前缀无状态自动配置等)相比,DHCPv6 具有以下优点:
- 更好地控制 IPv6 地址的分配。DHCPv6 方式不仅可以记录为 IPv6 主机分配的地址,还可以为特定的 IPv6 主机分配特定的地址,以便于网络管理。
- DHCPv6 支持为网络设备分配 IPv6 前缀,便于全网络的自动配置和网络层次性管理。
- 除了为 IPv6 主机分配 IPv6 地址 / 前缀外,还可以分配 DNS 服务器 IPv6 地址等网络配置参数。
DHCPv6 原理描述
DHCPv6 概述:
DHCPv6 是一种运行在客户端和服务器之间的协议,与 IPv4 中的 DHCP 一样,所有的协议报文都是基于 UDP 的。但是由于在 IPv6 中没有广播报文,因此 DHCPv6 使用组播报文,客户端也无需配置服务器的 IPv6 地址。
IPv6 地址分配类型:
IPv6 协议具有地址空间巨大的特点,但同时长达 128 比特的 IPv6 地址又要求高效合理的地址自动分配和管理策略。
- 手动配置。手动配置 IPv6 地址 / 前缀及其他网络配置参数(DNS、NIS、SNTP 服务器地址等参数)。
- 无状态自动地址分配。由接口 ID 生成链路本地地址,再根据路由通告报文 RA(Router Advertisement)包含的前缀信息自动配置本机地址。
- 有状态自动地址分配,即 DHCPv6 方式。DHCPv6 又分为如下两种:
- DHCPv6 有状态自动分配。DHCPv6 服务器自动分配 IPv6 地址 / PD 前缀及其他网络配置参数(DNS、NIS、SNTP 服务器地址等参数)。
- DHCPv6 无状态自动分配。主机 IPv6 地址仍然通过路由通告方式自动生成,DHCPv6 服务器只分配除 IPv6 地址以外的配置参数,包括 DNS、NIS、SNTP 服务器等参数。 </