总结
本文可帮助你排查和解决错误 0x8007232B (DNS name does not exist)。 尝试使用密钥管理服务(KMS)激活Windows时,会发生此错误。 此错误通常意味着 KMS 客户端无法使用自动发现过程找到有效的 KMS 主机。
本文中的故障排除步骤将引导你完成最常见的原因,包括 DNS 配置问题、不正确的 KMS 主机设置和网络连接问题。 这些步骤适用于物理计算机、本地虚拟机(VM)和Azure VM。
症状
尝试激活Windows系统时,Windows脚本主机中看到以下错误消息:
**Error: 0x8007232B** DNS name does not exist.
原因
如果密钥管理服务(KMS)客户端在 DNS 中找不到 KMS 主机的服务器资源记录(SRV RR),则会出现此错误消息。
默认情况下,KMS 客户端会通过查询 DNS,自动查找客户端所属区域内已发布 _vlmcs SRV 记录的服务器列表,从而定位 KMS 主机。 DNS 按随机顺序返回 KMS 主机列表。 客户端选取 KMS 主机,并尝试在它上建立会话。 如果此尝试成功,客户端将缓存 KMS 主机的名称,并尝试将其用于下一次续订尝试。 如果尝试失败,客户端会随机选取另一台 KMS 主机。 强烈建议使用自动发现过程。
此问题的最常见原因包括以下方案:
- 防火墙规则或网络安全组 (NSG) 规则阻止 DNS 解析。
- 客户端配置为使用特定的 KMS 主机,但 KMS 主机名不正确或无效。
- KMS 主机未将 KMS SRV 记录发布到客户端使用的 DNS 服务器。 此外,DNS 服务器没有通往包含这些记录的 DNS 服务器的转发或递归路径。
解决方案
使用以下步骤排查并修复问题。 若要从这些过程获得最佳结果,请在受影响的计算机上安装 PsPing 工具。 如果你有一台自托管的 KMS 服务器,也请在该计算机上安装 PSPing 工具。
还应熟悉脚本slmgr。
Important
如果您遇到 Azure 虚拟机 (VM) 的 Windows 激活问题,请参阅 Azure 虚拟机上 Windows 激活问题的故障排除工具。
步骤 1:确保 KMS 主机可用,或使用 Azure KMS 服务
若要使用 KMS 激活,您的环境中必须有一台 KMS 主机,以便客户端通过它完成激活。 如果客户端Azure VM,则可以使用 Azure KMS 服务。 如果没有自承载 KMS 主机,并且无法使用 Azure KMS,请使用以下方法之一:
- 方法 1: 配置自承载 KMS 服务器
- 方法 2: 使用 MAK 产品密钥而不是 KMS
方法 1:配置自承载 KMS 服务器
如果环境中未配置 KMS 主机,并且无法使用 Azure KMS 服务,请安装一个。 然后,使用适当的 KMS 主机密钥来激活它。 在网络上配置计算机以托管 KMS 软件后,发布域名系统(DNS)设置。
有关 KMS 主机配置过程的信息,请参阅使用密钥管理服务激活并安装和配置 VAMT。
配置 KMS 主机后,请重试激活。 如果激活失败并生成与之前相同的错误,请转到 步骤 2。
方法 2:使用 MAK 产品密钥而不是 KMS
如果无法安装 KMS 主机,或者出于其他原因,无法使用 KMS 激活,请使用 MAK 产品密钥。 如果从Microsoft下载了Windows映像,则与图像关联的库存单位(SKU)通常是批量许可媒体,并且为这些图像提供的产品密钥是 MAK 密钥。
若要使用 MAK 产品密钥,请打开管理命令提示符窗口,然后运行以下命令:
slmgr -/ipk <xxxxx-xxxxx-xxxxx-xxxxx-xxxxx>
注释
在此命令中, <xxxxx-xxxxx-xxxxx-xxxxx-xxxxx> 表示 MAK 产品密钥。
若要重试以激活,请运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato
如果激活失败并生成与之前相同的错误,请转到 步骤 2。
步骤 2:检查客户端 KMS 密钥
-
若要验证客户端是否具有正确的 KMS 客户端安装密钥,请在命令提示符处运行以下命令:
cscript c:\windows\system32\slmgr.vbs /dlv -
如果产品密钥不正确,请运行以下命令以安装正确的 KMS 客户端安装密钥:
cscript c:\windows\system32\slmgr.vbs /ipk <kms-client-setup-key> -
脚本完成后,重启客户端。
-
若要重试以激活,请运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato
如果激活失败并生成与之前相同的错误,请转到步骤 3。
步骤 3:使用特定 KMS 主机激活
若要绕过自动发现过程,可以使用 slmgr 脚本指定 KMS 主机:
-
在客户端上打开管理命令提示符窗口。
-
若要清除任何现有的 KMS 主机设置,请运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ckms -
若要指定用于激活的 KMS 主机,请运行以下命令:
cscript c:\windows\system32\slmgr.vbs /skms <KMSHost_fqdn>:<KMSHost_Port>注释
- 在此命令中,<KMSHost_fqdn>表示 KMS 主机的完全限定域名 (FQDN),而 <KMSHost_Port>表示 KMS 主机使用的端口。
- 若要使用 Azure KMS 服务激活 Azure VM,请对 <KMSHost_fqdn> 使用
azkms.core.windows.net,并对 <KMSHost_Port 使用1688。
-
若要重试以激活,请运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato
如果激活失败并生成与之前相同的错误,请转到步骤 4。
步骤 4:确保激活流量可以在客户端与 KMS 主机之间传递
-
在客户端上的命令提示符处运行以下命令:
psping <KMSHost-ip>:1688注释
- 在此命令中, <KMSHost_ip> 表示 KMS 主机的 IP 地址。
- 如果客户端是Azure VM,并且正在使用 Azure KMS 服务进行激活,请使用
20.118.99.224或40.83.235.53for <KMSHost-ip>。
-
如果使用自承载 KMS 主机,请在 KMS 主机上打开管理命令提示符窗口,然后运行以下命令:
psping <KMSClient-ip>:1688注释
在此命令中, <KMSClient_ip> 表示客户端的 IP 地址。
-
如果
psping任一情况下失败,请执行以下步骤:- 对于Azure VM,请检查可能影响 VM 的任何网络安全组(例如网络接口、子网或虚拟网络级别设置的 NSG)。 请确保任何 NSG 都允许在 UDP/TCP 端口 53 上的 VM 和 DNS 服务器之间传输流量。
- 请确保任何防火墙(包括客户端上的Windows防火墙)允许客户端与 UDP/TCP 端口 1688 上的 KMS 服务器之间的流量。
- 若要验证流量是否已解除阻止,请再次运行
psping。
-
若要重试激活Windows,请在客户端的命令提示符处运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato
如果激活失败并生成与之前相同的错误,请转到步骤 5。
步骤 5:检查 DNS 配置
-
若要检查 DNS 配置,请在客户端的命令提示符处运行以下命令:
nslookup <KMSHost_fqdn> <intendedDNS_name>注释
- 在此命令中,<KMSHost_fqdn>表示 KMS 主机的 FQDN,intendedDNS_name<>表示客户端应用来联系主机的 DNS 服务器的 FQDN 或 IP 地址。
- 如果客户端是使用 Azure DNS 服务的 Azure VM,请对 <intendedDNS_name> 使用
168-63-129-16。
-
如果客户端是Azure VM,并且使用的是 Azure KMS 服务,并且
nslookup命令失败,请参阅以下文章来排查 DNS 配置问题: -
如果您使用的是自行托管的 KMS 主机,请执行以下操作之一:
- 如果 DNS 服务器未将 FQDN 解析为 IP 地址,请转到 步骤 6。
- 如果 DNS 服务器将 FQDN 解析为 IP 地址,请转到 步骤 7。
步骤 6 (仅限自承载 KMS 主机):检查 KMS 主机是否可以连接到 DNS 基础结构
-
在 KMS 主机上,打开管理命令提示符窗口,然后运行以下命令:
ipconfig /all此命令的输出应类似于以下示例:
DNS Servers . . . . . . . . . . . : 168.63.129.16DNS Servers . . . . . . . . . . . : 10.0.3.5 10.0.3.4注释
在此示例中,
168.63.129.16是AZURE VM 连接到Azure DNS基础结构时使用的 IP 地址。 其他 IP 地址表示自定义 DNS 服务器。 -
验证每个 DNS 服务器地址是否正确。
Important
对 Azure VM 使用自定义 DNS 服务器时,请不要在 VM 本身上配置 DNS 服务器设置。 在网络接口或虚拟网络级别指定 DNS 服务器。
-
如果 DNS 服务器地址列表为空或不包含正确的地址,请参阅以下文章了解详细信息:
-
如果更改任何 DNS 设置,请重启 KMS 主机。
-
KMS 主机重启后,打开管理命令提示符窗口,然后运行以下命令:
ipconfig /flushdns此命令刷新并重新生成 DNS 缓存。
-
若要重试激活Windows,请在客户端的命令提示符处运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato
如果激活失败并生成与之前相同的错误,请转到步骤 7。
步骤 7 (仅限自承载 KMS 主机):验证 KMS 主机是否已配置为注册 DNS 记录
若要确定 KMS 主机是否正在向 DNS 注册,请检查 KMS 主机的注册表。 默认情况下,KMS 主计算机每 24 小时一次动态注册 DNS SRV 记录。
Important
本部分、方法或任务包含说明如何修改注册表的步骤。 如果您错误地修改注册表,可能会出现严重问题。 因此,请确保仔细执行这些步骤。 出于防范目的,请在修改之前备份注册表,以便在出现问题时还原注册表。 有关如何备份和恢复注册表的更多信息,请参见如何在 Windows 中备份和恢复注册表。
若要检查此设置,请执行以下步骤:
-
启动注册表编辑器。 为此,请右键单击 “开始>运行”,键入 regedit,然后按 Enter。
-
找到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform子项,并检查DisableDnsPublishing项的值。 此条目具有以下可能的值:0或未定义(默认值):KMS 主机每 24 小时注册一次 SRV 记录。1:KMS 主机不会自动注册 SRV 记录。 如果实现不支持动态更新,请参阅 手动创建 KMS SRV 记录。
注释
Windows Server 2008 和 Windows Vista 在子项中使用了
SL,而不是SoftwareProtectionPlatform。 -
DisableDnsPublishing如果缺少条目,请创建它(类型为 DWORD)。 如果基础结构使用动态 DNS 注册,请将该值保留为未定义或将其0设置为 。 -
如果希望 KMS 主机支持多个域中的客户端,请参阅 配置 KMS 主机以在多个 DNS 域中发布。
-
如果对 KMS 主机配置进行了任何更改,请重启 KMS 主机。
-
若要重试激活Windows,请在客户端的命令提示符处运行以下命令:
cscript c:\windows\system32\slmgr.vbs /ato
如果激活仍然失败,请联系Microsoft 支持部门。