对自动分配IPv6地址的Stateless(无状态)和Stateful(有状态)方法的深入研究
萧慢哥原创,欢迎转载
目录
▪ 一.如何生成链接本地地址
▪ 二.如何生成全局地址
▪ 三. RA 数据包中的 3 个关键标志
▪ 四. 流程图
▪ 五.测试获取IP效果
▪ 六. 应用场景(选择无状态或有状态)
▪ 七.关注内容
▪ 附件。参考文件
一.如何生成链接本地地址
有两种方法可以生成“链接本地地址”
▷ 手动配置
p>
▷ 自动配置
“自动配置”分为
▷ eui64:根据算法从mac地址转换
▷ stable_secret:随着网络环境的变化,其值在固定的网络环境中是固定的
▷ random:随机生成
二.全局地址生成方法
p>
生成“全球单播地址”(或“唯一本地地址”),有两种方式
▷ 手动配置
▷ 自动配置
“自动配置”分为
▷ Stateless:根据RA(Router Advertisement)消息中包含的前缀信息,自动配置IPv6地址。是前缀 +(EUI64 或随机)。 Stateless 也可以称为 SLAAC(Stateless address autoconfiguration)
▷有状态:通过DHCPv6获取IPv6地址
有两种类型的“有状态”
p>
▷ Stateful DHCPv6(Stateful DHCPv6):IPv6地址,其他参数(如DNS)通过DHCPv6获取
▷ Stateless DHCPv6 (Stateless DHCPv6) : IPv6地址仍然是通过路由通告RA生成,其他参数(如DNS)通过DHCPv6获取
为了避免混淆,本说明中stateful和stateless是什么意思:首先请明确,stateful和stateless只用于IPv6地址分配,不包含其他参数。
▷ 有状态:可控和可管理。网络中有IP地址管理器,可以识别客户端根据不同的客户端,分配对应的IPv6地址,客户端和服务器之间需要维护IP地址的租用期和更新。目前使用DHCPv6协议来实现这个效果,IP地址管理器就是DHCPv6 Server。
▷ 无状态:无法控制且难以管理。网络中只有一个网关,没有 IP 地址管理器。所以没有人可以识别客户端,每个客户端根据网关内容发送相同的RA报文,自己配置IPv6地址
三. RA 消息中的 3 个关键标志
RA 消息中有 3 个密钥标志位:
▷Autonomous flag(简称a flag):表示是否配置了无状态IP。一个RA报文中可以有多个前缀,例如2401::/6 4、2402::/64、2403::/64,每个前缀可以独立配置A标志
▪ 开启时(对应位为1):表示客户端应自动生成前缀范围内的IPv6地址(客户端确保该地址通过DAD可用),并配置子网路由入口和网关
▪ 关闭时(对应位为0):表示客户端不应自动生成前缀范围内的IPv6地址,但可以配置子网路由条目和网关
▷Managed flag(简称M flag):表示配置是否有Status IP。 M标志是RA消息的全局参数,一个RA消息只有一个M标志
▪ 开启时(对应位为1):表示有状态进程在无状态进程结束后开始,即告诉客户端可以获取IPv6地址等参数(如作为 DNS 列表)
▪ 关闭时(对应位为0):表示不是通过DHCPv6获取IPv6地址。
▷Other flag(简称O flag):表示是否通过DHCPv6获取IP以外的参数(如DNS列表)。 O标志也是RA消息中的全局参数。 RA 消息只有一个 O 标志。注意:该参数只有在 M 标志关闭时才会被读取。
▪ 开启时(对应位为1):当M标志开启时可用于本地测试的ip地址是,或者当M标志关闭且至少有一个A标志开启时,会通过DHCPv6获取其他参数
▪ 关闭时(对应位为0):当M标志开启时,其他参数仍会通过DHCPv6获取;当M标志也关闭时,其他参数将不会通过DHCPv6获取DHCPv6 参数
四. 流程图
无状态和有状态不是相互排斥的,它们可以同时存在,即一个网卡可以同时出现,并且通过RA产生通过DHCPv6获得的IP和通过DHCPv6获得的IP。从下面作者绘制的流程图就可以知道其中的奥妙。
从图中可以看出,序列为:
1️⃣无状态自动配置“链接本地地址”
2️⃣无状态自动配置“全局地址”(或“唯一本地地址”)
3️⃣ Stateful 自动配置“全局地址”(或“唯一本地地址”)等参数,其中 Stateful DHCPv6 或 Stateless DHCPv6 存在于 Stateful 阶段
注意:有些客户端操作系统或网络管理员处于Stateless阶段,如果没有收到RA消息,就结束了,不会进入Stateful阶段。比如centos的默认逻辑7、Ubuntu 17也是一样,windows server 2012会继续进入Stateful阶段。
五.测试获取IP效果
测试环境:客户端基于CentOS 7+NetworkManager(即系统默认的网络管理方式)进行测试
▪ 网关将发送 RA 消息,包括前缀
▪ DHCPv6 服务器将分配 IP、DNS
测试内容:测试M、O、A标志的所有排列组合
▪ 客户端是否会通过 RA 包配置无状态 IP
▪ 客户端是否会通过 RA 数据包配置前缀子网路由
▪ 客户端是否会通过RA消息配置网关
▪ 客户端是否会通过 DHCPv6 获取有状态 IP
▪ 客户端是否会通过 DHCPv6 获取 DNS
测试结果:
六. 应用场景(选择无状态或有状态)
什么时候用stateless,什么时候用state,关键要看应用场景。核心是IP地址是否需要控制,比如保持IP不变。如果需要控制,则使用有状态;如果不需要控制,则使用无状态。
▷ 服务器域:如果对外提供服务,通常需要使用有状态IP。因为业务IP的突然变化很容易导致业务中断(除非做了服务发现)
▷ 客户端领域:如移动设备、办公PC,只需要连接IPv6互联网,不需要对外提供服务,可以使用无状态IP
七.以下内容
由于篇幅有限可用于本地测试的ip地址是,本文没有贴出实验的详细配置。在“IPv6系列”的后续文章中,将贴出完整的实验信息,包括RA、DHCPv6的配置,以及客户端的配置,敬请期待。
附件。参考文件
http://www.6deploy.eu/tutorials/080-6deploy_ipv6_autoconfiguration_mechs_v0_4.pdf https://cshihong.github.io/2018/02/01/DHCPv6基础/