Windows AD 巡检

3112 字
16 分钟
Windows AD 巡检

AD 的每日基本巡检#

1. FSMO 角色日常维护#

老样子,先复习一下日常如何查看 FSMO 角色吧!

Terminal window
ntdsutil
roles
connections
connect to server <domain.com>
quit
select operation target
list roles for connected server

2. 每日检查复制状态#

核心是 rapadmin 和 dcdiag,要熟练运用此命令与部分子命令

Terminal window
repadmin /replsummary # 检查 AD 复制状态
dcdiag # 检查域控制器整体健康状况

2.1.1 repadmin /replsummary 巡检 & RPC 服务器连接异常#

模拟时正好出现了 RPC 服务器无法连接的问题,直接开始实战!

Terminal window
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 进行探查。

Terminal window
repadmin /showrepl QYNET-CORE01
QYNET-CORE\QYNET-CORE01
DSA 选项: IS_GC
站点选项: (none)
DSA 对象 GUID: 86d68c88-4d39-4066-9bdb-5c3a59c3df03
DSA 调用 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 巡检#

Terminal window
dcdiag /e /q /c # /e 全林 /c 全套 /q 只报错,输出最节省
dcdiag /test:replications
dcdiag /test:connectivity

核心看有没有 PASS 以外的行。一般跑 dcdiag 全量会比较慢,巡检可直接 /e /c,或 先 /replsummary 再按需 dcdiag 更高效。

2.1.4 事件查看器常见的 Event_ID#

Terminal window
Event_ID:4740
类型:用户密码被锁定
部分关键字:
TargetUserName:被锁定的账户
TargetDomainName:账户所在的计算机名
SubjectUserName:触发锁定事件的执行者
SubjectLogonId:登录会话ID

详细 ID 速查表:

事件ID名称说明关注度
4740账户被锁定触发锁定的核心事件。记录了谁被锁、锁定来源机器。⭐⭐⭐
4625登录失败密码错误、账户过期、限制登录等失败的尝试。这是锁定前的“前兆”事件。⭐⭐⭐
4624登录成功成功的登录记录。可用于追溯锁定时段内是否还有其他正常登录。⭐⭐
4767账户被解锁管理员或系统解锁账户的事件。可配合4740追踪锁定-解锁的时间线。⭐⭐
4648使用显式凭据登录尝试使用其他账户的凭据登录。可用于排查横向移动或凭证滥用。⭐⭐
4771Kerberos 预认证失败密码过期、时间不同步或账户被禁用的常见原因。⭐⭐
4776凭据验证失败当域控无法验证一个账户的凭据时记录,常见于NTLM认证失败场景。⭐⭐

3. 常用端口列表#

服务 / 用途端口协议说明
管理与Web服务
HTTP80TCP组策略、AD FS 的非加密流量
HTTPS443TCP基于 Web 的 AD 管理、AD FS 加密通道
AD Web 服务9389TCPPowerShell 远程管理 AD
RPC over HTTP593TCPRPC 通过 HTTP 协议通信
AD FS49443TCPAD FS 联合身份验证服务
旧版与特殊协议
NetBIOS 名称解析137UDP旧版 NetBIOS 名称解析
NetBIOS 数据报服务138UDP旧版 NetBIOS 数据报
NetBIOS 会话服务139TCP旧版 NetBIOS 会话
VPN 与隧道协议
PPTP1723TCPPPTP VPN 隧道控制端口
GRE—IP协议 47PPTP 隧道封装协议
IPSec (ESP/AH)—IP协议 50/51IPSec 加密和认证协议
身份验证与登录
Kerberos88TCP/UDPAD 域核心身份验证协议
LDAP389TCP/UDP轻量级目录访问协议(非加密)
LDAPS636TCP基于 SSL 的 LDAP(加密)
Kerberos 密码修改464TCP/UDP域内密码更改请求
全局编录 (GC)3268TCP林范围目录搜索
全局编录 SSL3269TCP全局编录加密通道
目录复制与文件共享
RPC 终结点映射器135TCPRPC 服务端口分配
SMB445TCP文件共享与复制
RPC 动态端口49152-65535TCPLSA / SAM / NetLogon 等 RPC 服务
FRS RPC49152-65535TCP文件复制服务(旧版)
DFSR RPC49152-65535TCPDFS 复制(新版)
管理与时间同步
AD Web 服务9389TCP远程 AD 管理(如 PowerShell)
W32Time (NTP)123UDPWindows 时间同步
DNS53TCP/UDP域名解析服务

关于高位端口,也可以在这个列表中看到。它指的是 AD 复制和 RPC 通信时使用的那一段端口范围,这在配置防火墙时经常会遇到。

当域控之间需要进行复制、身份验证或其他 RPC 通信时,它们会通过 TCP 135 端口建立连接,然后实际的数据传输会通过动态分配的高位端口进行。

在需要排查问题时,可以在域控上使用以下命令查看当前活动的 RPC 连接:

Terminal window
netstat -an | findstr 49152

4. netsh trace 抓包#

netsh trace 是 Windows 内置的网络诊断与跟踪工具。它能捕获网络数据包和系统事件,并生成详细的日志。

它最常用的场景就是抓包。核心流程是“开始捕获”和“停止捕获”两步:

4.1 开始捕获网络流量#

Terminal window
netsh trace start capture=yes

如果需要更精细的控制,可以加上一些常用参数:

Terminal window
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为例子,写一个软件的静默安装脚本:

Terminal window
@echo off
REM ============================================
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。

Terminal window
setspn -L → List # 某账号注册了哪些 SPN(正向查)
setspn -Q → Query # 某 SPN 被谁注册了(反向查)
setspn -X → eXcess # 全林查重复 SPN
setspn -S → Safe Add # 添加 SPN,但先检查重复
setspn -A → Add # 直接添加(不检查)
setspn -D → Delete # 删除

6.1 setspn -L#

可以用来查询目标注册了哪些 SPN。

示例:

Terminal window
# 查询 DC
C:\Users\Administrator>setspn -l QYNET-CORE01
Registered 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 qianyue
Registered ServicePrincipalNames 用于 CN=浅月,OU=User,OU=Admin,OU=Organization,DC=qy,DC=net:
# 查个终端
C:\Users\Administrator>setspn -l QYNET-USER01
Registered 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.net

6.2 setspn -X#

一般来说跑这条指令,应该输出”发现 0 个重复 SPN” 。这条命令值得放进定期检查清单。

如果发现了重复的 SPN 则意味着服务异常,需要具体排查,引入下一条指令。

6.3 setspn -Q#

尝试反向查询 SPN 吧!

Terminal window
C:\Users\Administrator>setspn -Q HOST/QYNET-CORE01/qy
正在检查域 DC=qy,DC=net
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
发现存在 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 的相关用法如下:

Terminal window
# 看当前票据
klist
# 清空,强制重新获取
klist purge
# 访问某服务触发认证
# 再 klist,看有没有对应 SPN 的票据

这里简单列出第七节与第八节的小实操清单,以助于快速上手进行故障排除:

Terminal window
# ① 观察现状
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 $true
setspn -S HTTP/testweb.qy.net svc_testweb
setspn -L svc_testweb
setspn -Q HTTP/testweb.qy.net
# ④ 看票据(在客户端机器上跑,观察 Kerberos 实际行为)
klist

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Windows AD 巡检
https://springtsuki.xucjno.com/posts/springtsuki/notes/windowsad/99/
作者
SpringTsuki
发布于
2026-09-09
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
SpringTsuki
你好,我是浅月。
公告
浅月的开发小窝!欢迎你来到这里!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
56
分类
9
标签
42
总字数
188,888
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
GitHub Actions
博客版本
Firefly v6.13.5
文章许可
CC BY-NC-SA 4.0

文章目录