wqy
2021-10-06 13:14:16 +08:00
目前,问题的原因已经查明,现在问题暂时得到了解决。
首先,通过 Wireshark 抓包发现,导致这个错误的原因是:在执行 renew6 命令后,Windows 的 DHCPv6 客户端会向 IPv6 的组播地址( ff02::1:2 )发送 Message type 为 Solicit (类似于 DHCPv4 下的 DHCP DISCOVER )的报文,之后网关并未回复可用的 IPv6 地址,而是回复 DHCPV6 STATUS CODE 2 ( NoAddrAvail ),Windows 会进行 6 次重试,在第 7 次尝试失败后,报错“没有群集资源”并结束尝试。
NoAddrAvail 是这个问题的关键,通过“ipconfig /all”命令查看两个接口的“DHCPv6 客户端 DUID”值,发现 Windows 将这两个接口的 DUID 设置为一致的值,由于 DHCPv6 服务器使用 DUID 来识别不同的客户端,因此网关认为是同一个接口发出了重复的 DHCPv6 请求,故回复 NoAddrAvail,而 Windows 似乎并未正确处理这个错误,以“没有群集资源”作为提示。
通过修改注册表的方式将 DUID 值设置为不冲突的另一个值(但注册表似乎并不支持针对单个接口设置 DUID 值,只能直接修改 Tcpip6 下的键值),禁用再启用网络适配器后,能够正确获取 IPv6 地址了。
但此时该接口仅有 IPv6 地址,并无默认 IPv6 网关配置,无法连接网络,通过接口的 IPv6 协议高级选项,手动将另一个正常接口的网关应用到该接口,便能够正常工作了。
遗留问题:
1 、不明确 Windows 通过 MAC 生成 DUID 的操作是否存在问题,即不同的 MAC 使用了同一个 DUID 。
2 、不明确该修改是否能够在重启之后保留(有可能两个接口都变更为新的 DUID 导致继续冲突)。
3 、不明确 Windows 无法自动配置 IPv6 的网关地址的原因。
这个问题类似于 DHCPv4 下使用了相同的 MAC 地址,但是 Windows 能够比较容易的修改 MAC,却不能方便地修改 DUID...