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 标志决定主机去不去要参数;排障先分清缺的是地址还是参数。