应启用IPv6并配置为“自动”以支持SLAAC,验证路由器通告是否正常,手动触发RA接收,检查生成的全局单播地址及默认路由,并禁用DHCPv6等干扰选项。

如果您在 macOS 系统中使用以太网连接,但 IPv6 地址未自动获取或网络通信异常,则可能是 IPv6 协议未启用或无状态自动配置(SLAAC)未正确生效。以下是完成 IPv6 协议开启与无状态自动配置的具体操作步骤:
一、确认系统支持并启用以太网接口的 IPv6 协议
macOS 默认可能禁用 IPv6,需手动在接口设置中启用,使系统允许接收路由器通告(RA)并响应无状态地址自动配置流程。
1、点击屏幕左上角苹果图标,选择“系统设置”(macOS Ventura 及更新版本)或“系统偏好设置”(macOS Monterey 及更早版本)。
2、进入“网络”设置页面,左侧列表中选中已连接的“以太网”服务。
3、点击右侧的“详细信息…”按钮(Ventura 及更新版本为“更多设置…”,再选择“硬件”标签页旁的“配置 IPv6”下拉菜单)。
4、将“配置 IPv6”设为“自动”(即启用 IPv6 并允许 SLAAC),而非“仅本地链接”或“关闭”。
二、验证路由器通告(RA)是否正常发送
无状态自动配置依赖上游路由器周期性广播 IPv6 路由器通告报文(Router Advertisement),若该报文缺失或被过滤,终端无法生成全局单播地址。
1、在终端(Terminal)中执行命令:sudo ipconfig getv6packet en0(请将 en0 替换为实际以太网接口名,可通过 ifconfig | grep "en" 查得)。
2、若返回包含"Router Advertisement"、"Prefix Information Option"、"Valid Lifetime"及非零前缀等内容,表明 RA 已接收且含有效全球单播前缀。
3、若无输出或提示“no reply”,需检查路由器是否启用 IPv6 RA 功能,并确认其Managed Flag = 0、Other Flag = 1(符合 SLAAC 要求)。
三、手动触发 RA 接收并刷新地址状态
系统默认每 200 秒轮询一次 RA,但可强制发起邻居发现协议(NDP)请求,加速地址生成与路由表更新。
1、打开终端(Terminal),输入命令:sudo ln -s /dev/null /var/db/dhcpd_leases(避免 DHCPv6 干扰 SLAAC 判定)。
2、执行:sudo killall -HUP mDNSResponder,重启 DNS 解析服务以同步 IPv6 相关缓存。
3、运行:sudo ndp -c,清空邻居缓存;随后执行:sudo ndp -r,向本地链路发送路由器请求(Router Solicitation)。
四、检查生成的 IPv6 地址与路由条目
启用 SLAAC 后,系统应基于接收到的前缀自动生成一个或多个全局单播地址(以 2000::/3 开头),并添加对应直连路由和默认网关。
1、在终端中运行:ifconfig en0 | grep "inet6",确认输出中存在不含"fe80::"(链路本地)且含"prefixlen 64"的地址行。
2、执行:netstat -nr -f inet6 | grep "default",验证是否存在指向链路本地网关(如 fe80::1%en0)的默认 IPv6 路由。
3、若仅显示链路本地地址(fe80::/64)而无全局地址,说明 RA 中未携带合法前缀,或前缀的On-link Flag 或 Autonomous Flag 为 0。
五、禁用干扰性 IPv6 配置选项
某些高级网络设置可能覆盖 SLAAC 行为,例如手动指定 IPv6 地址、启用 DHCPv6 或启用隐私扩展后抑制临时地址生成,需逐一排查。
1、返回“网络”→“以太网”→“详细信息…”→“IPv6”设置页,确保“配置 IPv6”保持“自动”,且未勾选“使用 DHCPv6 获取地址”或“使用 DHCPv6 获取 DNS 服务器设置”。
2、在终端中检查隐私扩展状态:sysctl net.inet6.ip6.use_tempaddr,返回值为 1 表示启用;若需优先使用 SLAAC 地址,可临时设为 0:sudo sysctl -w net.inet6.ip6.use_tempaddr=0。
3、确认未手动添加静态 IPv6 地址:执行ipconfig getv6info en0,输出中不应出现"Manual configuration"字段。










