在主域虚拟机上正确配置时间服务器
非常好 👍,你的输出信息非常有价值。
我们来仔细分析下目前状态,基本可以确定问题点在哪里。
🔍 一、当前状态分析
| 项目 | 状态 | 说明 |
|---|---|---|
nltest /dsgetdc |
✅ 正常 | 已成功解析到域控制器 S-DNS1.shuncom.local (192.168.0.5),域通信没问题 |
w32tm /query /status |
❌ 异常 | Leap 指示符: 3(未同步)、层次: 0 (未指定)、源: Local CMOS Clock,说明此机器未能与 DC 同步 |
w32tm /query /configuration |
✅ 正常 | Type 为 NT5DS(域层级同步),表示配置是正确的 |
w32tm /query /peers |
⚠️ 异常 | 对等源显示 S-DNS1.shuncom.local,但层次是 0 (未指定),说明虽然发现了 DC,但 DC 没有对外提供时间服务或未响应 NTP |
👉 也就是说:
问题出在 DC(S-DNS1)的时间服务未正确提供,导致客户端无法获得可用时间数据。
🧭 二、请在域控制器(S-DNS1)上执行以下命令检查
1️⃣ 查看 DC 时间服务状态
w32tm /query /status
正常应显示:
Leap Indicator: 0(no warning)
Stratum: 2
Source: Local CMOS Clock
如果 Stratum: 0 或 未同步,说明 DC 自身时间服务异常。
2️⃣ 查看 DC 时间服务配置
w32tm /query /configuration
看一下是否包含:
Type: NTP
NtpServer: time.windows.com,0x8
AnnounceFlags: 5
如果没有,说明 DC 未配置为可靠时间源。
🛠 三、修复 DC 时间服务(PDC 角色上执行)
以下命令只在 PDC 域控制器 上执行(你从
nltest输出看到Flags里包含PDC,说明 S-DNS1 就是 PDC)。
1️⃣ 设置外部时间源(例如微软时间服务器):
w32tm /config /manualpeerlist:"time.windows.com,0x8" /syncfromflags:manual /reliable:yes /update
2️⃣ 重启时间服务:
net stop w32time
net start w32time
3️⃣ 重新同步一次:
w32tm /resync /force
4️⃣ 检查状态:
w32tm /query /status
应看到:
Source: time.windows.com,0x8
Stratum: 2
🧩 四、在客户端再次执行
在你的客户端(7000)主机上执行:
net stop w32time
net start w32time
w32tm /config /syncfromflags:domhier /update
w32tm /resync /force
检查结果:
w32tm /query /source
✅ 理想输出:
S-DNS1.shuncom.local
✅ 五、可选验证
最后可测试:
w32tm /stripchart /computer:S-DNS1.shuncom.local /dataonly /samples:5
若出现带时间偏移值的连续行,说明 NTP 同步通道已恢复。
如果你愿意,把 S-DNS1 上执行的以下两条命令输出发给我:
w32tm /query /status
w32tm /query /configuration
我可以直接帮你确认 DC 是否已经成为“可靠时间源”。
非常好,这个输出说明问题的关键点已经非常清晰了。
你的域控制器 S-DNS1 当前的时间来源是:
Source: VM IC Time Synchronization Provider
也就是 虚拟化平台(Hyper-V 或 VMware)提供的时间同步源,而 不是外部 NTP 服务器或域层级时间服务。
这会导致以下问题👇:
⚠️ 问题说明
-
DC 的 Leap 指示符: 3(未同步) 表示:虽然它声称是主时钟(Stratum 1),但实际上它自己都没同步。
-
“VM IC Time Synchronization Provider” 是虚拟机工具自动注入的时间源(VMware Tools / Hyper-V Integration Services)。
域内其他主机(如你的7000客户机)从该 DC 获取时间时,会被拒绝或无法获得“可用的时间数据”。
换句话说:
DC 当前只是从虚拟机宿主机获取时间,而非一个“可靠的 NTP 服务端”。
✅ 解决方案(让 S-DNS1 成为域内可靠时间源)
步骤 1:在 S-DNS1 上设置外部时间源
以管理员身份运行 PowerShell:
w32tm /config /manualpeerlist:"time.windows.com,0x8 cn.pool.ntp.org,0x8" /syncfromflags:manual /reliable:yes /update
这条命令含义:
-
manualpeerlist: 设置多个外部 NTP 源。 -
syncfromflags:manual: 强制从外部手动源同步。 -
reliable:yes: 声明本机是域内“可靠时间源”(PDC 的必备角色)。
步骤 2:禁用虚拟机时间同步(在 Hyper-V 或 VMware 上)
因为虚拟化层的时间同步会“覆盖” w32time。
VMware 环境下:
在 VMware vSphere 中编辑虚拟机设置,取消勾选:
“Synchronize guest time with host”
或者在命令行中执行:
vmware-toolbox-cmd timesync disable
Hyper-V 环境下:
取消集成服务里的 “Time synchronization” 勾选。
步骤 3:重启时间服务并立即同步
net stop w32time
net start w32time
w32tm /resync /force
然后检查:
w32tm /query /status
期望输出:
Leap 指示符: 0(no warning)
层次: 2
源: time.windows.com,0x8
步骤 4:客户端(如“7000”)重新同步
net stop w32time
net start w32time
w32tm /config /syncfromflags:domhier /update
w32tm /resync /force
然后:
w32tm /query /source
应返回:
S-DNS1.shuncom.local
🔎 验证测试
客户端上运行:
w32tm /stripchart /computer:S-DNS1.shuncom.local /dataonly /samples:5
如果出现类似输出:
12:34:56, +00.0012345s
12:34:57, +00.0009876s
...
表示时间同步链路已恢复正常。
是否方便告诉我你的域控制器是在 VMware 还是 Hyper-V 环境中?
我可以针对该平台提供具体的“禁用虚拟机时间同步”的操作步骤。