在Linux中用nmcli启用IPv6无状态地址自动配置(SLAAC)的关键是将ipv6.method设为auto,并确保路由器发送含“A”标志的RA报文;SLAAC不依赖DHCPv6,仅通过NDP自动生成global地址,需验证sysctl net.ipv6.conf.all.disable_ipv6=0、ip -6 route有默认路由、ip -6 addr显示scope global地址。

在 Linux 中用 nmcli 配置网卡启用 IPv6 无状态地址自动配置(SLAAC),关键不是“DHCP-Accept”,而是正确设置 IPv6 方法为 auto 并确保网络侧(路由器)已发送合法的 RA(Router Advertisement)报文。SLAAC 本身不依赖 DHCPv6,属于纯 NDP 协议行为;若需同时通过 DHCPv6 获取 DNS 等附加信息(即 Stateless DHCPv6),才需额外启用 DHCPv6 支持。
确认系统支持并启用 IPv6 自动配置
SLAAC 要求内核启用 IPv6、NetworkManager 正常运行,且网卡所在链路有路由器定期广播 RA 报文(含 “A” 和 “L” 标志位)。可先检查:
- 运行
sysctl net.ipv6.conf.all.disable_ipv6,输出0表示 IPv6 已启用 - 执行
ip -6 route show | grep default,若已有以fe80::开头的默认路由,说明 RA 已被接收 - 用
sudo radvdump或tcpdump -i eth0 icmp6 and ip6[40] == 134观察是否有 RA 报文
用 nmcli 启用 SLAAC(无状态自动配置)
将网卡连接的 IPv6 配置方法设为 auto,NetworkManager 会自动监听 RA 并生成 global 地址(通常基于 EUI-64 或隐私扩展):
- 查看当前连接名:
nmcli connection show - 修改连接启用 IPv6 自动配置:
sudo nmcli connection modify "Wired connection 1" ipv6.method auto - 禁用 IPv6 的 DHCPv6 客户端(避免干扰):
sudo nmcli connection modify "Wired connection 1" ipv6.ignore-auto-dns yes(可选) - 重启连接生效:
sudo nmcli connection down "Wired connection 1" && sudo nmcli connection up "Wired connection 1"
执行后,运行 ip -6 addr show dev eth0,应看到形如 2001:db8:abcd::xxxx/64 的 global 地址(非 fe80::/64 链路本地地址)。
如需同时获取 DNS(Stateless DHCPv6),开启 DHCPv6 支持
SLAAC 只分配地址和路由,DNS 等需由 DHCPv6 补充提供。此时需保留 SLAAC 地址生成,但启用 DHCPv6 客户端仅用于选项获取:
- 设置 IPv6 方法仍为
auto(保证地址自动生成) - 启用 DHCPv6 选项获取:
sudo nmcli connection modify "Wired connection 1" ipv6.dhcp-send-hostname yes ipv6.dhcp-hostname "" - 确保 DHCPv6 模式为
auto(默认)或显式设为dhcp,但不要设ignore或manual - 重启连接后,检查 DNS:
nmcli device show eth0 | grep IP6.DNS
验证配置是否生效
成功配置后应能:
- 看到 global IPv6 地址:
ip -6 addr show scope global - 有默认路由:
ip -6 route | grep default - 解析域名:
host google.com(使用 IPv6 DNS) - 连通测试:
ping6 -c3 2001:4860:4860::8888
若地址未生成,重点排查路由器 RA 是否开启、是否携带 Managed Address Configuration (M) 和 Other Configuration (O) 标志 —— SLAAC 只关心 Autonomous Address Configuration (A) 标志。


















