☰
AD域控复制故障排查:6个核心工具与实战避坑指南
2026/9/30 1:04:42 网站建设 项目流程

简介:这份PDF面向Windows Server域环境下的AD管理员与运维工程师,聚焦Active Directory复制故障的排查与诊断。内容从复制基本原理切入,讲解架构NC、配置NC与域NC的同步机制,以及KCC、站点、站点链路、连接对象和桥头服务器如何共同构建复制拓扑,并说明USN、高水印值与最新矢量在减少冗余复制流量中的作用。在此基础上,逐一介绍DsGetDcName、Repadmin、Ntdsutil、Netdiag、Dcdiag与事件查看器六个基本工具的用途与适用场景,帮助读者定位复制中断、拓扑异常等问题的发生时间与原因。资源包为单个PDF文件,约514KB,结构紧凑,适合作为日常排错时的速查手册。目前已有62人学习,适合希望系统理解AD复制机制并提升故障处置效率的中级运维人员参考。

1. 排除AD复制故障的6个基本工具:从事件日志到端口探测的完整排查链路

域控之间复制中断,是所有 AD 运维里最让人头疼的一类故障。它不像单台服务器宕机那样直观,往往表现为用户改完密码后分部登录不上、新建账号在总部能查到分部查不到、组策略改了三天还没生效。等你意识到是复制出了问题,可能已经过去一周。更麻烦的是,AD 复制依赖 DNS、RPC、Kerberos、时间同步等多个底层组件,任何一个环节出问题都会导致复制失败,而报错信息通常只给你一个模糊的“目标主体名称不正确”或“RPC 服务器不可用”。

这篇内容围绕排除 AD 复制故障的 6 个基本工具展开,把每个工具能查什么、怎么用、输出怎么读、参数怎么调讲清楚。适合已经有一定 AD 基础、需要独立处理多站点复制问题的运维工程师。如果你手上正好有复制报错但不知道从哪下手,可以按文中顺序逐个工具排查,基本能覆盖八成以上的常见故障场景。

2. 先用 repadmin 把复制拓扑和状态摸清楚

repadmin 是 AD 复制排查的核心命令行工具,随 AD DS 角色安装后自带,不需要额外下载。它的子命令覆盖了复制状态查询、手动触发复制、拓扑检查、元数据清理等操作。很多人只记得/replsummary,其实真正定位问题时需要组合使用多个子命令。

2.1 repadmin /replsummary 看全局复制健康度

第一步永远是看全局摘要,确认哪些域控之间复制失败、失败比例是多少。

repadmin /replsummary

输出分两部分:Source DSA 和 Destination DSA。重点看 largest delta 和 fails/total 两列。largest delta 表示该域控最近一次成功复制距今多久,如果超过站点间复制间隔(默认 180 分钟)的 2 到 3 倍,说明复制可能已经中断。fails/total 显示失败次数占总尝试次数的比例,非零就需要进一步排查。

参数方面,/replsummary默认查询当前用户所在域的所有域控。如果要指定域,加/domain:xxx.com。如果只想看某个站点的域控,加/site:SiteName。输出里的错误码是关键线索,比如 8524 表示 DNS 解析失败,1722 表示 RPC 服务器不可用,1256 表示远程系统不可用。

2.2 repadmin /showrepl 定位具体失败链路

全局摘要只能告诉你“有问题”,/showrepl才能告诉你“哪条链路有问题、错误码是什么”。

repadmin /showrepl DC01

输出会列出该域控所有入站复制伙伴的状态。每个伙伴下面有 Last replication received 的时间戳和错误信息。如果看到Last replication received: never或者错误码非零,说明这条链路断了。

常见错误码对应关系:8524 是 DNS 查找失败,需要检查 SRV 记录;1722 是 RPC 服务不可达,检查 RPC 端口和防火墙;1256 是目标服务器不可用,可能是网络不通或对方服务没启动。/showrepl还支持/csv参数把输出导出成 CSV 文件,方便对比多台域控的状态。

2.3 repadmin /syncall 手动触发复制验证

确认问题链路后,可以手动触发复制来验证修复效果。

repadmin /syncall DC01 /AeD

参数含义:/A表示所有命名上下文,/e表示企业级(跨站点),/D表示按 DN 顺序同步。执行后会显示每条复制链路的同步结果,成功会显示SyncAll terminated with no errors。如果有错误,会直接列出错误码。

注意/syncall默认只同步入站复制,如果要同时触发出站,加/P参数。另外这个命令不会强制立即复制,只是把复制任务加入队列,实际复制时间取决于站点间复制间隔和变更通知机制。

3. 用 dcdiag 做域控健康检查,把隐藏问题翻出来

dcdiag 是另一个自带工具,它比 repadmin 更全面,会检查 DNS、LDAP、RPC、FSMO、复制等十几个项目。很多人只跑/test:replications,其实完整跑一遍能发现很多隐藏问题。

3.1 dcdiag /test:replications 专项复制测试

dcdiag /test:replications /v

/v是详细模式,会输出每个复制伙伴的测试结果。如果复制正常,会显示PASS;如果失败,会显示具体错误。这个测试本质上和 repadmin /showrepl 类似,但 dcdiag 会额外检查复制拓扑的连通性。

参数方面,/s:DC01指定目标域控,/u:domain\user /p:password指定凭据。如果当前登录用户就是域管理员,可以省略凭据参数。

3.2 dcdiag /test:dns 排查 DNS 解析问题

AD 复制故障里至少三成是 DNS 问题导致的。dcdiag 的 DNS 测试会检查 SRV 记录、A 记录、转发器配置等。

dcdiag /test:dns /v /s:DC01

输出会分几个子项:Connectivity、Forwarders、Delegation、Dynamic Update、Record Registration、External Name Resolution。重点看 Connectivity 和 Record Registration。如果 SRV 记录缺失或指向错误的 IP,复制必然失败。

常见问题:域控的 DNS 指向了自己但没指向其他域控,导致跨站点解析失败。正确做法是每台域控的 DNS 首选指向同站点的另一台域控,备用指向自己(127.0.0.1)。如果只有一台域控,首选指向自己,备用留空。

3.3 dcdiag /test:services 检查关键服务状态

AD 复制依赖多个服务:RPC、Kerberos、DNS、Netlogon、W32Time 等。任何一个没启动都会导致复制失败。

dcdiag /test:services /s:DC01

输出会列出所有关键服务的状态。如果看到STOPPED或PAUSED,需要手动启动并检查为什么没自动启动。常见的是 W32Time 服务被禁用,导致时间偏差超过 5 分钟,Kerberos 认证失败,复制自然也就断了。

4. 用 PortQry 和 PowerShell 验证 RPC 端口连通性

AD 复制使用 RPC 动态端口,默认范围是 49152 到 65535。很多防火墙只开了 135 端口,没开动态端口范围,导致复制间歇性失败。PortQry 是微软官方出的端口探测工具,虽然已经停止更新,但在内网环境依然好用。

4.1 PortQry 探测 RPC 端点映射器

portqry -n DC02 -e 135

这个命令探测目标域控的 135 端口(RPC 端点映射器)。如果返回LISTENING,说明端口通;如果返回FILTERED或NOT LISTENING,说明防火墙拦截或服务没启动。

但 135 端口通不代表复制能成功,因为实际数据传输用的是动态端口。需要进一步查询端点映射器获取动态端口号。

portqry -n DC02 -e 135 -p tcp -r

这个命令会查询端点映射器,返回 AD 复制使用的动态端口号。拿到端口号后,再用 portqry 探测该端口是否开放。

4.2 PowerShell Test-NetConnection 批量验证

PortQry 只能一个个测,效率低。PowerShell 的 Test-NetConnection 可以批量验证。

$dcs = @("DC01", "DC02", "DC03") foreach ($dc in $dcs) { $result = Test-NetConnection -ComputerName $dc -Port 135 Write-Output "$dc : $($result.TcpTestSucceeded)" }

这段脚本遍历域控列表,逐个测试 135 端口连通性。输出 True 表示通,False 表示不通。如果需要测试动态端口范围,可以把 Port 参数改成具体端口号。

参数说明:-ComputerName指定目标,-Port指定端口,-InformationLevel可以设为 Detailed 获取更详细的信息。如果要在多台机器上跑,可以配合 Invoke-Command 远程执行。

4.3 检查防火墙动态端口配置

如果发现动态端口不通,需要检查防火墙规则。AD 复制默认使用 49152 到 65535 范围,但可以通过注册表限制到更小的范围。

netsh int ipv4 show dynamicport tcp

这个命令显示当前动态端口范围。如果范围太大,防火墙不好配,可以修改注册表缩小范围。

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" -Name "TCP/IP Port" -Value 50000

这个注册表项把 AD 复制端口固定为 50000。修改后需要重启 NTDS 服务。注意这个设置要在所有域控上保持一致,否则复制会失败。

5. 用 Wireshark 抓包定位复制握手失败的具体环节

前面几个工具能告诉你“复制失败了”,但有时候错误码很模糊,比如 8453(复制访问被拒绝),你不知道是权限问题还是 Kerberos 问题。这时候需要抓包看具体握手过程。

5.1 抓包过滤 AD 复制流量

AD 复制使用 DRSUAPI 协议,对应的 Wireshark 过滤器是drsuapi。

tshark -i eth0 -f "tcp port 135 or tcp port 50000" -Y "drsuapi" -w ad_repl.pcap

参数说明:-i eth0指定网卡,-f是抓包过滤器(BPF 语法),-Y是显示过滤器(Wireshark 语法),-w保存到文件。抓完后用 Wireshark 打开分析。

5.2 分析 Kerberos 认证失败

如果复制报错是“访问被拒绝”,重点看 Kerberos 认证过程。在 Wireshark 里过滤kerberos,看 AS-REQ 和 AS-REP 是否正常。

常见问题:域控的 SPN 注册错误,导致 Kerberos 认证失败。可以用setspn -L DC01检查 SPN 列表,确认E3514235-4B06-11D1-AB04-00C04FC2DCD2/xxxx这条 SPN 存在且指向正确的域控。

setspn -L DC01 | findstr E3514235

如果缺失,手动添加:

setspn -A E3514235-4B06-11D1-AB04-00C04FC2DCD2/xxxx DC01

其中 xxxx 是域控的 NTDS Settings 对象的 GUID,可以在 ADSI Edit 里查到。

5.3 检查时间同步偏差

Kerberos 默认允许的时间偏差是 5 分钟。如果域控之间时间差超过 5 分钟,认证会失败,复制也会中断。

w32tm /stripchart /computer:DC02 /samples:5

这个命令显示本机与 DC02 的时间偏差。如果偏差超过 5 分钟,需要强制同步。

w32tm /resync /force

如果同步失败,检查 W32Time 服务是否启动,以及时间源配置是否正确。PDC 模拟器应该指向可靠的外部时间源,其他域控指向 PDC。

6. 避坑:AD 复制排查中最容易翻车的 5 个操作

6.1 盲目重启域控导致复制状态更糟

现象:复制报错后直接重启域控,重启后发现复制还是失败,甚至其他域控也开始报错。

原因:重启会中断正在进行的复制,如果复制队列里有大量待同步的变更,重启后可能触发全量复制,加重网络负担。更严重的是,如果重启时域控正在写 USN,可能导致 USN 回滚,引发复制冲突。

解决:重启前先用repadmin /showrepl确认复制状态,如果有大量待同步变更,先手动触发复制同步完再重启。重启后立即检查事件日志,确认没有 USN 回滚错误。

6.2 忽略 DNS 解析顺序导致跨站点复制失败

现象:同站点复制正常,跨站点复制失败,报错 8524。

原因:域控的 DNS 客户端配置里,首选 DNS 指向了自己,备用 DNS 指向了同站点的另一台域控。跨站点复制时,需要解析对方站点的 SRV 记录,但自己的 DNS 没有对方站点的区域副本,导致解析失败。

解决:每台域控的首选 DNS 应该指向同站点的另一台域控,备用指向自己。如果站点只有一台域控,首选指向自己,但需要确保 DNS 区域复制正常,能解析其他站点的记录。

6.3 防火墙只开 135 端口没开动态端口

现象:复制偶尔成功偶尔失败,报错 1722。

原因:防火墙开了 135 端口,但 AD 复制实际数据传输用的是动态端口(49152-65535)。动态端口范围太大,防火墙管理员只开了部分端口,导致部分复制请求失败。

解决:要么在防火墙开放完整的动态端口范围,要么通过注册表把 AD 复制端口固定为某个值,然后在防火墙开放该端口。推荐后者,更容易管理。

6.4 用错凭据导致权限不足

现象:用普通域用户执行 repadmin 命令,报错 8453。

原因:repadmin 需要域管理员或企业管理员权限。普通域用户没有复制权限,即使能执行命令也会报访问被拒绝。

解决:用域管理员账号执行,或者用/u:domain\user /p:password参数指定凭据。注意密码里有特殊字符时要用引号包起来。

6.5 忽略事件日志里的关键线索

现象:复制报错后只盯着 repadmin 输出,忽略了事件日志。

原因:repadmin 只显示复制状态,具体错误原因往往在事件日志里。比如 Kerberos 认证失败会在系统日志里记录详细错误码,DNS 解析失败会在 DNS 服务器日志里记录。

解决:排查复制故障时,同时打开事件查看器,重点看 Directory Service 日志和 DNS Server 日志。用Get-WinEvent命令可以快速筛选。

Get-WinEvent -LogName "Directory Service" -MaxEvents 50 | Where-Object {$_.LevelDisplayName -eq "Error"}

这个命令列出 Directory Service 日志里最近 50 条错误事件,快速定位问题。

7. 用 AD 复制健康检查脚本把排查周期从小时压到分钟

前面讲的都是手动排查方法,每次出问题都要逐个工具跑一遍,效率低。我后来写了一个 PowerShell 脚本,把 repadmin、dcdiag、端口测试整合到一起,一键输出健康报告。

# AD复制健康检查脚本 $dcs = (Get-ADDomainController -Filter *).Name $report = @() foreach ($dc in $dcs) { # 复制状态 $repl = repadmin /showrepl $dc /csv | ConvertFrom-Csv $failCount = ($repl | Where-Object {$_.'Number of Failures' -ne '0'}).Count # DNS测试 $dns = dcdiag /test:dns /s:$dc | Select-String "passed|failed" # 端口测试 $port = Test-NetConnection -ComputerName $dc -Port 135 $report += [PSCustomObject]@{ DC = $dc ReplFailures = $failCount DNSStatus = if ($dns -match "failed") {"FAIL"} else {"PASS"} Port135 = $port.TcpTestSucceeded } } $report | Format-Table -AutoSize

脚本逻辑:遍历所有域控,对每台执行 repadmin /showrepl 获取复制失败次数,执行 dcdiag /test:dns 检查 DNS 状态,执行 Test-NetConnection 检查 135 端口。最后输出汇总表格。

参数调整:如果域控数量多,可以加-Parallel参数并行执行(PowerShell 7+)。如果只想检查特定站点,可以在 Get-ADDomainController 里加-Site参数。

这个脚本我一般放在计划任务里每天跑一次,输出到 CSV 文件。一旦发现复制失败次数非零或 DNS 状态 FAIL,立即告警。这样不用等用户报故障,提前就能发现隐患。

踩过的坑:repadmin /showrepl 的 CSV 输出里,列名是带空格的,用 ConvertFrom-Csv 后需要用$_.'Number of Failures'这种方式访问。另外 dcdiag 的输出是文本,用 Select-String 匹配时要注意大小写和语言版本,英文系统显示 passed/failed,中文系统显示 通过/失败。

希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询