如何解决调用Domain.GetCurrentDomain().DomainControllers时的AD域控制器DNS主机名获取失败异常
如何解决调用Domain.GetCurrentDomain().DomainControllers时的AD域控制器DNS主机名获取失败异常
遇到这种因为单台域控制器(SERVER002)DNS问题导致整个Domain.GetCurrentDomain().DomainControllers调用抛异常、无法返回任何DC的情况,我通常会从以下几个方向排查和修复:
一、先检查问题DC自身的DNS配置与注册状态
- 登录到SERVER002这台域控制器,打开TCP/IP属性,确认它的DNS服务器地址指向的是域内合法的DNS服务器(不能是公网DNS或错误地址),同时DNS后缀要设置为
TLD.org。 - 执行命令手动触发DNS记录注册:
然后重启Netlogon服务(负责DC的DNS记录自动注册):ipconfig /registerdns
这一步通常能修复大部分自动注册失败的问题。net stop netlogon && net start netlogon
二、检查域DNS服务器上的关键记录
登录到域DNS服务器,打开DNS管理器,定位到TLD.org域区域,重点检查以下记录:
- A记录:确认
SERVER002.TLD.org对应的A记录存在,且IP地址是这台DC的正确内网IP;如果有过时或错误的A记录,直接删除或修改。 - SRV记录:
- 查看
_sites/Site01/_tcp和_sites/Site01/_udp目录下,LDAP、Kerberos等服务的SRV记录,确认SERVER002的条目存在,且目标主机指向正确的SERVER002.TLD.org。 - 检查
_msdcs.TLD.org下的DC相关SRV记录(比如_ldap._tcp.dc._msdcs.TLD.org),确保SERVER002的条目正常。
- 查看
三、手动修复DNS记录(自动注册失效时)
如果自动注册始终失败,可以手动添加/修正记录:
- 添加A记录:在
TLD.org区域右键新建「主机」,主机名填SERVER002,输入正确的IP地址,勾选「创建相关的指针(PTR)记录」(如果反向查找区域存在)。 - 添加SRV记录:比如在
_sites/Site01/_tcp下右键新建「其他新记录」,选择「服务位置(SRV)」,服务填_ldap,协议_tcp,优先级0,权重100,端口389,目标主机填SERVER002.TLD.org。
四、极端情况:移除故障DC(如果SERVER002已彻底损坏)
如果SERVER002已经无法修复或准备退役,需要从AD中彻底移除它:
- 如果DC还能登录,运行
dcpromo降级;如果已经离线,用dcpromo /forceremoval强制降级。 - 然后清理AD元数据,确保AD中不再有这台DC的残留对象,这样后续调用
Domain.GetCurrentDomain().DomainControllers就不会再尝试访问它了。
验证修复效果
在出现问题的机器上执行以下命令验证:
nslookup SERVER002.TLD.org:确认能正确解析到IP。nslookup -type=srv _ldap._tcp.Site01._sites.TLD.org:确认能找到SERVER002的SRV记录。
之后再测试Domain.GetCurrentDomain().DomainControllers调用,应该就能正常返回DC列表了。
备注:内容来源于stack exchange,提问作者dragonspeed
相关产品推荐
相关产品推荐

