V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wqy
V2EX  ›  宽带症候群

Windows 通过 DHCPv6 获取 IPv6 地址时遇到错误“没有群集资源”

  •  3
     
  •   wqy · 2021-10-04 17:31:27 +08:00 · 2685 次点击
    这是一个创建于 1164 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一台运行 Windows Server 2019 的服务器,配备有一张 Intel 的双口千兆网卡,系统中分别命名为“Slot0B x8 端口 1”和“Slot0B x8 端口 2”,通过同一台接入交换机连接局域网。

    局域网(校园网)通过 DHCPv6 分配 IPv6 地址。

    两个接口在开机后能够分别自动获取 IPv4 地址,但仅有一个接口能够获取 IPv6 地址,一般是“Slot0B x8 端口 2”。

    此时,若执行 ipconfig /renew6 "Slot0B x8 端口 1"的命令,也无法获取到 IPv6 地址,且返回一个错误:“在续订接口 Slot0B x8 端口 1 时出错: 没有群集资源。”

    此时只能将“Slot0B x8 端口 2”上的 IPv6 地址 release 掉,才能够在“Slot0B x8 端口 1”上通过 renew 获取到新的 IPv6 地址。
    第 1 条附言  ·  2021-10-06 13:12:06 +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...
    5 条回复    2021-10-19 16:47:03 +08:00
    volks
        1
    volks  
       2021-10-05 09:33:26 +08:00 via Android
    巧了,我最近也刚好遇到这问题,竟搜不到一点相关信息。我的 nuc 通过 WiFi 连可以拿到 dhcpv6 IP,通过有线就只有 slaac ip 。微软社区上有个 13 年的贴描述了类似的情况,怀疑是 dhcp 超时的问题,但对我的情况就说不通了
    ArimaKousei
        2
    ArimaKousei  
       2021-10-05 14:33:58 +08:00
    检查下服务器有没有开启端口聚合 /NIC
    raysonx
        3
    raysonx  
       2021-10-05 23:33:11 +08:00 via iPad
    建议联系微软技术支持
    wqy
        4
    wqy  
    OP
       2021-10-06 13:14:16 +08:00   ❤️ 2
    目前,问题的原因已经查明,现在问题暂时得到了解决。

    首先,通过 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...
    fastcache
        5
    fastcache  
       2021-10-19 16:47:03 +08:00
    msft 是全球最大的 ipv6 vendor, 估计这个是 ta 认为的标准实现
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4475 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:55 · PVG 11:55 · LAX 19:55 · JFK 22:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.