要让linux网络接口启用纯无状态ipv6自动配置(slaac),关键是正确启用并确保networkmanager不干扰内核的slaac行为,即设ipv6.method auto,禁用dhcpv6,重启连接后由内核监听ra自动生成全局地址。

确认 NetworkManager 接管且 IPv6 未被禁用
先确保 NetworkManager 正在管理网络,并允许 IPv6 协议运行:
- 检查服务状态:systemctl is-active NetworkManager(应为 active)
- 确认 NetworkManager 接管网络:nmcli network(输出应为 connected 或 enabled)
- 避免手动关闭 IPv6:nmcli connection show eth0 | grep ipv6.method,若显示 disabled,需修正
将连接设为 SLAAC 模式(ipv6.method auto)
SLAAC 的核心是让内核监听路由器通告(RA),自动生成 2001:db8::/64 类型的全局地址(非 DHCPv6 分配)。这要求连接方法设为 auto,而非 manual 或 ignore:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 执行:nmcli connection modify eth0 ipv6.method auto
- 可选但推荐:显式启用 RA 处理:nmcli connection modify eth0 ipv6.ignore-auto-routes no(默认即为 no,仅需确认)
- 禁用 DHCPv6 地址获取(保持纯无状态):nmcli connection modify eth0 ipv6.dhcp-send-hostname no 和 nmcli connection modify eth0 ipv6.dhcp-hostname ""
- 如无需 DNS 自动下发,可清空 DNS 设置:nmcli connection modify eth0 ipv6.dns ""(否则 NetworkManager 可能从 RA 中的 RDNSS 提取并覆盖 resolv.conf)
重启连接并验证 SLAAC 是否生效
修改后必须重新激活连接,使内核重新注册邻居发现并监听 RA:
- 停用再启用:nmcli connection down eth0 && nmcli connection up eth0
- 检查是否获得 SLAAC 地址:ip -6 addr show dev eth0 | grep 'inet6.*global'(应看到带
dynamic或mngtmpaddr标志的地址,如2001:db8:1::a00:27ff:fe12:3456/64) - 确认 RA 已接收:rdisc6 eth0(需安装
ndisc6包)或查看内核日志:journalctl -u NetworkManager | grep -i 'router advertisement' - 验证路由表含默认网关:ip -6 route | grep '^default'(应来自 RA 中的
Router Lifetime字段)
补充说明:与纯 IPv4 环境共存及常见陷阱
SLAAC 可与 IPv4 同时启用,无需额外干预;但需注意:
- 若 IPv4 设为
disabled,NetworkManager 默认仍会激活该连接(只要 ipv6.method ≠ ignore),但部分旧版可能跳过——建议保留 ipv4.method auto 或 manual,仅关闭其地址分配逻辑(如设ipv4.never-default yes) - 不要编辑
/proc/sys/net/ipv6/conf/eth0/autoconf:该值由内核自动维护,手动写入 0 会破坏 SLAAC,且 NetworkManager 重启后可能重置 - 若 RA 频率低或路由器未发送通告,地址不会生成——这不是配置错误,而是上游网络问题;可用 ping6 ff02::2 测试链路本地连通性,再查
tcpdump -i eth0 icmp6 and ip6[40] == 134抓 RA 包










