排查域控制器复制故障
2019-12-22河南刘进京
河南 刘进京
某单位在网络环境中部署了多台Windows Server 2012 R2域控制器,近日在域控制之间复制时出现异常现象。系统显示“没有足够的站点连接信息用于KCC 创建跨越树复制拓扑,或者具有此目录分区的一个或者多个目录服务器无法复制目录分区信息,这可能源于目录服务无法访问”的错误信息,造成域控之间复制失败,活动目录数据库无法及时同步更新。
故障排查
对于域控复制失败问题,首先执行“repadmin/showrepl”命令检测域控复制状态,在返回信息中出现“DSA 选项:IS_GC DISABLE_INBOUND_RFEPL DISABLE_OUTBOUND_REPL”的提示信息,说明出站和入站的复制状态均为“Disable”,即域控复制被禁用。
执行“repadmin/options dc1-DISABLE_INBOUND_REPL”和“repadmin/options dc1-DISABLE_OUTBOUND_REPL”命令,在返回信息中的“新的DCA 选项”行中只显示“IS_GC”项,说明启用了域控制器的复制功能,“dc1”为该域控名称。
之后执行“repadmin/showconn”命令,确认域控之间是否成功创建复制链接。接着执行“repadmin/showrepl”命令,显示当前域控的复制状态,在返回信息中出现“由于DNS 查找故障,DSA 操作无法进行”的信息。执行“repadmin/syncall dc1/force”命令,强制当前域控和目标域控之间强制进行复制,出现“到DC1的DsBindWithCred 失败,状态:1732<0x6ba> RPC 服务器不可用”的提示。
使用ping 命令对目标域名进行探测也出现异常,对域控之间的网络连接进行检测,并更换连接的网线,但在强制复制时依然出现问题。
经检查在这些域控主机上都部署了Active Directory 集成区域DNS 服务。在对该域控上打开DNS控制台,对配置信息进行检测时,发现“_msdcs.xxx.com”子域中的配置信息存在缺失的情况,可能是有人误操作对该子域造成了破坏。
活动目录使用DNS 来定位域控制器,之后才可以使用活动目录提供的服务,包括全局编录服务、Kerberos、轻量级负载协议和域控制器等,所有的SRV 纪录全部保存在该子域中。Netlogon 进程会在每个域控制器上动态注册所需的纪录。
所有的域控会通过复制机制同步该子域内容。该子域配置会通过活动目录数据库的多主机复制机制,同步到每个运行DNS 域的控制器。在该子域中包含DC、Domain、GC 以及PDC 等项目,这些项目会标注活动目录服务中常见的服务所在的域控制器及定义域控制器的属性。如果该子域出现问题,不仅会导致域控之间复制失败,还会造成客户端登录验证失败。
故障解决
为解决问题,需要对该子域进行恢复。因为该子域已被破坏,可以先删除,再重建来进行恢复操作。
在DNS 管理器中选择“正向查找区域”项,右击“新建区域”项,在新建区域向导界面中点击“下一步”,在区域类型窗口中选择“主要区域”和“在Active Directory 中存储区域(只有DNS 服务器是可写控制器时才可用)”。该区域支持安全更新,域中所有计算机的地址变化后都会向该区域注册自己的IP。
点击“下一步”按钮,在Active Directory 区域传送作用域窗口中选择“至此域中域控制器上运行的所有DNS 服务器”项,表示仅仅在部署Active Directory 集成区域DNS 服务的服务器上进行区域传送。
点击“下一步”,在“区域名称”栏中输入“_msdcs.xxx.com”,点击“下一步”,在动态更新窗口中选择“只允许安全的动态更新(适合Active Directory 使用)”,点击“完成”,创建该子域。打开“网络连接属性窗口→Internet协议版本4(TCP/Ipv4)→使用下面的DNS 服务器地址”项,保证首选DNS服务器指向域控地址。
执行“net stop netlogon”和“net start netlogon”命令,重新注册并生成新服务,检测“_msdcs.xxx.com”子域下是否包含DC、Domain、GC及PDCPDC 等子文件。
完成以上操作后,打开 Active Directory 站点和服务窗口,在左侧选择“Sites→站点名称→Serves→域控名称→NTDS Settings”项,在右侧窗口中选择由KCC 自动生成的目标复制链接,右击“立即复制”项,在弹出窗口点击“立即复制”,强制在指定域控之间立即执行复制操作。
也可以执行“repadmin/replicate dc1 dc2 dc=xxx,dc=com/force”命令,在指定的域控之间执行强制复制操作,其中的“xxx”为聚义的域名,“dc1”和“dc2”为具体的域控名称。执行“repadmin/showrepl”命令,显示域控之间复制信息。执行“repadmin/syncall”命令,可以同步所有的域控。可以看到,域控之间的复制可以顺利进行了。