用于排查 DNS 相关激活问题的指南

如果符合下面的一个或多个条件,则可能必须使用这其中的某些方法:

  • 使用批量许可介质和批量许可常规产品密钥安装下述操作系统之一:
    • Windows Server 2019
    • Windows Server 2016
    • Windows Server 2012 R2
    • Windows Server 2012
    • Windows Server 2008 R2
    • Windows 2008 Server
    • Windows 10
    • Windows 8.1
    • Windows 8
  • 激活向导不能连接到 KMS 主机。

当你尝试激活客户端系统时,激活向导使用 DNS 来查找相应的运行 KMS 软件的计算机。 如果向导在查询 DNS 后没有找到 KMS 主机的 DNS 条目,则会报告错误。

请查看以下列表,找到适合自己情况的方法:

将产品密钥更改为 MAK

如果不能安装 KMS 主机,或者因为某个其他的原因而不能使用 KMS 激活,请将产品密钥更改为 MAK。 如果从 Microsoft Developer Network (MSDN) 或 TechNet 下载 Windows 映像,则在介质下列出的库存单位 (SKU) 通常为批量许可介质,提供的产品密钥为 MAK 密钥。

若要将产品密钥更改为 MAK,请执行以下步骤:

  1. 打开提升的命令提示符窗口。 为此,请按 Windows 徽标键+X,右键单击“命令提示符”,然后选择“以管理员身份运行” 。 如果收到管理员密码提示或确认提示,请键入密码或进行确认。
  2. 在命令提示符处运行以下命令:
     slmgr -ipk xxxxx-xxxxx-xxxxx-xxxxx-xxxxx
    

    注意

    xxxxx-xxxxx-xxxxx-xxxxx-xxxxx 占位符表示 MAK 产品密钥。

返回到过程列表。

配置客户端激活时所使用的 KMS 主机

KMS 激活要求配置客户端激活时所使用的 KMS 主机。 如果环境中没有配置的 KMS 主机,请使用适当的 KMS 主机密钥安装并激活一个。 在网络上配置用于托管 KMS 软件的计算机以后,请发布域名系统 (DNS) 设置。

若要了解 KMS 主机配置过程,请参阅使用密钥管理服务进行激活安装和配置 VAMT

返回到过程列表。

验证到 DNS 服务器的基本 IP 连接

使用 ping 命令验证到 DNS 服务器的基本 IP 连接。 为此,请在遇到错误的 KMS 客户端上和 KMS 主机上执行以下步骤:

  1. 打开提升的命令提示符窗口。
  2. 在命令提示符处运行以下命令:
    ping <DNS_Server_IP_address>
    

    注意

    如果此命令的输出不包含“来自...的回复”短语,则表明存在网络问题或 DNS 问题,必须解决该问题后才能使用本文中的其他过程。 若要详细了解在不能 ping DNS 服务器的情况下如何排查 TCP/IP 问题,请参阅针对 TCP/IP 问题的高级故障排除

返回到过程列表。

验证 KMS 主机的配置

检查 KMS 主机服务器的注册表,确定是否已将它注册到 DNS。 默认情况下,KMS 主机服务器每 24 小时动态注册 DNS SRV 记录一次。

重要

请认真遵循本部分所述的步骤。 如果注册表修改不正确,可能会发生严重问题。 在修改注册表之前,请备份注册表,以便在出现问题时可以还原。

若要检查此设置,请执行以下步骤:

  1. 启动“注册表编辑器”。 为此,请右键单击“开始”,选择“运行”,键入 regedit,然后按 Enter。
  2. 找到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform 子项(Windows Server 2008 和 Windows Vista 中以前为 SL,而不是 SoftwareProtectionPlatform),然后查看 DisableDnsPublishing 条目的值。 此条目有以下可能值:
    • 0 或未定义(默认值):KMS 主机服务器每 24 小时注册 SRV 记录一次。
    • 1:KMS 主机服务器不自动注册 SRV 记录。 如果实现不支持动态更新,请参阅手动创建 KMS SRV 记录
  3. 如果 DisableDnsPublishing 条目缺失,请创建它(类型为 DWORD)。 如果可以接受动态注册,请将此值保留为未定义或设置为 0

返回到过程列表。

确定路由问题的类型

可使用以下命令来确定这是名称解析问题还是 SRV 记录问题。

  1. 在 KMS 客户端上,打开提升的命令提示符窗口。

  2. 在命令提示符处运行以下命令:

    cscript \windows\system32\slmgr.vbs -skms <KMS_FQDN>:<port>
    cscript \windows\system32\slmgr.vbs -ato
    

    注意

    在此命令中,<KMS_FQDN> 表示 KMS 主机的完全限定的域名 (FQDN),<port> 表示 KMS 使用的 TCP 端口。

    如果这些命令解决了此问题,则表明这是 SRV 记录问题。 排查其问题时,可以使用手动为 KMS 客户端分配 KMS 主机过程中记录的某个命令。

  3. 如果此问题仍然存在,请运行以下命令:

    cscript \windows\system32\slmgr.vbs -skms <IP Address>:<port>
    cscript \windows\system32\slmgr.vbs -ato
    

    注意

    在此命令中,<IP Address> 表示 KMS 主机的 IP 地址,<port> 表示 KMS 使用的 TCP 端口。

    如果这些命令解决了此问题,则表明这很可能是名称解析问题。 有关其他故障排除信息,请参阅验证 DNS 配置过程。

  4. 如果这些命令都无法解决此问题,请检查计算机的防火墙配置。 在 KMS 客户端和 KMS 主机之间进行的任何激活通信均使用 1688 TCP 端口。 KMS 客户端与 KMS 主机上的防火墙都必须允许通过端口 1688 进行通信。

返回到过程列表。

验证 DNS 配置

注意

除非另有说明,否则请在遇到相应错误的 KMS 客户端上执行以下步骤。

  1. 打开提升的命令提示符窗口
  2. 在命令提示符处运行以下命令:
    IPCONFIG /all
    
  3. 注意命令结果中的以下信息:
    • KMS 客户端计算机的已分配 IP 地址
    • KMS 客户端计算机使用的主 DNS 服务器的 IP 地址
    • KMS 客户端计算机使用的默认网关的 IP 地址
    • KMS 客户端计算机使用的 DNS 后缀搜索列表
  4. 验证 KMS 主机 SRV 记录是否已在 DNS 中注册。 要实现这一点,请执行下列操作:
    1. 打开提升的命令提示符窗口。
    2. 在命令提示符处运行以下命令:
      nslookup -type=all _vlmcs._tcp>kms.txt
      
    3. 打开此命令生成的 KMS.txt 文件。 此文件应该包含一个或多个类似于以下条目的条目:
      _vlmcs._tcp.contoso.com SRV service location:
      priority = 0
      weight = 0
      port = 1688 svr hostname = kms-server.contoso.com
      

      注意

      在此条目中,contoso.com 表示 KMS 主机的域。

      1. 验证 KMS 主机的 IP 地址、主机名、端口和域。
      2. 如果这些 _vlmcs 条目存在且包含预期的 KMS 主机名,请转到手动为 KMS 客户端分配 KMS 主机

      注意

      即使 nslookup 命令找到了 KMS 主机,也并不意味着 DNS 客户端能够找到 KMS 主机。 如果 nslookup 命令找到了 KMS 主机,但你仍然不能使用 KMS 主机进行激活,请检查其他 DNS 设置,例如主 DNS 后缀以及 DNS 后缀的搜索列表。

  5. 验证主 DNS 后缀的搜索列表是否包含与 KMS 主机相关联的 DNS 域后缀。 如果搜索列表不包含该信息,请转到将 KMS 主机配置为在多个 DNS 域中发布过程。

返回到过程列表。

手动创建 KMS SRV 记录

若要手动为使用 Microsoft DNS 服务器的 KMS 主机创建 SRV 记录,请执行以下步骤:

  1. 在 DNS 服务器上,打开 DNS 管理器。 若要打开 DNS 管理器,请依次选择“开始”、“管理工具”、“DNS”。
  2. 选择必须在其上创建 SRV 资源记录的 DNS 服务器。
  3. 在控制台树中,展开“正向查找区域”,右键单击域,然后选择“其他新记录”。
  4. 在列表中向下滚动,选择“服务位置(SRV)”,然后选择“创建记录”。
  5. 键入以下信息:
    • 服务:_VLMCS
    • 协议: _TCP
    • 端口号:1688
    • 提供服务的主机: <KMS 主机的 FQDN>
  6. 完成这些操作后,请选择“确定”,然后选择“完成”。

若要手动为使用兼容 BIND 9.x 的 DNS 服务器的 KMS 主机创建 SRV 记录,请按该 DNS 服务器的说明操作,并提供以下 SRV 记录信息:

  • 名称:_vlmcs._TCP
  • 类型:SRV
  • 优先级:0
  • 权重:0
  • 端口:1688
  • 主机名:<KMS 主机的 FQDN 或 A-Name>

若要将兼容 BIND 9.x 的 DNS 服务器配置为支持 KMS 自动发布功能,请将 DNS 服务器配置为允许从 KMS 主机进行资源记录更新。 例如,将以下行添加到 Named.conf 或 Named.conf.local 的区域定义中:

allow-update { any; };

手动为 KMS 客户端分配 KMS 主机

默认情况下,KMS 客户端使用自动发现过程。 根据此过程的要求,KMS 客户端会查询 DNS 中的一系列服务器,这些服务器已在客户端的成员身份区域中发布了 _vlmcs SRV 记录。 DNS 以随机顺序返回 KMS 主机的列表。 客户端会选取一个 KMS 主机并尝试在其上建立一个会话。 如果该尝试成功,客户端会缓存 KMS 主机的名称并尝试在下一次续订尝试时使用它。 如何会话设置失败,客户端会随机选取另一个 KMS 主机。 强烈建议使用自动发现过程。

但是,你可以手动为特定的 KMS 客户端分配 KMS 主机。 为此,请按照以下步骤操作。

  1. 在 KMS 客户端上,打开提升的命令提示符窗口。
  2. 根据实现情况执行以下步骤之一:
    • 若要使用 KMS 主机的 FQDN 来分配该主机,请运行以下命令:
      cscript \windows\system32\slmgr.vbs -skms <KMS_FQDN>:<port>
      
    • 若要使用 KMS 主机的版本 4 IP 地址来分配该主机,请运行以下命令:
      cscript \windows\system32\slmgr.vbs -skms <IPv4Address>:<port>
      
    • 若要使用 KMS 主机的版本 6 IP 地址来分配该主机,请运行以下命令:
      cscript \windows\system32\slmgr.vbs -skms <IPv6Address>:<port>
      
    • 若要使用 KMS 主机的 NETBIOS 名称来分配该主机,请运行以下命令:
      cscript \windows\system32\slmgr.vbs -skms <NETBIOSName>:<port>
      
    • 若要在 KMS 客户端上恢复为自动发现,请运行以下命令:
      cscript \windows\system32\slmgr.vbs -ckms
      

      注意

      这些命令使用以下占位符:

      • <KMS_FQDN> 表示 KMS 主机的完全限定的域名 (FQDN)
      • <IPv4Address> 表示 KMS 主机的 IPv4 地址
      • <IPv6Address> 表示 KMS 主机的 IPv6 地址
      • <NETBIOSName> 表示 KMS 主机的 NETBIOS 名称
      • <port> 表示 KMS 使用的 TCP 端口。

将 KMS 主机配置为在多个 DNS 域中发布

重要

请认真遵循本部分所述的步骤。 如果注册表修改不正确,可能会发生严重问题。 在修改注册表之前,请备份注册表,以便在出现问题时可以还原。

手动为 KMS 客户端分配 KMS 主机中所述,KMS 客户端通常使用自动发现过程来标识 KMS 主机。 此过程要求必须在 KMS 客户端计算机的 DNS 区域中提供 _vlmcs SRV 记录。 DNS 区域对应于计算机的主 DNS 后缀,或者对应于以下项之一:

  • DNS 系统(例如 Active Directory 域服务 (AD DS) DNS)分配的计算机域(适用于已加入域的计算机)。
  • 动态主机配置协议 (DHCP) 分配的计算机域(适用于工作组计算机)。 根据征求意见文档 (RFC) 2132 中的定义,此域名由代码值为 15 的选项定义。

默认情况下,KMS 主机将其 SRV 记录注册到 DNS 区域中,该区域对应于 KMS 主机的域。 例如,假定 KMS 主机加入 contoso.com 域。 在这种情况下,KMS 主机会将其 _vlmcs SRV 记录注册到 contoso.com DNS 区域。 因此,记录会将服务标识为 _VLMCS._TCP.CONTOSO.COM

如果 KMS 主机和 KMS 客户端使用不同的 DNS 区域,则必须将 KMS 主机配置为自动在多个 DNS 域中发布其 SRV 记录。 要实现这一点,请执行下列操作:

  1. 在 KMS 主机上启动注册表编辑器。
  2. 找到并选择 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform 子项(Windows Server 2008 和 Windows Vista 中以前为 SL,而不是 SoftwareProtectionPlatform)。
  3. 在“详细信息”窗格中右键单击空白区域,选择“新建”,然后选择“多值字符串值”。
  4. 输入 DnsDomainPublishList 作为新条目的名称。
  5. 右键单击这个新的 DnsDomainPublishList 条目,然后选择“修改”。
  6. 在“编辑多值字符串”对话框中,键入 KMS 在单独的行中发布的每个 DNS 域后缀,然后选择“确定”。

    注意

    Windows Server 2008 R2 的 DnsDomainPublishList 的格式有所不同。 有关详细信息,请参阅“批量激活技术参考指南”。

  7. 使用服务管理工具重启软件保护服务(以前为 Windows Server 2008 和 Windows Vista 中的软件授权服务)。 此操作创建 SRV 记录。
  8. 验证 KMS 客户端是否可以使用典型的方法来联系已配置的 KMS 主机。 验证 KMS 客户端是否可以按名称和按 IP 地址来正确标识 KMS 主机。 如果这两个验证中的任一验证失败,请调查此 DNS 客户端解析程序问题。
  9. 若要清除以前在 KMS 客户端上缓存的 KMS 主机名,请在 KMS 客户端上打开已提升权限的命令提示符窗口,然后运行以下命令:
    cscript C:\Windows\System32\slmgr.vbs -ckms