1. IPv6无状态地址自动配置(SLAAC)基础
IPv6的无状态地址自动配置(SLAAC)是IPv6协议栈中一项革命性的设计,它让设备能够不依赖中心化的DHCP服务器,仅通过路由器宣告(RA)和路由器请求(RS)报文交互,就能自动完成地址配置。想象一下,当你把一台新电脑接入公司网络,它就像个聪明的助手,不需要你手动输入任何参数,自己就能找到正确的地址和网关——这就是SLAAC的魔力。
核心原理其实很简单:路由器通过RA报文周期性广播网络前缀(通常是前64位),主机收到后结合自己的接口标识符(后64位)生成完整的128位IPv6地址。这个接口标识符最常用的生成方式就是EUI-64算法——把48位MAC地址"劈成两半",中间插入FFFE,再把第7位取反。比如MAC地址00:0C:29:12:34:56会变成020C:29FF:FE12:3456。不过现在出于隐私考虑,Windows等系统默认改用随机生成的接口ID。
这里有个实际抓包的例子:当主机刚接入网络时,会立刻发送RS报文(目的地址FF02::2,对应所有路由器),路由器收到后回复RA报文(目的地址FF02::1,对应所有节点)。在华为设备上,你可以用这个命令抓取ICMPv6报文:
<Huawei> display ipv6 packet filter icmpv6 ICMPv6 packet(s) matched 2023-05-01 10:23:45.630 Interface=GigabitEthernet0/0/1 Src=FE80::20C:29FF:FE12:3456 Dst=FF02::2 Type=133(Router Solicitation) Code=02. RA/RS报文深度解析
RA报文就像IPv6网络的"布告栏",承载着关键的网络参数。用Wireshark拆解一个典型RA报文,你会发现这些核心字段:
- Cur Hop Limit:建议的跳数限制,类似IPv4的TTL
- M/O标志位:这对"开关组合"决定了地址分配方式(后文会详解)
- Router Lifetime:默认路由的有效期(华为默认1800秒)
- Reachable Time:邻居可达性检测超时
- Retrans Timer:邻居请求报文重传间隔
- Prefix Information选项:包含前缀、前缀长度以及关键的A/L标志
RS报文则简单得多,主要是主机主动"敲门"请求RA。有趣的是,华为设备默认不主动发送RA,需要先执行:
[Huawei-GigabitEthernet0/0/1] undo ipv6 nd ra halt我曾遇到过个典型案例:某企业部署IPv6后,部分主机获取不到地址。抓包发现RA间隔设置过长(默认200-600秒随机),而主机等待RS响应超时仅3秒。通过调整RA间隔解决:
[Huawei-GigabitEthernet0/0/1] ipv6 nd ra interval 10 303. 华为设备SLAAC配置实战
在华为路由器上配置完整的SLAAC需要三步走:
第一步:启用IPv6基础功能
<Huawei> system-view [Huawei] ipv6 [Huawei] interface GigabitEthernet 0/0/1 [Huawei-GigabitEthernet0/0/1] ipv6 enable第二步:配置全局地址前缀
[Huawei-GigabitEthernet0/0/1] ipv6 address 2001:DB8:100::1/64 [Huawei-GigabitEthernet0/0/1] ipv6 address auto global第三步:精细调整RA参数
[Huawei-GigabitEthernet0/0/1] ipv6 nd ra prefix 2001:DB8:100::/64 2592000 604800 [Huawei-GigabitEthernet0/0/1] ipv6 nd ra valid-lifetime 86400 [Huawei-GigabitEthernet0/0/1] ipv6 nd ra preferred-lifetime 14400这里有个实用技巧:preferred-lifetime(首选生命周期)建议设为valid-lifetime的1/6,这样当地址需要淘汰时,会给现有连接充分的迁移时间。我曾经配置过某金融系统,把首选时间设为7天,有效时间30天,确保交易会话平稳过渡。
4. A/M/O标志位的组合艺术
这三个标志位就像"魔法开关",组合出不同的地址分配策略:
| A标志 | M标志 | O标志 | 分配模式 | 适用场景 |
|---|---|---|---|---|
| 1 | 0 | 0 | 纯SLAAC | 只需基本联网的小型网络 |
| 1 | 0 | 1 | SLAAC+无状态DHCPv6 | 需要DNS等额外配置 |
| 0 | 1 | 0 | 有状态DHCPv6 | 需要严格管控的企业网 |
| 0 | 0 | 0 | 仅分配默认路由 | 特殊场景 |
在华为设备上配置这些标志位:
# 启用无状态DHCPv6(A=1,O=1) [Huawei-GigabitEthernet0/0/1] ipv6 nd autoconfig other-flag # 启用有状态DHCPv6(M=1) [Huawei-GigabitEthernet0/0/1] ipv6 nd autoconfig managed-address-flag遇到过的一个经典问题:某学校网络同时存在Windows和Linux主机,Windows因隐私扩展功能生成临时地址,导致访问控制策略失效。解决方案是在RA中关闭A标志,强制使用DHCPv6:
[Huawei-GigabitEthernet0/0/1] ipv6 nd ra prefix 2001:DB8:100::/64 no-autoconfig5. 地址状态与故障排查
通过display ipv6 interface可以看到地址的详细状态:
<Huawei> display ipv6 interface GigabitEthernet 0/0/1 IPv6 address: 2001:DB8:100::1/64 [SLAAC 2023-05-01 10:00:00 2592000S] FE80::20C:29FF:FE12:3456/64 Address state: Preferred lifetime 604800s, valid lifetime 2592000s地址的生命周期分为几个阶段:
- 试验(Tentative):正在进行DAD检测
- 首选(Preferred):可自由使用的新地址
- 不赞成(Deprecated):现有连接可继续,新连接应避免使用
- 无效(Invalid):地址已失效
排查SLAAC故障时,我常用的三板斧:
- 抓包验证RS/RA交互:
tcpdump -i eth0 icmp6 and (ip6[40] == 133 or ip6[40] == 134) - 检查路由器配置:确认
undo ipv6 nd ra halt且前缀正确 - 主机端诊断:
- Linux:
ip -6 addr show和rdisc6 eth0 - Windows:
netsh interface ipv6 show addresses
- Linux:
曾经处理过一个诡异案例:主机能获取地址但无法上网。最终发现是防火墙过滤了ICMPv6报文,导致邻居发现协议失效。记住,IPv6网络离不开ICMPv6,千万别在防火墙上盲目屏蔽它!