第115篇:IPv6 地址配置:SLAAC、有状态 DHCPv6、无状态 DHCPv6

关键词:SLAAC、EUI-64、DHCPv6、有状态DHCPv6、无状态DHCPv6、RA Flag、地址自动配置


一、引言

在前一篇第114篇中,我们深入学习了 NDP 协议,特别是 RA 报文在路由器发现和前缀通告中的作用。RA 报文中的 M 和 O Flag 决定了终端如何获取 IPv6 地址和其他网络参数。

IPv6 的地址配置方式远比 IPv4 丰富,主要包括三种模式:SLAAC(无状态地址自动配置)、有状态 DHCPv6 和无状态 DHCPv6。理解这些配置方式的原理和适用场景,是 IPv6 网络规划的基础。

二、核心概念

2.1 IPv6 地址配置方式对比

配置方式 地址获取 其他参数(DNS等) 管理复杂度 适用场景
SLAAC 主机自行构造 无 低 简单网络,不需要集中管理
有状态 DHCPv6 DHCPv6 服务器分配 DHCPv6 服务器分配 高 需要审计、固定地址分配
无状态 DHCPv6 主机自行构造 DHCPv6 服务器分配 中 SLAAC + DNS 集中管理
SLAAC + 无状态 DHCPv6 混合 混合 中 最常用方案
手动配置 管理员手动分配 管理员手动分配 最高 服务器、网络设备等关键节点

2.2 RA Flag 与地址配置方式的关系

M Flag O Flag 地址获取方式 其他配置获取方式
0 0 SLAAC 无,完全无状态
0 1 SLAAC DHCPv6(无状态)
1 0 DHCPv6(有状态) DHCPv6(有状态)
1 1 DHCPv6(有状态) DHCPv6(有状态)

2.3 SLAAC 地址构造原理

SLAAC 中,主机通过 RA 报文获取前缀信息后,自行构造 IPv6 地址:

SLAAC 地址构造原理 - 图示

EUI-64 方式

EUI-64 将主机的 48 位 MAC 地址转换为 64 位接口标识符:

步骤 操作 示例
原始 MAC 48 位 MAC 地址 00e0-fc12-3456
分割 在高 24 位和低 24 位中间插入 fffe 00e0-fc-ff-fe-12-3456
反转第 7 位 将第 7 位(U/L 位)取反 02e0-fc-ff-fe-12-3456
最终接口 ID 64 位接口标识符 02e0:fcff:fe12:3456

注意:EUI-64 会暴露主机的 MAC 地址信息,存在隐私泄露风险。现代操作系统默认使用隐私扩展(Privacy Extensions)生成随机的接口标识符。

2.4 DHCPv6 报文类型

报文类型 方向 功能
SOLICIT 客户端 → 服务器 请求服务器信息
ADVERTISE 服务器 → 客户端 通告服务器可服务
REQUEST 客户端 → 服务器 请求地址分配
CONFIRM 客户端 → 服务器 确认当前网络是否仍适用
RENEW 客户端 → 服务器 续租地址
REBIND 客户端 → 服务器 绑定期满前续租
REPLY 服务器 → 客户端 响应客户端请求
RELEASE 客户端 → 服务器 释放地址
DECLINE 客户端 → 服务器 拒绝冲突地址
INFORM 客户端 → 服务器 已有地址,仅请求其他配置

三、技术细节

3.1 SLAAC 详细流程

SLAAC 详细流程 - 图示

3.2 DHCPv6 服务器部署模式

模式 说明 适用场景
本地 DHCPv6 服务器 DHCPv6 服务器直接连接在本链路 小型网络
DHCPv6 Relay 通过 DHCPv6 中继代理转发到远程服务器 大型网络
Router as DHCPv6 Server 路由器同时充当 DHCPv6 服务器 接入层简化管理

3.3 DHCPv6 Relay 配置

当 DHCPv6 服务器不在本地链路上时,需要通过 DHCPv6 Relay 代理转发报文:

DHCPv6 Relay 配置 - 图示

四、实战配置/案例分析

4.1 SLAAC + 无状态 DHCPv6(推荐方案)

# ========== 路由器侧配置 ==========

# 1. 配置接口 IPv6 地址
[HUAWEI] interface GigabitEthernet 0/0/0
[HUAWEI-GigabitEthernet0/0/0] ipv6 enable
[HUAWEI-GigabitEthernet0/0/0] ipv6 address 2001:db8:1::1/64

# 2. 配置 RA 报文,允许 SLAAC(A=1)
[HUAWEI-GigabitEthernet0/0/0] ipv6 nd ra other-config enable
# O=1,告知主机使用 DHCPv6 获取 DNS 等配置

# ========== DHCPv6 服务器配置 ==========

# 3. 全局启用 DHCPv6
[HUAWEI] dhcpv6 enable

# 4. 配置 DHCPv6 前缀池(无状态,不分配地址)
[HUAWEI] dhcpv6 pool IPv6POOL
[HUAWEI-dhcpv6-IPv6POOL] dns-server 2001:db8::dns1 2001:db8::dns2
[HUAWEI-dhcpv6-IPv6POOL] domain-name example.com
[HUAWEI-dhcpv6-IPv6POOL] quit

# 5. 在接口上应用 DHCPv6 服务器
[HUAWEI] interface GigabitEthernet 0/0/0
[HUAWEI-GigabitEthernet0/0/0] dhcpv6 server IPv6POOL

# ========== 验证 ==========
[HUAWEI] display dhcpv6 pool IPv6POOL
[HUAWEI] display dhcpv6 client

4.2 有状态 DHCPv6 配置

# ========== 有状态 DHCPv6(服务器分配完整地址) ==========

# 1. 配置 DHCPv6 地址池
[HUAWEI] dhcpv6 pool STATEFUL_POOL
[HUAWEI-dhcpv6-STATEFUL_POOL] prefix 2001:db8:2::/64 valid-lifetime 604800 preferred-lifetime 86400
[HUAWEI-dhcpv6-STATEFUL_POOL] dns-server 2001:db8::dns1
[HUAWEI-dhcpv6-STATEFUL_POOL] domain-name example.com
[HUAWEI-dhcpv6-STATEFUL_POOL] quit

# 2. 在接口上应用
[HUAWEI] interface GigabitEthernet 0/0/1
[HUAWEI-GigabitEthernet0/0/1] ipv6 enable
[HUAWEI-GigabitEthernet0/0/1] ipv6 address 2001:db8:2::1/64
[HUAWEI-GigabitEthernet0/0/1] dhcpv6 server STATEFUL_POOL

# 3. RA 设置 M=1,告知主机使用有状态 DHCPv6
[HUAWEI-GigabitEthernet0/0/1] ipv6 nd ra managed-config enable

4.3 DHCPv6 Relay 中继配置

# ========== 接入层交换机(Relay) ==========
[HUAWEI] dhcpv6 enable

[HUAWEI] interface GigabitEthernet 0/0/0
[HUAWEI-GigabitEthernet0/0/0] ipv6 enable
[HUAWEI-GigabitEthernet0/0/0] ipv6 address 2001:db8:3::1/64
# 指定 DHCPv6 服务器地址(通过中继)
[HUAWEI-GigabitEthernet0/0/0] dhcpv6 relay server ipv6 2001:db8::dhcpv6server
[HUAWEI-GigabitEthernet0/0/0] quit

# ========== 核心层路由器(Relay) ==========
[HUAWEI] interface GigabitEthernet 0/0/1
[HUAWEI-GigabitEthernet0/0/1] ipv6 enable
[HUAWEI-GigabitEthernet0/0/1] ipv6 address 2001:db8:3::2/64
[HUAWEI-GigabitEthernet0/0/1] dhcpv6 relay server ipv6 2001:db8::dhcpv6server

4.4 故障案例:SLAAC 地址获取失败

场景描述:部署 SLAAC 后,终端无法自动获取 IPv6 地址。

排查过程:

  1. 检查 RA 报文:
[SW] display ipv6 interface GigabitEthernet 0/0/0
# 接口 IPv6 地址正常,NDP 已启用

[SW] display ipv6 nd ra configuration interface GigabitEthernet 0/0/0
# RA 配置正常
  1. 抓包分析:
[SW] packet-capture interface GigabitEthernet 0/0/0
# RS 报文正常,但 RA 报文中 Autonomous Flag = 0
  1. 根因确认:RA 报文中 Autonomous Flag 被手动关闭了,主机收到 RA 后认为不支持 SLAAC,不会自行构造地址。

处理措施:

# 启用 Autonomous Flag
[HUAWEI] interface GigabitEthernet 0/0/0
[HUAWEI-GigabitEthernet0/0/0] ipv6 nd ra autonomous-flag enable
# 验证
[HUAWEI] display ipv6 nd ra configuration interface GigabitEthernet 0/0/0
# Autonomous Flag 应显示为 Enable

4.5 故障案例:DHCPv6 地址耗尽

场景描述:有状态 DHCPv6 网络中,部分新接入终端无法获取 IPv6 地址。

排查过程:

  1. 检查地址池使用情况:
[SW] display dhcpv6 pool STATEFUL_POOL
# 地址池:2001:db8:2::/64
# 已分配地址:16384(达到上限)
# 可用地址:0
  1. 根因分析:地址池大小为 /64 接口 ID 段,但配置的有效租期过长(604800 秒 = 7 天),大量离线终端的地址占用了地址池资源。

处理措施:

# 方案一:缩短租期
[HUAWEI] dhcpv6 pool STATEFUL_POOL
[HUAWEI-dhcpv6-STATEFUL_POOL] prefix 2001:db8:2::/64 valid-lifetime 86400 preferred-lifetime 43200
[HUAWEI-dhcpv6-STATEFUL_POOL] quit

# 方案二:扩大地址池
[HUAWEI] dhcpv6 pool STATEFUL_POOL
[HUAWEI-dhcpv6-STATEFUL_POOL] prefix 2001:db8:2::/48 valid-lifetime 86400 preferred-lifetime 43200
[HUAWEI-dhcpv6-STATEFUL_POOL] quit

# 方案三:清理已过期但被占用的地址
[HUAWEI] reset dhcpv6 pool STATEFUL_POOL allocated-pool

五、总结

项目 说明
SLAAC 主机自行构造地址,配置简单,适合大规模部署
EUI-64 基于 MAC 地址构造接口 ID,存在隐私问题
有状态 DHCPv6 服务器分配地址,适合需要审计和集中管理的场景
无状态 DHCPv6 SLAAC 分配地址 + DHCPv6 分配 DNS 等,最常用方案
RA Flag M=0,O=1 为 SLAAC+无状态 DHCPv6;M=1 为有状态 DHCPv6
华为推荐 SLAAC + 无状态 DHCPv6(M=0, O=1),兼顾便捷性和可管理性

思考

  1. SLAAC 使用 EUI-64 构造接口 ID 时,会暴露主机 MAC 地址。如果不希望暴露 MAC 地址,有什么替代方案?

  2. 在有状态 DHCPv6 中,如果 DHCPv6 服务器故障,正在使用已分配地址的终端会受到影响吗?新终端呢?

  3. DHCPv6 和 DHCPv4 在报文交互上有何主要区别?为什么 DHCPv6 的初始请求使用组播而不是广播?

下篇预告:第116篇:IPv6 路由:静态与 OSPFv3 基础