首页/网络/协议速查/IPv6 无状态自动配置(SLAAC)

IPv6 无状态自动配置(SLAAC)

主机根据路由器通告(RA)的前缀 + 自行生成的接口标识拼出地址,无需 DHCP 即可上网;DHCPv6 用于需要精细控制的场景。

协议速查网络更新于 2026-10-13

SLAAC 是什么

SLAAC 是 IPv6 的无状态地址自动配置:路由器周期性发送 RA(路由器通告),主机取其中的 /64 前缀,再自行生成 64 位接口标识,拼成全球单播地址。之所以叫无状态,是因为路由器不记录谁用了哪个地址,终端接入即插即用;需要精确分配地址、下发租期或厂商信息时,才叠加 DHCPv6。

基本信息

适用平台Linux / Windows / 华为 VRP 等 IPv6 主机与设备
地址构成RA 前缀(64 位)+ 接口标识(64 位)
接口标识EUI-64(由 MAC 派生)或 RFC 4941 隐私随机值
默认网关RA 的源地址,通常是链路本地 fe80::/10
DNS 下发RA 的 RDNSS 选项,或 DHCPv6 选项
关键开关net.ipv6.conf.<if>.accept_ra(0 关闭 / 1 接受 / 2 转发时也接受)

典型使用场景

  • 办公网与家庭宽带:终端接入即获得地址,无需部署 DHCPv6 服务器
  • 云主机与容器网络:平台下发 RA,实例自动配好地址与默认路由
  • 纯 IPv6 网络上线验证:确认终端仅凭 RA 就能完成寻址与出网
  • 排查有地址却上不了网:核对前缀、默认路由、DNS 三者是否齐全

观察地址与 RA

观察地址与 RA
ip -6 addr show dev eth0      # 找 scope global 的 2001:/240e: 开头地址
ip -6 route show default       # 默认路由一般经 fe80:: 链路本地网关
sysctl net.ipv6.conf.eth0.accept_ra    # 0 表示本接口不接收 RA
sysctl net.ipv6.conf.all.use_tempaddr  # 2 表示优先使用隐私地址
rdisc6 eth0                    # 主动抓一次 RA,看前缀、M/O 标志与 RDNSS

现象与定位

现象常见原因验证方法
只有 fe80 地址RA 未收到或被内核拒收rdisc6 抓包并检查 accept_ra
能通网关却出不了网未装默认路由或上游无 v6 出口ip -6 route show default 后 ping6 公网地址
地址每次重连都变启用隐私地址或前缀含随机位ip -6 addr 看 temporary 标记
域名解析不出 v6 地址RDNSS 未下发、DHCPv6 未配resolvectl status 看 DNS 来源
防火墙若一刀切封禁 ICMPv6,很可能连 RA 与 NS/NA 邻居发现一起挡掉,表现为有地址却找不到网关;v6 安全策略必须放行邻居发现与 RA 相关类型。
企业常见组合是 RA 负责地址与默认路由、DHCPv6 只发 DNS 等参数,M/O 标志决定主机去不去要参数;排障先分清缺的是地址还是参数。

易错点

  • 关掉 accept_ra 后才想起依赖 RA 上网,重连后地址与网关同时消失
  • 只放行 ICMPv6 echo 却拦掉邻居发现,链路通但地址解析失败
  • 把隐私地址当异常去关,反而暴露由 MAC 派生的 EUI-64 地址
  • 前缀长度不是 64 时部分系统仍按 64 位拼接接口标识,地址与规划不符

数据来源与参考

  • RFC 4862(SLAAC)
  • RFC 4941(隐私扩展)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌