域控制器硬件时钟故障会导致Kerberos认证死循环,根本原因是CMOS电池失效或晶振老化引发持续时间漂移,需通过w32tm两次查询Skew变化、事件日志ID 131/144及BIOS时间比对来确诊,并优先修复PDC仿真器的硬件时钟。
域控制器硬件时钟故障会引发kerberos认证死循环——客户端反复请求tgt、反复被拒,日志中密集出现kerb_ap_err_skew或错误码0x80090322,但手动同步时间命令(如w32tm /resync)看似成功却无法根治。问题核心在于:硬件时钟持续漂移,导致系统时间在同步后数分钟内再次超差,kdc服务不断拒绝票据,形成“同步→短暂可用→漂移超限→认证失败→重试”闭环。
确认是否为硬件时钟漂移而非普通不同步
仅检查当前偏移量(w32tm /query /status)不够,需观察漂移趋势:
- 执行
w32tm /query /status两次,间隔5分钟,对比Skew值变化。若从100ms增至400000ms(即400秒),说明硬件时钟正以每分钟约75秒速度快进,属典型晶振老化或CMOS电池失效 - 查看系统事件日志中
W32Time来源的事件ID 131、144,若频繁出现“时钟偏差过大,已重置同步源”或“时钟跳跃超过阈值”,基本可锁定硬件层问题 - 登录域控物理服务器(或BIOS界面),对比BIOS时间与Windows系统时间。若两者相差显著(如>1分钟)且重启后BIOS时间仍不准,直接指向CMOS电池耗尽
隔离并验证PDC仿真器角色持有者的时间源
域内所有时间同步最终溯源至PDC仿真器(PDC Emulator FSMO角色)。若该DC硬件时钟异常,整个域都会失效:
- 先确认哪台DC持有PDC角色:
netdom query fsmo或Get-ADDomain | Select-Object PDCEmulator - 在PDC上运行:
w32tm /query /configuration,检查NtpServer是否配置为可靠外部源(如time.windows.com,0x9或pool.ntp.org,0x1),且AnnounceFlags值为5或更高(允许作为域内时间源) - 强制PDC从外部NTP校准:
w32tm /config /syncfromflags:manual /manualpeerlist:"time.windows.com" /reliable:yes /update,再执行w32tm /resync /force - 关键验证:运行
w32tm /monitor,观察PDC自身与上游NTP源的Offset是否稳定在±50ms内。若持续波动超200ms,说明硬件时钟已无法维持短期精度
临时缓解与长期修复措施
硬件故障需更换部件,但业务不能停。以下操作可打破死循环:
- 对PDC执行高频强制同步(非推荐但应急有效):
SchTasks /Create /SC MINUTE /MO 3 /TN "ForceTimeSync" /TR "w32tm /resync /force" /F,每3分钟校准一次(注意避免与域内其他同步任务冲突) - 降低Kerberos时间容差(仅限测试环境):修改注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters,新建DWORD值MaxClockSkew,设为600(单位秒,即10分钟),重启KDC服务。生产环境严禁此操作,会削弱协议安全性 - 立即更换PDC服务器CMOS电池,并校准BIOS时间;若服务器老旧(如超5年),建议整体更换,避免晶振老化不可逆
- 部署硬件RTC监控脚本:用PowerShell定期读取
Get-WmiObject Win32_ComputerSystem | Select-Object CurrentTimeZone与Get-Date比对,偏移超30秒即邮件告警
验证修复效果
修复后需交叉验证,避免误判:
- 在客户端执行
klist purge && kinit username@DOMAIN.COM,观察是否一次性获取TGT且klist -v中有效期正常 - 抓包验证AS-REQ/AS-REP阶段:用
Wireshark过滤kerberos && ip.addr ==,确认AS-REP响应中的enc-part.ctime与本地时间差≤5分钟 - 检查域内其他DC是否已自动从修复后的PDC同步:在辅助DC上运行
w32tm /query /peers,确认PDC列为Active且Stratum值为2(表示二级时间源)










