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

关键词

IPv6、SLAAC、DHCPv6、有状态配置、无状态配置、RA、EUI-64


一、IPv6 的三种地址配置方式

IPv6 地址配置有三种方式,通过 RA 报文中的标志位来告诉终端使用哪种方式:

方式 RA 标志位 地址分配 其他信息(DNS等)
SLAAC M=0, O=0 终端基于 RA 前缀 + EUI-64 自行生成 无(无 DNS 信息)
无状态 DHCPv6 M=0, O=1 终端基于 RA 自行生成 DHCPv6 提供 DNS 等
有状态 DHCPv6 M=1 DHCPv6 分配完整地址 DHCPv6 提供 DNS 等

1.1 RA 报文中的两个关键标志位

RA 报文中:
  M 标志(Managed Address Configuration): 
    1 → 使用有状态 DHCPv6 获取地址
    0 → 不使用 DHCPv6 获取地址

  O 标志(Other Configuration):
    1 → 使用 DHCPv6 获取其他信息(DNS、域名等)
    0 → 不使用 DHCPv6

二、SLAAC(Stateless Address Autoconfiguration)

2.1 原理

SLAAC 允许终端不依赖任何服务器自行生成 IPv6 地址。

1. 终端发送 RS → 路由器回复 RA
2. RA 包含:前缀(2001:DB8::/64)+ 前缀长度
3. 终端使用 EUI-64 或隐私扩展生成接口标识
4. 生成地址 + DAD 检查 → 完成

2.2 EUI-64 地址生成

EUI-64 将 MAC 地址(48位)转换为 IPv6 接口标识(64位):

MAC 地址:    00-11-22-33-44-55
               │
第7位翻转(U/L位):00 → 02
               │
在中间插入 FFFE:02-11-22-FF-FE-33-44-55
               │
接口标识:   0211:22FF:FE33:4455
               │
完整 IPv6 地址:2001:DB8::211:22FF:FE33:4455/64

2.3 隐私扩展(Privacy Extension)

EUI-64 生成的接口标识固定不变,导致用户的 IPv6 地址长期不变,容易被追踪。

RFC 4941 定义了隐私扩展,临时地址定期变化:

# Windows 默认启用隐私扩展
netsh interface ipv6 set privacy state=enabled

# Linux 配置
# /etc/sysctl.conf
net.ipv6.conf.all.use_tempaddr = 2

# 华为交换机作为终端时
ipv6 privacy-extensions

2.4 配置

# 路由器上配置 RA
interface GigabitEthernet0/0/1
 ipv6 enable
 ipv6 address 2001:DB8::1/64
 ipv6 nd ra-interval 30              # RA 发送间隔
 ipv6 nd ra-lifetime 1800            # RA 生命周期
 undo ipv6 nd ra-hoplimit unspecified

# 取消 M 和 O 标志(SLAAC 默认)
# 不需要额外配置

三、无状态 DHCPv6

3.1 原理

终端地址来自 SLAAC(RA 前缀),但 DNS 等额外信息通过 DHCPv6 获取。

终端 ──┬── RA (M=0, O=1)     ← 路由器:给你前缀,自己算地址
       │
       └── DHCPv6 Inform   → DHCPv6 服务器
                              └── 回复 DNS 服务器地址

3.2 配置

# ===== 路由器配置 =====
interface GigabitEthernet0/0/1
 ipv6 enable
 ipv6 address 2001:DB8::1/64
 ipv6 nd ra-interval 30
 ipv6 nd other-config-flag      # 设置 O=1(无状态 DHCPv6)

# ===== DHCPv6 服务器配置(可在路由器上)=====
dhcpv6 pool STATELESS
 dns-server 2001:DB8::100
 domain-name example.com

interface GigabitEthernet0/0/1
 dhcpv6 server STATELESS

四、有状态 DHCPv6

4.1 原理

终端完全通过 DHCPv6 来获取地址和其他信息,类似 IPv4 DHCP。

终端 ──┬── RA (M=1)            ← 路由器:去 DHCPv6 服务器拿地址
       │
       └── DHCPv6 Solicit   → DHCPv6 服务器
                              └── 回复 Advertise(包含 IPv6 地址)
   ←── DHCPv6 Request    ←   └── 回复 Reply(地址确认 + DNS)

4.2 配置

# ===== RA 配置:启用 M 标志 =====
interface GigabitEthernet0/0/1
 ipv6 enable
 ipv6 address 2001:DB8::1/64
 ipv6 nd managed-config-flag    # 设置 M=1(有状态 DHCPv6)

# ===== DHCPv6 服务器配置 =====
dhcpv6 pool STATEFUL
 address prefix 2001:DB8::/64
 dns-server 2001:DB8::100
 domain-name example.com
 excluded-address 2001:DB8::1    # 排除网关地址

interface GigabitEthernet0/0/1
 dhcpv6 server STATEFUL

五、三种方式的对比

特性 SLAAC 无状态 DHCPv6 有状态 DHCPv6
地址来源 终端自生成 终端自生成 DHCPv6 分配
DNS 获取 DHCPv6 DHCPv6
服务器需求 路由器即可 需要 DHCPv6 服务器 需要 DHCPv6 服务器
可追踪性 EUI-64 固定(可启用隐私扩展) 同左 可追踪(但通过租约管理)
管理度
典型场景 家庭/小企业 企业需要 DNS 控制 运营商/大型企业

六、实际部署中的 DHCPv6 配置

6.1 华为路由器作为 DHCPv6 服务器

# ===== 创建地址池 =====
dhcpv6 pool CAMPUS
 address prefix 2001:DB8:1::/64
 dns-server 2001:DB8::100
 dns-server 2001:DB8::101
 domain-name example.com

# ===== 接口应用 =====
interface Vlanif10
 ipv6 enable
 ipv6 address 2001:DB8:1::1/64
 ipv6 nd managed-config-flag
 dhcpv6 server CAMPUS

6.2 华为路由器作为 DHCPv6 Relay

interface Vlanif10
 ipv6 enable
 ipv6 address 2001:DB8:1::1/64
 ipv6 nd managed-config-flag
 dhcpv6 relay destination 2001:DB8::100

七、终端侧地址查看

# Windows
ipconfig /all | findstr IPv6

# Linux
ip -6 addr show

# 华为交换机/路由器
display ipv6 interface brief

八、实际案例:混合部署策略

8.1 企业网推荐方案

许多企业使用 SLAAC + 无状态 DHCPv6 的组合:

RA (M=0, O=1)
  ├── 地址:SLAAC(从 RA 前缀 + EUI-64 生成)
  └── DNS:DHCPv6 Inform 获取

优势: - 地址自动配置,无需 DHCPv6 参与地址分配(减轻服务器负担) - DNS 等参数统一管理

8.2 运营商推荐方案

运营商通常使用有状态 DHCPv6:

# M=1:完全由 DHCPv6 控制地址分配
# 便于审计、计费和地址回收

九、总结

方式 RA 标志 核心机制 适用场景
SLAAC M=0, O=0 EUI-64 / 隐私扩展 家庭/小企业
无状态 DHCPv6 M=0, O=1 SLAAC 地址 + DHCPv6 DNS 企业网(推荐)
有状态 DHCPv6 M=1 完全 DHCPv6 运营商/大型企业

十、思考

  1. SLAAC 中终端是如何生成 IPv6 地址的?
  2. RA 报文的 M 标志和 O 标志分别控制什么?
  3. EUI-64 地址为什么可能导致隐私问题?如何解决?
  4. 如果只配置 SLAAC,终端能获取 DNS 服务器地址吗?
  5. 什么场景下应该使用有状态 DHCPv6 而不是 SLAAC?

下篇预告:第116篇《IPv6 路由——静态与 OSPFv3 基础》——讲解 IPv6 静态路由配置和 OSPFv3 的基本原理,包括 OSPFv3 与 OSPFv2 的差异。