Active Directory 域加入故障排除指南

本指南提供排查 Active Directory 域加入问题时使用的基本概念。

故障排除清单

  • 域名系统 (DNS) :每当加入域时出现问题,首先要检查之一就是 DNS。 DNS 是 Active Directory 的核心,它使工作正常工作,包括域加入。 请确保以下各项:

    • DNS 服务器地址正确。
    • 如果有多个 DNS 域正在运行,则 DNS 后缀搜索顺序是正确的。
    • 没有引用同一计算机帐户的过时或重复的 DNS 记录。
    • 反向 DNS 不会指向其他名称作为 A 记录。
    • 域名、域控制器 (DC) 和 DNS 服务器可以 ping。
    • 检查特定服务器的 DNS 记录冲突。
  • Netsetup.log:排查域加入问题时 ,Netsetup.log 文件是宝贵的资源。 netsetup.log文件位于 C:\Windows\Debug\netsetup.log

  • 网络跟踪:在 AD 域加入期间,客户端与某些 DNS 服务器之间以及客户端与某些 DC 之间发生多种类型的流量。 如果在上述任何流量中看到错误,请按照该协议或组件的相应故障排除步骤将其缩小范围。 有关详细信息,请参阅 使用 Netsh 管理跟踪

  • 域加入强化更改:2022 年 10 月 11 日和之后发布的 Windows 更新包含 CVE-2022-38042 引入的其他保护。 除非存在以下条件之一,否则这些保护有意防止域加入操作重用目标域中的现有计算机帐户:

    • 尝试操作的用户是现有帐户的创建者。
    • 计算机由域管理员的成员创建。

    有关详细信息,请参阅 KB5020276 - Netjoin:域加入强化更改

端口要求

下表列出了客户端计算机和 DC 之间需要打开的端口。

端口 协议 应用程序协议 系统服务名称
53 TCP DNS DNS 服务器
53 UDP DNS DNS 服务器
389 UDP DC 定位器 LSASS
389 TCP LDAP 服务器 LSASS
88 TCP Kerberos Kerberos 密钥分发服务器
135 TCP RPC RPC 终结点映射程序
445 TCP SMB LanmanServer
1024-65535 TCP RPC 用于客户端和域控制器之间的 DSCrackNames、SAMR 和 Netlogon 调用的 RPC 终结点映射程序

常见问题和解决方案

错误代码0x569

尚未在此计算机上向用户授予请求的登录类型。

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpDsGetDcName: failed to find a DC having account <computer name>$': 0x525
mm/dd/yyyy hh:mm:ss:ms NetpDsGetDcName: found DC '\\<DC name>.<domain>.<tld>' in the specified domain
mm/dd/yyyy hh:mm:ss:ms NetUseAdd to \\<DC name>.<domain>.<tld>\IPC$ returned 1385
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: status of connecting to dc '\\<DC Name>.<Domain>.<tld>': 0x569
mm/dd/yyyy hh:mm:ss:ms NetpDoDomainJoin: status: 0x569

当域加入用户缺少 “从网络访问此计算机 ”用户权限时,会记录错误0x569。 请确保以下各项:

  • 验证执行域加入操作的用户帐户 (或拥有域加入用户) 成员的安全组是否已获得默认域控制器策略中的 “从网络访问此计算机 ”权限。
  • 默认域控制器策略链接到托管为域加入操作提供服务的 DC 计算机帐户的 OU。
  • 为域加入操作提供服务的 DC 成功应用策略,特别是默认域控制器策略中定义的用户权限设置。

错误代码0x534

未在帐户名和安全 ID 之间映射。

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpCreateComputerObjectInDs: NetpGetComputerObjectDn failed: 0x534
mm/dd/yyyy hh:mm:ss:ms NetpProvisionComputerAccount: LDAP creation failed: 0x534
mm/dd/yyyy hh:mm:ss:ms ldap_unbind status: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: Function exits with status of: 0x534
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: status of disconnecting from '\\<DC name>': 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDoDomainJoin: status: 0x534

域加入图形用户界面 (GUI) 可以调用 NetJoinDomain API 两次以将计算机加入域。 第一次调用是在未指定“create”标志的情况下进行的,用于在目标域中查找预先创建的计算机帐户。 如果未找到任何帐户,则可能会使用指定的“创建”标志进行第二 NetJoinDomain 次 API 调用。

在另一种情况下,尝试更改计算机帐户的密码时,会记录0x534错误代码。 但是,在目标 DC 上找不到帐户,可能是因为帐户未创建,或者由于复制延迟或复制失败。

域加入搜索目标域时,0x534错误代码通常记录为暂时性错误。 搜索确定匹配的计算机帐户是预先创建的,还是加入操作需要在目标域上动态创建计算机帐户。 检查联接选项中的位标志,查看正在执行的联接类型是否依赖于预先创建的计算机帐户或新创建的计算机帐户。

错误代码0x6BF或0xC002001C

远程过程调用失败,未执行。

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpGetLsaHandle: LsaOpenPolicy on \\<DC name>.<domain>.<tld> failed: 0xc002001c
mm/dd/yyyy hh:mm:ss:ms NetpGetLsaPrimaryDomain: status: 0xc002001c
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: initiaing a rollback due to earlier errors
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: status of disconnecting from '\\<DC name>.<domain>.<tld>': 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDoDomainJoin: status: 0x6bf

当网络设备 (路由器、防火墙或 VPN 设备) 拒绝所加入的客户端与 DC 之间的网络数据包时,会发生此错误。

请确保以下各项:

  • 通过所需的端口和协议验证要加入的客户端与目标 DC 之间的连接。
  • 禁用绑定时间功能协商。
  • 禁用 TCP 烟囱卸载和 IP 卸载。

错误代码0x6D9

终结点映射器中不再有可用的终结点。

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpGetDnsHostName: Read NV Hostname: <hostname>
mm/dd/yyyy hh:mm:ss:ms NetpGetDnsHostName: PrimaryDnsSuffix defaulted to DNS domain name: <DNS domain>.<TLD>
mm/dd/yyyy hh:mm:ss:ms NetpLsaOpenSecret: status: 0xc0000034
mm/dd/yyyy hh:mm:ss:ms NetpGetLsaPrimaryDomain: status: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpLsaOpenSecret: status: 0xc0000034
mm/dd/yyyy hh:mm:ss:ms NetpManageMachineAccountWithSid: NetUserAdd on \\<hostname>.<domain> for <computername>$ failed: 0x8b0
mm/dd/yyyy hh:mm:ss:ms NetpManageMachineAccountWithSid: status of attempting to set password on \\<DC name>.<domain>.<tld> for <hostname>$: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: status of creating account: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpGetComputerObjectDn: Unable to bind to DS on \\<DC name>.<domain>.<tld>: 0x6d9
mm/dd/yyyy hh:mm:ss:ms NetpSetDnsHostNameAndSpn: NetpGetComputerObjectDn failed: 0x6d9
mm/dd/yyyy hh:mm:ss:ms ldap_unbind status: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: status of setting DnsHostName and SPN: 0x6d9
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: initiaing a rollback due to earlier errors
mm/dd/yyyy hh:mm:ss:ms NetpGetLsaPrimaryDomain: status: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpManageMachineAccountWithSid: status of disabling account <hostname>$ on \\<DC name>.<domain>.<tld>: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: rollback: status of deleting computer account: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpLsaOpenSecret: status: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: rollback: status of deleting secret: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomain: status of disconnecting from \\<DC name>.<domain>.<tld>: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDoDomainJoin: status: 0x6d9

在联接客户端和帮助程序 DC 之间阻止网络连接时,记录错误0x6D9。 网络连接通过端口 135 或 1025 到 5000 或 49152 到 65535 之间的临时端口为域加入操作提供服务。 有关详细信息,请参阅 Windows 的服务概述和网络端口要求

若要解决此错误,请执行以下步骤:

  1. 在联接客户端上,打开 %systemroot%\debug\NETSETUP。日志文件 并确定联接客户端选择用于执行联接操作的帮助程序 DC 的名称。
  2. 验证加入客户端是否通过适用的操作系统 (操作系统) 版本使用的所需端口和协议与 DC 建立了网络连接。 域加入客户端通过 TCP 端口 135 通过 49152 和 65535 范围内的动态分配端口连接帮助程序 DC。
  3. 确保 OS、软件和硬件路由器、防火墙和交换机允许通过所需的端口和协议进行连接。

错误代码0xA8B

解析要加入的域中 DC 的 DNS 名称的尝试已失败。 请验证此客户端是否配置为连接到可以解析目标域中 DNS 名称的 DNS 服务器。

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpDsGetDcName: status of verifying DNS A record name resolution for '<DC name>.<domain>.<tld>': 0x2746
mm/dd/yyyy hh:mm:ss:ms NetpDsGetDcName: failed to find a DC in the specified domain: 0xa8b, last error is 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: NetpDsGetDcName returned: 0xa8b
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: Function exits with status of: 0xa8b
mm/dd/yyyy hh:mm:ss:ms NetpDoDomainJoin: status: 0xa8b

在以下情况中发生错误0xA8B:

  • 要加入的工作组计算机指向无效的 DNS 服务器。
  • 加入计算机使用的 DNS 服务器 () 无效、缺少所需区域或缺少目标域所需的记录。
  • 目标 Active Directory 域包含有问题的 DNS 名称。
  • 工作组计算机、目标 DC 或用于连接客户端和目标 DC 的网络上存在网络问题。

若要解决此错误,请执行以下步骤:

  1. 验证要加入的计算机是否指向有效的 DNS 服务器 IP 地址。 无效的示例包括:

    • 企业 Intranet 上已过时或不存在的 ISP DNS 服务器。
    • 处于错误状态的 DNS 服务器阻止其加载 _msdcs。<林根域> 或目标 AD 域区域或解析这些区域的查询。 可能会记录事件 ID 4521。
  2. 验证在客户端上配置的所有 DNS 服务器是否托管目标域中 DC 的必需区域和有效记录。 检查以下错误配置:

    • 缺少目标 AD 域的正向查找区域。
    • 缺少_msdcs正向查找区域。
    • _msdcs。<林根域>区域不包含目标域中 DC 的轻型目录访问协议 (LDAP) SRV 记录。
    • 目标 AD 域区域中缺少主机 A 记录。
    • 主机 A 记录存在,但目标 DC 包含错误的 IP 地址。
    • 主机 A 记录存在,但是由客户端计算机无法访问的网络接口注册的。
  3. 检查目标 Active Directory 域中是否需要其他配置的特殊名称:

    • 单标签 DNS 名称
    • 不连续命名空间
    • 所有顶级数字域 (TLD) 或包含数字字符的 TLD
  4. 检查工作组计算机、目标 DC 或连接计算机和目标 DC 的网络上的网络问题:

    • 客户端计算机或目标 DC 上的网络接口卡 (NIC) 损坏
    • 中断的网络交换机,用于删除客户端和目标 DC 之间的网络数据包

错误代码0x40

尝试将计算机加入域时,会出现以下错误消息:

指定的网络名称不再可用

对话框的屏幕截图,其中显示了错误代码0x40错误消息。

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpValidateName: checking to see if '<domain_name>' is valid as type 3 name
mm/dd/yyyy hh:mm:ss:ms NetpCheckDomainNameIsValid [ Exists ] for '<domain_name>' returned 0x0
mm/dd/yyyy hh:mm:ss:ms NetpValidateName: name '<domain_name>' is valid for type 3
mm/dd/yyyy hh:mm:ss:ms NetpDsGetDcName: trying to find DC in domain '<domain_name>', flags: 0x40001010
mm/dd/yyyy hh:mm:ss:ms NetpDsGetDcName: failed to find a DC having account 'CLIENT1$': 0x525, last error is 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDsGetDcName: status of verifying DNS A record name resolution for 'DCA.<domain_name>': 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDsGetDcName: found DC '\\<dc_fqdn>' in the specified domain
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: NetpDsGetDcName returned: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDisableIDNEncoding: using FQDN <domain_name> from dcinfo
mm/dd/yyyy hh:mm:ss:ms NetpDisableIDNEncoding: DnsDisableIdnEncoding(UNTILREBOOT) on '<domain_name>' succeeded
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: NetpDisableIDNEncoding returned: 0x0
mm/dd/yyyy hh:mm:ss:ms NetUseAdd to \\<dc_fqdn>\IPC$ returned 64
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: status of connecting to dc '\\<dc_fqdn>': 0x40
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: Function exits with status of: 0x40
mm/dd/yyyy hh:mm:ss:ms NetpResetIDNEncoding: DnsDisableIdnEncoding(RESETALL) on '<domain_name>' returned 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: NetpResetIDNEncoding on '<domain_name>': 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDoDomainJoin: status: 0x40

当客户端计算机与 DC 之间的 TCP 端口 88 上缺少网络连接时,将记录此错误。 若要解决此问题,可以运行以下命令来测试连接:

Test-NetConnection <IP_address_of_the_DC> -Port 88

预期输出:

显示 TCP 端口 88 输出的 Test-NetConnection 命令的屏幕截图。

输出指示 Kerberos 端口 TCP 88 在客户端和 DC 之间处于打开状态。

错误代码0x54b

显示错误代码0x54b错误消息的对话框的屏幕截图。

下面是错误消息的示例:

注意:此信息适用于网络管理员。 如果你不是网络管理员,请通知管理员你收到了此信息,此信息已记录在文件中 C:\WINDOWS\debug\dcdiag.txt。

当 DNS 查询服务位置 (SRV) 资源记录,用于查找域“domain_name>”<Active Directory 域控制器 (AD DC) 时,出现以下错误:

错误为:“由于超时期限已过期而返回此操作”。 (错误代码0x000005B4 ERROR_TIMEOUT)

查询针对srv_record的 SRV 记录<>

此计算机用于名称解析的 DNS 服务器没有响应。 此计算机配置为使用以下 IP 地址的 DNS 服务器:

<ip_address>

验证此计算机是否已连接到网络,这些是正确的 DNS 服务器 IP 地址,以及是否至少有一个 DNS 服务器正在运行。

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpValidateName: checking to see if '<domain_name>' is valid as type 3 name
mm/dd/yyyy hh:mm:ss:ms NetpCheckDomainNameIsValid for <domain_name> returned 0x54b, last error is 0x0
mm/dd/yyyy hh:mm:ss:ms NetpCheckDomainNameIsValid [ Exists ] for '<domain_name>' returned 0x54b

若要解决0x54b错误,请执行以下步骤:

  • 检查客户端与域控制器之间的网络连接。

  • 验证首选 DNS 服务器是否为正确的 DNS 服务器。

  • 运行 nltest /dsgetdc (DC 发现) ,验证是否可以发现 DC。

    例如:

    nltest /dsgetdc:<domain_name> /force
    

    预期输出:

    显示 nltest 命令输出的屏幕截图。

  • DCDiag /v在最近的域控制器上运行并验证是否已注册 SRV 记录。 例如:_ldap._tcp.dc._msdcs.<domain_name>.com

错误代码0x0000232A

当客户端计算机缺少对域的 NetBIOS 名称解析时,记录了错误0x0000232A。

对话框的屏幕截图,其中显示了错误代码0x0000232A错误消息。

下面是错误消息的示例:

注意:此信息适用于网络管理员。 如果你不是网络管理员,请通知管理员你收到了此信息,此信息已记录在文件中 C:\WINDOWS\debug\dcdiag.txt。

域名“<NetBIOS_name>”可能是 NetBIOS 域名。 如果是这种情况,请验证域名是否已正确注册到 WINS。

如果确定该名称不是 NetBIOS 域名,则以下信息可帮助你排查 DNS 配置问题。

当 DNS 查询服务位置 (SRV) 资源记录,用于查找域“NetBIOS_name>”<Active Directory 域控制器 (AD DC) 时,出现以下错误:

错误为:“DNS 服务器故障”。 (错误代码0x0000232A RCODE_SERVER_FAILURE)

查询针对_ldap._tcp.dc._msdcs 的 SRV 记录。<NetBIOS_name>

此错误的常见原因包括:

  • 此计算机使用的 DNS 服务器包含错误的根提示。 此计算机配置为使用以下 IP 地址的 DNS 服务器:

<ip_address>

  • 以下一个或多个区域包含错误的委派:

< > NetBIOS_name 。 (根区域)

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpValidateName: checking to see if '<NetBIOS_name>' is valid as type 3 name
mm/dd/yyyy hh:mm:ss:ms NetpCheckDomainNameIsValid for <NetBIOS_name> returned 0x54b, last error is 0x0
mm/dd/yyyy hh:mm:ss:ms NetpCheckDomainNameIsValid [ Exists ] for '<NetBIOS_name>' returned 0x54b

输入域名时,请确保输入 DNS 域名,而不是 NetBIOS 名称。 例如,如果域的 DNS 名称 contoso.com,请确保输入该名称,而不仅仅是 contoso。

错误代码0x3a

尝试加入域时发生以下错误:

指定的服务器无法执行请求的操作。

对话框的屏幕截图,其中显示了错误代码0x3a错误消息。

下面是 netsetup.log 文件中的示例:

mm/dd/yyyy hh:mm:ss:ms NetpLdapBind: ldap_bind failed on <dc_fqdn>: 81: Server Down
mm/dd/yyyy hh:mm:ss:ms NetpJoinCreatePackagePart: status:0x3a.
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: Function exits with status of: 0x3a
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: status of disconnecting from '\\<dc_fqdn>': 0x0
mm/dd/yyyy hh:mm:ss:ms NetpResetIDNEncoding: DnsDisableIdnEncoding(RESETALL) on '<domain_name>' returned 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: NetpResetIDNEncoding on '<domain_name>': 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDoDomainJoin: status: 0x3a

客户端计算机在客户端计算机和 DC 之间的 TCP 端口 389 上缺少网络连接时,记录了错误0x3a。 若要解决此问题,请使用以下命令测试连接:

Test-NetConnection <IP_address_of_the_DC> -Port 389

预期输出:

显示 TCP 端口 389 输出的 Test-NetConnection 命令的屏幕截图。

它指示 LDAP 端口 TCP 389 在客户端和 DC 之间打开。

错误代码0x216d

尝试加入域时发生以下错误:

计算机无法加入域。 已超出允许在此域中创建计算机帐户的数量上限。 请与系统管理员联系以重置或增加此限制。

显示错误代码0x216d错误消息的对话框的屏幕截图。

mm/dd/yyyy hh:mm:ss:ms NetpMapGetLdapExtendedError: Parsed [0x216d] from server extended error string: 0000216D: SvcErr: DSID-031A124C, problem 5003 (WILL_NOT_PERFORM), data 0
mm/dd/yyyy hh:mm:ss:ms NetpModifyComputerObjectInDs: ldap_add_s failed: 0x35 0x216d
mm/dd/yyyy hh:mm:ss:ms NetpCreateComputerObjectInDs: NetpModifyComputerObjectInDs failed: 0x216d
mm/dd/yyyy hh:mm:ss:ms NetpProvisionComputerAccount: LDAP creation failed: 0x216d
mm/dd/yyyy hh:mm:ss:ms NetpProvisionComputerAccount: Retrying downlevel per options
mm/dd/yyyy hh:mm:ss:ms NetpManageMachineAccountWithSid: NetUserAdd on '<dc_fqdn>' for 'CLIENT1$' failed: 0x216d
mm/dd/yyyy hh:mm:ss:ms NetpProvisionComputerAccount: retry status of creating account: 0x216d
mm/dd/yyyy hh:mm:ss:ms ldap_unbind status: 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinCreatePackagePart: status:0x216d.
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: Function exits with status of: 0x216d
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: status of disconnecting from '\\<dc_fqdn>': 0x0
mm/dd/yyyy hh:mm:ss:ms NetpResetIDNEncoding: DnsDisableIdnEncoding(RESETALL) on '<domain_name>' returned 0x0
mm/dd/yyyy hh:mm:ss:ms NetpJoinDomainOnDs: NetpResetIDNEncoding on '<domain_name>': 0x0
mm/dd/yyyy hh:mm:ss:ms NetpDoDomainJoin: status: 0x216d

以下情况之一中记录了错误0x216d:

  • 尝试将计算机加入域的用户帐户已超出加入域的 10 台计算机的限制。
  • 存在一个 GPO 限制,用于阻止经过身份验证的用户将计算机加入域。

验证用户帐户是否是默认域控制器策略 GPO 或获胜 GPO 的“将工作站添加到域策略”中提到的组的成员。

GPO 设置位于“计算机配置>策略>”“Windows 设置”“>安全设置”“>本地策略”“用户权限分配>”“将工作站添加到域”。

若要验证用户可加入域的工作站数的默认限制,请参阅 用户可加入域的工作站数的默认限制

将基于 Windows 的计算机加入域时发生的其他错误

有关更多信息,请参阅: