Windows AD 巡检
AD 的每日基本巡检
1. FSMO 角色日常维护
老样子,先复习一下日常如何查看 FSMO 角色吧!
ntdsutilrolesconnectionsconnect to server <domain.com>quitselect operation targetlist roles for connected server2. 每日检查复制状态
核心是 rapadmin 和 dcdiag,要熟练运用此命令与部分子命令
repadmin /replsummary # 检查 AD 复制状态dcdiag # 检查域控制器整体健康状况2.1.1 repadmin /replsummary 巡检 & RPC 服务器连接异常
模拟时正好出现了 RPC 服务器无法连接的问题,直接开始实战!
repadmin /replsummary
复制摘要开始时间: 2026-09-09 09:33:42正在开始用于复制摘要的数据收集,此操作可能需要一段时间: .....源 DSA 最大增量 失败/总数 %% 错误 QYNET-CORE01 05m:22s 0 / 5 0 QYNET-CORE02 15h:47m:05s 1 / 5 20 (1722) RPC 服务器不可用。目标 DSA 最大增量 失败/总数 %% 错误 QYNET-CORE01 15h:47m:05s 1 / 5 20 (1722) RPC 服务器不可用。 QYNET-CORE02 05m:22s 0 / 5 0这两个 DC 之间的那条 RPC 不工作,15h47m 没能同步。其余边正常。这就是被 RPC 拦住。
2.1.2 确认哪个方向真正断、以及为什么是 RPC
使用 repadmin /showrepl 的子命令来对不同的 Server 进行探查。
repadmin /showrepl QYNET-CORE01
QYNET-CORE\QYNET-CORE01DSA 选项: IS_GC站点选项: (none)DSA 对象 GUID: 86d68c88-4d39-4066-9bdb-5c3a59c3df03DSA 调用 ID: 86d68c88-4d39-4066-9bdb-5c3a59c3df03
==== 入站邻居 ===========================================
DC=qy,DC=net QYNET-CORE\QYNET-CORE02 通过 RPC DSA 对象 GUID: 2b0e1bb4-a1d5-4daa-9766-7c86d4c59dd3 上次在 2026-09-09 09:31:25 的尝试成功。
CN=Configuration,DC=qy,DC=net QYNET-CORE\QYNET-CORE02 通过 RPC DSA 对象 GUID: 2b0e1bb4-a1d5-4daa-9766-7c86d4c59dd3 上次在 2026-09-09 09:28:37 的尝试成功。
CN=Schema,CN=Configuration,DC=qy,DC=net QYNET-CORE\QYNET-CORE02 通过 RPC DSA 对象 GUID: 2b0e1bb4-a1d5-4daa-9766-7c86d4c59dd3 上次在 2026-09-09 09:08:49 的尝试失败。结果 1722 (0x6ba): RPC 服务器不可用。 1 次连续失败。 上次成功时间: 2026-09-08 17:46:37
DC=DomainDnsZones,DC=qy,DC=net QYNET-CORE\QYNET-CORE02 通过 RPC DSA 对象 GUID: 2b0e1bb4-a1d5-4daa-9766-7c86d4c59dd3 上次在 2026-09-09 09:33:39 的尝试成功。
DC=ForestDnsZones,DC=qy,DC=net QYNET-CORE\QYNET-CORE02 通过 RPC DSA 对象 GUID: 2b0e1bb4-a1d5-4daa-9766-7c86d4c59dd3 上次在 2026-09-09 09:33:36 的尝试成功。
源: QYNET-CORE\QYNET-CORE02******* 自 2026-09-08 17:52:10 起连续失败 1 次上一个错误: 1256 (0x4e8): 远程系统不可用。有关网络疑难解答,请参阅 Windows 帮助。根据分析与先前的 VM 操作来看,是昨天下午五点钟左右的时候关闭了 DC2 导致。所以连接检查就会出现错误(无法连接到 RPC 服务器)。
2.1.3 dcdiag 巡检
dcdiag /e /q /c # /e 全林 /c 全套 /q 只报错,输出最节省dcdiag /test:replicationsdcdiag /test:connectivity核心看有没有 PASS 以外的行。一般跑 dcdiag 全量会比较慢,巡检可直接 /e /c,或 先 /replsummary 再按需 dcdiag 更高效。
2.1.4 事件查看器常见的 Event_ID
Event_ID:4740类型:用户密码被锁定部分关键字:TargetUserName:被锁定的账户TargetDomainName:账户所在的计算机名SubjectUserName:触发锁定事件的执行者SubjectLogonId:登录会话ID详细 ID 速查表:
| 事件ID | 名称 | 说明 | 关注度 |
|---|---|---|---|
| 4740 | 账户被锁定 | 触发锁定的核心事件。记录了谁被锁、锁定来源机器。 | ⭐⭐⭐ |
| 4625 | 登录失败 | 密码错误、账户过期、限制登录等失败的尝试。这是锁定前的“前兆”事件。 | ⭐⭐⭐ |
| 4624 | 登录成功 | 成功的登录记录。可用于追溯锁定时段内是否还有其他正常登录。 | ⭐⭐ |
| 4767 | 账户被解锁 | 管理员或系统解锁账户的事件。可配合4740追踪锁定-解锁的时间线。 | ⭐⭐ |
| 4648 | 使用显式凭据登录 | 尝试使用其他账户的凭据登录。可用于排查横向移动或凭证滥用。 | ⭐⭐ |
| 4771 | Kerberos 预认证失败 | 密码过期、时间不同步或账户被禁用的常见原因。 | ⭐⭐ |
| 4776 | 凭据验证失败 | 当域控无法验证一个账户的凭据时记录,常见于NTLM认证失败场景。 | ⭐⭐ |
3. 常用端口列表
| 服务 / 用途 | 端口 | 协议 | 说明 |
|---|---|---|---|
| 管理与Web服务 | |||
| HTTP | 80 | TCP | 组策略、AD FS 的非加密流量 |
| HTTPS | 443 | TCP | 基于 Web 的 AD 管理、AD FS 加密通道 |
| AD Web 服务 | 9389 | TCP | PowerShell 远程管理 AD |
| RPC over HTTP | 593 | TCP | RPC 通过 HTTP 协议通信 |
| AD FS | 49443 | TCP | AD FS 联合身份验证服务 |
| 旧版与特殊协议 | |||
| NetBIOS 名称解析 | 137 | UDP | 旧版 NetBIOS 名称解析 |
| NetBIOS 数据报服务 | 138 | UDP | 旧版 NetBIOS 数据报 |
| NetBIOS 会话服务 | 139 | TCP | 旧版 NetBIOS 会话 |
| VPN 与隧道协议 | |||
| PPTP | 1723 | TCP | PPTP VPN 隧道控制端口 |
| GRE | — | IP协议 47 | PPTP 隧道封装协议 |
| IPSec (ESP/AH) | — | IP协议 50/51 | IPSec 加密和认证协议 |
| 身份验证与登录 | |||
| Kerberos | 88 | TCP/UDP | AD 域核心身份验证协议 |
| LDAP | 389 | TCP/UDP | 轻量级目录访问协议(非加密) |
| LDAPS | 636 | TCP | 基于 SSL 的 LDAP(加密) |
| Kerberos 密码修改 | 464 | TCP/UDP | 域内密码更改请求 |
| 全局编录 (GC) | 3268 | TCP | 林范围目录搜索 |
| 全局编录 SSL | 3269 | TCP | 全局编录加密通道 |
| 目录复制与文件共享 | |||
| RPC 终结点映射器 | 135 | TCP | RPC 服务端口分配 |
| SMB | 445 | TCP | 文件共享与复制 |
| RPC 动态端口 | 49152-65535 | TCP | LSA / SAM / NetLogon 等 RPC 服务 |
| FRS RPC | 49152-65535 | TCP | 文件复制服务(旧版) |
| DFSR RPC | 49152-65535 | TCP | DFS 复制(新版) |
| 管理与时间同步 | |||
| AD Web 服务 | 9389 | TCP | 远程 AD 管理(如 PowerShell) |
| W32Time (NTP) | 123 | UDP | Windows 时间同步 |
| DNS | 53 | TCP/UDP | 域名解析服务 |
关于高位端口,也可以在这个列表中看到。它指的是 AD 复制和 RPC 通信时使用的那一段端口范围,这在配置防火墙时经常会遇到。
当域控之间需要进行复制、身份验证或其他 RPC 通信时,它们会通过 TCP 135 端口建立连接,然后实际的数据传输会通过动态分配的高位端口进行。
在需要排查问题时,可以在域控上使用以下命令查看当前活动的 RPC 连接:
netstat -an | findstr 491524. netsh trace 抓包
netsh trace 是 Windows 内置的网络诊断与跟踪工具。它能捕获网络数据包和系统事件,并生成详细的日志。
它最常用的场景就是抓包。核心流程是“开始捕获”和“停止捕获”两步:
4.1 开始捕获网络流量
netsh trace start capture=yes如果需要更精细的控制,可以加上一些常用参数:
capture=yes # 开始捕获网络流量tracefile=路径 # 指定生成的 .etl 文件的保存路径和名称maxsize=数值 # 设置单个日志文件的最大大小(MB),超过会循环覆盖。persistent=yes # 即使重启电脑,捕获任务也会在重启后继续运行。4.2 停止捕获并生成报告
当问题复现后,在命令提示符中执行 netsh trace stop。系统会停止捕获,并开始合并和生成两个文件:
.etl 文件:原始数据文件。
.cab 文件:包含一个 HTML 格式的摘要报告和更详细的数据。
可以直接打开 .cab 文件中的 HTML 报告,可以快速了解网络活动的整体状况。.etl 文件可以用 netsh trace convert 命令转换为 CSV、XML 或文本格式,便于深入分析。
5. 软件的批量下发
在此之前,首先需要知道一个叫 NETLOGON 的玩意儿。NETLOGON 是每个域控上自动创建的一个共享文件夹(SMB 共享),域内所有计算机和用户都能访问它,主要用来存放”登录/启动脚本”和分发文件。
它对应服务器上的真实路径是: C:\Windows\SYSVOL\sysvol\<domain>\scripts
共享名就是 NETLOGON,访问路径: \\<DC>\NETLOGON
NETLOGON 不是独立目录,它是 SYSVOL 的一个共享视图。会自动复制到所有 DC。所以后续只需要把需要批量下发的软件安装包(MSI文件)与静默安装脚本置入即可。
这里我们以7zip为例子,写一个软件的静默安装脚本:
@echo offREM ============================================REM Install.bat - 通过 GPO 启动脚本批量安装软件REM 用法: 放到 \\<域>\NETLOGON\ 下,由 GPO 启动脚本调用REM ============================================
REM --- 可修改的配置区 ---set "SOFTWARE_UNC=\\QYNET-CORE01\NETLOGON\7z2408-x64.msi"set "LOG_FILE=C:\Windows\Temp\software_install.log"set "INSTALL_CHECK=C:\Program Files\7-Zip\7zFM.exe"REM ----------------------
REM 若已安装,直接退出(避免每次开机重装)if exist "%INSTALL_CHECK%" ( echo [%date% %time%] Already installed, skipping. >> "%LOG_FILE%" exit /b 0)
REM 检查网络共享是否可达(共享没通就别白试)if not exist "%SOFTWARE_UNC%" ( echo [%date% %time%] ERROR: Cannot access %SOFTWARE_UNC% >> "%LOG_FILE%" exit /b 1)
echo [%date% %time%] Starting installation... >> "%LOG_FILE%"
REM 静默安装: /qn 无界面 /norestart 不重启 /l*v 详细日志msiexec /i "%SOFTWARE_UNC%" /qn /norestart /l*v "%LOG_FILE%.msi"
REM 记录退出码set "RC=%errorlevel%"echo [%date% %time%] msiexec exit code: %RC% >> "%LOG_FILE%"
if %RC%==0 ( echo [%date% %time%] SUCCESS >> "%LOG_FILE%") else ( echo [%date% %time%] FAILED with code %RC% >> "%LOG_FILE%")
exit /b %RC%而后,在 GPO 上挂在此脚本用于批量下发:
计算机配置 → 策略 → Windows 设置 → 脚本(启动/关机)最后等待作用域中的终端重启或关机,GPO 下发成功后便会在后台静默安装此程序!非常好用!
6. A记录 与 SPN记录的 故障排查
那么在了解故障排查的步骤与工具之前,需要先了解什么是 A记录,什么是 SPN记录,他们的作用范围在哪。
A记录其实较为简单,它的作用是让域名找到对应的 IP地址,简言之就是 DNS解析记录。
SPN记录较为复杂,它的作用是服务声明标识,就是需要证明”这个服务属于它”。
客户端要访问服务 ↓第1步:DNS 查 A 记录 → "web01.qy.net = 192.168.254.10" ← 找到机器 ↓第2步:同机器上跑着很多服务,要访问哪个?用什么身份? → 这就轮到 Kerberos/SPN 出场 ← 证明服务身份如果 DNS 解析记录炸了,直接从 DNS 入手即可,常用 nslookup(解析域名)、tracert(抓取跳转)、curl 等指令进行一并测试。那么这里的侧重点就放在 SPN 的故障排除吧!
那么在介绍故障排除的方法之前,需要先了解一个很重要的工具:setspn。它的作用是往 AD 对象的 servicePrincipalName 属性里增删改查 SPN。
setspn -L → List # 某账号注册了哪些 SPN(正向查)setspn -Q → Query # 某 SPN 被谁注册了(反向查)setspn -X → eXcess # 全林查重复 SPNsetspn -S → Safe Add # 添加 SPN,但先检查重复setspn -A → Add # 直接添加(不检查)setspn -D → Delete # 删除6.1 setspn -L
可以用来查询目标注册了哪些 SPN。
示例:
# 查询 DCC:\Users\Administrator>setspn -l QYNET-CORE01Registered ServicePrincipalNames 用于 CN=QYNET-CORE01,OU=Domain Controllers,DC=qy,DC=net: exchangeAB/QYNET-CORE01 exchangeAB/QYNET-CORE01.qy.net TERMSRV/QYNET-CORE01 TERMSRV/QYNET-CORE01.qy.net Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/QYNET-CORE01.qy.net ldap/QYNET-CORE01.qy.net/ForestDnsZones.qy.net ldap/QYNET-CORE01.qy.net/DomainDnsZones.qy.net DNS/QYNET-CORE01.qy.net GC/QYNET-CORE01.qy.net/qy.net RestrictedKrbHost/QYNET-CORE01.qy.net RestrictedKrbHost/QYNET-CORE01 RPC/86d68c88-4d39-4066-9bdb-5c3a59c3df03._msdcs.qy.net HOST/QYNET-CORE01/qy HOST/QYNET-CORE01.qy.net/qy HOST/QYNET-CORE01 HOST/QYNET-CORE01.qy.net HOST/QYNET-CORE01.qy.net/qy.net E3514235-4B06-11D1-AB04-00C04FC2DCD2/86d68c88-4d39-4066-9bdb-5c3a59c3df03/qy.net ldap/QYNET-CORE01/qy ldap/86d68c88-4d39-4066-9bdb-5c3a59c3df03._msdcs.qy.net ldap/QYNET-CORE01.qy.net/qy ldap/QYNET-CORE01 ldap/QYNET-CORE01.qy.net ldap/QYNET-CORE01.qy.net/qy.net
# 查个自己的用户C:\Users\Administrator>setspn -l qianyueRegistered ServicePrincipalNames 用于 CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=net:
# 查个终端C:\Users\Administrator>setspn -l QYNET-USER01Registered ServicePrincipalNames 用于 CN=QYNET-USER01,OU=Computer,OU=Admin,OU=Organization,DC=qy,DC=net: RestrictedKrbHost/QYNET-USER01 HOST/QYNET-USER01 RestrictedKrbHost/QYNET-USER01.qy.net HOST/QYNET-USER01.qy.net6.2 setspn -X
一般来说跑这条指令,应该输出”发现 0 个重复 SPN” 。这条命令值得放进定期检查清单。
如果发现了重复的 SPN 则意味着服务异常,需要具体排查,引入下一条指令。
6.3 setspn -Q
尝试反向查询 SPN 吧!
C:\Users\Administrator>setspn -Q HOST/QYNET-CORE01/qy正在检查域 DC=qy,DC=netCN=QYNET-CORE01,OU=Domain Controllers,DC=qy,DC=net exchangeAB/QYNET-CORE01 exchangeAB/QYNET-CORE01.qy.net TERMSRV/QYNET-CORE01 TERMSRV/QYNET-CORE01.qy.net Dfsr-12F9A27C-BF97-4787-9364-D31B6C55EB04/QYNET-CORE01.qy.net ldap/QYNET-CORE01.qy.net/ForestDnsZones.qy.net ldap/QYNET-CORE01.qy.net/DomainDnsZones.qy.net DNS/QYNET-CORE01.qy.net GC/QYNET-CORE01.qy.net/qy.net RestrictedKrbHost/QYNET-CORE01.qy.net RestrictedKrbHost/QYNET-CORE01 RPC/86d68c88-4d39-4066-9bdb-5c3a59c3df03._msdcs.qy.net HOST/QYNET-CORE01/qy HOST/QYNET-CORE01.qy.net/qy HOST/QYNET-CORE01 HOST/QYNET-CORE01.qy.net HOST/QYNET-CORE01.qy.net/qy.net E3514235-4B06-11D1-AB04-00C04FC2DCD2/86d68c88-4d39-4066-9bdb-5c3a59c3df03/qy.net ldap/QYNET-CORE01/qy ldap/86d68c88-4d39-4066-9bdb-5c3a59c3df03._msdcs.qy.net ldap/QYNET-CORE01.qy.net/qy ldap/QYNET-CORE01 ldap/QYNET-CORE01.qy.net ldap/QYNET-CORE01.qy.net/qy.net
发现存在 SPN!
# 如果查不到 → SPN 缺失,要添加# 如果挂在错的账号上 → 删掉重挂# 如果查到多个 → 重复 SPN,要清理6.4 setspn -S & setspn -D
安全添加和删除 SPN记录 的使用,一般来说都是配合先前的故障排查使用。
例如,如果服务账号上缺 SPN,则需要使用 setspn -S 参数进行安全添加。
如果查到多个重复 SPN记录 ,则需要使用 setspn -D 进行清理。
最后就需要使用 setspn -X 进行重复校验,查询是否还存在重复的 SPN记录。
7. klist 的使用
如果想要完成 SPN 的闭环故障排除,则一定是要了解 klist 的。
setspn 查配置是否正确 ↓klist 看实际票据是否拿到 ↓事件日志看 KDC 报什么错klist 的相关用法如下:
# 看当前票据klist
# 清空,强制重新获取klist purge
# 访问某服务触发认证# 再 klist,看有没有对应 SPN 的票据这里简单列出第七节与第八节的小实操清单,以助于快速上手进行故障排除:
# ① 观察现状Get-ADComputer QYNET-CORE01 -Properties servicePrincipalName | Select -ExpandProperty servicePrincipalName
# ② 全林体检setspn -X
# ③ 造实验账号,练增删查New-ADUser -Name "svc_testweb" -SamAccountName "svc_testweb" ` -AccountPassword (ConvertTo-SecureString "P@ssw0rd123" -AsPlainText -Force) ` -Enabled $true -PasswordNeverExpires $truesetspn -S HTTP/testweb.qy.net svc_testwebsetspn -L svc_testwebsetspn -Q HTTP/testweb.qy.net
# ④ 看票据(在客户端机器上跑,观察 Kerberos 实际行为)klist支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!













