SLAAC 的流程
无状态地址自动配置(SLAAC)靠路由器周期发送的路由器通告(RA)完成:主机可以先发路由器请求(RS)加快收敛;路由器回 RA,携带前缀信息与 A 标志(表示该前缀可用于自动配置);主机据此生成接口标识并拼出完整地址,通过重复地址检测(DAD)后启用;默认路由则取自 RA 的源地址,通常是路由器的链路本地地址。整个过程不需要任何服务器。
接口标识怎么生成
传统做法是 EUI-64:由网卡 MAC 地址插入 fffe 并翻转第 7 位得到 64 位标识。由于这会暴露硬件信息、便于长期跟踪,现代系统默认使用隐私扩展(RFC 4941):随机生成接口标识并定期更换,同时保留一个稳定地址用于被动入向连接。DNS 服务器信息由 RA 里的 RDNSS 选项或 DHCPv6 提供。
与 DHCPv6 的分工
SLAAC 只解决地址与默认网关,不负责下发 DNS 之外的更多参数,也不做地址分配记录。需要集中管理、需要记录租约的场景通常使用 DHCPv6:可以单独用(RA 里把 A 置 0),也可以与 SLAAC 并存(地址自动配置、其他参数由 DHCPv6 下发)。企业网络里两种模式都常见,关键是全网统一。
基本信息
| 触发 | 路由器周期发 RA,主机可发 RS 请求立即响应 |
|---|---|
| 关键标志 | 前缀信息里的 A=1 才允许 SLAAC |
| 前提 | 前缀必须是 /64 |
| 默认路由 | 取自 RA 源地址(通常为链路本地地址) |
| 规范 | RFC 4862(SLAAC)、RFC 4861(邻居发现) |
典型使用场景
- 办公网批量上线:终端接入即获得地址,无需人工配置
- 家庭宽带:运营商委派 /56 或 /64,路由器下发 RA 给内网
- 临时会议网络:无需部署 DHCPv6 也能让终端上网
- IoT 与移动设备:开机即用,不依赖服务器可用性
- 双栈环境:IPv6 走自动配置,IPv4 仍由 DHCP 提供
执行流程
执行流程
① 主机可发 RS 加快收敛(可选)
② 路由器回 RA:2001:db8:1:10::/64,A=1
③ 主机生成接口标识(EUI-64 或随机)
④ DAD 通过 → 地址进入可用状态
⑤ 默认路由 = RA 源地址(通常是 fe80:: 链路本地)在 Linux 上查看与诊断
在 Linux 上查看与诊断
sysctl net.ipv6.conf.eth0.accept_ra # 1 表示接受 RA
ip -6 addr show dev eth0 | grep inet6 # 看是否拿到 /64 全局地址
ip -6 route show default # 默认路由是否来自 RA
journalctl -k | grep -i 'ipv6\|ra' # 内核日志中的自动配置记录RA 关键字段
| 字段 | 含义 | 影响 |
|---|---|---|
| 前缀信息 A 标志 | 该前缀可用于 SLAAC | A=0 时主机不据此配置地址 |
| 前缀长度 | 应为 /64 | 非 64 时 SLAAC 失效 |
| RDNSS | DNS 服务器选项 | 缺失时终端可能无法解析域名 |
| RA 源地址 | 通常为路由器链路本地地址 | 主机据此设置默认路由 |
SLAAC 是无状态的:路由器不记录谁拿了哪个地址。需要审计、需要按设备分配固定地址或需要记录租约时,必须配合 DHCPv6,并在交换机或控制器上保留邻居表作为辅助记录。
网络中间设备阻断了 RA(常见于启用 RA Guard 但配置不当的场景)时,主机只剩链路本地地址,看起来像「IPv6 没开」。排查顺序是先看是否收到 RA,而不是先怀疑终端配置。