第一部分:理解核心概念
在开始之前,有几个关键概念需要了解:

- Windows Time 服务: 这是 Windows 内置的时间同步服务,它既可以作为客户端(从外部服务器同步时间),也可以作为服务器(为网络中的其他设备提供时间)。
- NTP vs. SNTP: Windows Time 服务默认使用简化版 NTP (SNTP - Simple Network Time Protocol),对于绝大多数企业内部网络和日常使用,SNTP 的精度已经足够(毫秒级),如果您需要微秒级或更高的精度,则需要配置为完整的 NTP 模式,但这通常不是必需的。
- 层级: NTP 网络是一个层级结构,顶层是Stratum 0(如原子钟、GPS 授时设备),Stratum 1 直接连接 Stratum 0,以此类推。Windows Time 服务默认是 Stratum 3,这意味着它会同步到一个更高层级的源(通常是互联网上的公共 NTP 服务器),然后为您的客户端提供时间。您不应将一台 Windows 服务器直接配置为 Stratum 1,除非它连接了真实的 Stratum 0 时钟硬件。
第二部分:搭建 NTP 服务器(核心步骤)
以下步骤适用于 Windows Server 和 Windows 10/11 专业版/企业版,家庭版默认不提供此功能。
步骤 1:启用 Windows Time 服务
确保时间服务正在运行,并设置为自动启动。
- 按
Win + R键,输入services.msc并回车,打开服务管理器。 - 在服务列表中找到
Windows Time。 - 双击打开,确保其 “启动类型” 为 “自动”,“服务状态” 为 “正在运行”。
- 点击“应用”和“确定”。
步骤 2:配置 NTP 服务器角色
这是最关键的一步,告诉这台计算机要作为时间源向外提供服务。
-
使用注册表编辑器(最常用)
(图片来源网络,侵删)- 按
Win + R键,输入regedit并回车,打开注册表编辑器。 - 导航到以下路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config - 在右侧窗口中,找到名为
LocalClockDispersion的 DWORD (32 位) 值,如果不存在,请右键点击空白处 ->新建->DWORD (32 位) 值,并将其命名为LocalClockDispersion。 - 双击
LocalClockDispersion,将其值数据设置为0x00000010(十进制的 16),然后点击“确定”,这个值定义了本地时钟的初始精度。 - 导航到另一个路径:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer - 在右侧窗口中,找到名为
Enabled的 DWORD (32 位) 值。 - 双击
Enabled,将其值数据从0x0修改为0x1,然后点击“确定”。这个操作是启用 NTP 服务器功能的核心。 - (可选但推荐)在同一
NtpServer键下,确保RegistryType的值为0x2(表示时间数据将从注册表读取)。
- 按
-
使用命令行(PowerShell)
打开以管理员身份运行的 PowerShell,然后执行以下命令:
# 启用 NTP 服务器 w32tm /config /update /syncfromflags:domhier /manualpeerlist:"time.windows.com,0x9" /reliable:yes # 解释命令参数: # /config /update: 应用配置更改 # /syncfromflags:domhier: 从域层级同步时间(如果加入域)或手动列表 # /manualpeerlist:"time.windows.com,0x9": 设置手动对等服务器列表,0x9 表示特殊、可靠且使用 NTP 协议 # /reliable:yes: 将此计算机标记为可靠的时间源,允许客户端从此同步
这个命令不仅会启用服务器,还会配置好同步源,如果您只想单独启用服务器,可以先执行
w32tm /config /update /ntpserver。
步骤 3:配置防火墙
默认情况下,Windows 防火墙会阻止 NTP 流量,您必须为入站规则创建一个例外。

- 打开 “高级安全 Windows Defender 防火墙” (可以在开始菜单搜索或通过
wf.msc打开)。 - 在左侧,点击 “入站规则”。
- 在右侧,点击 “新建规则...”。
- 规则类型选择 “端口”,点击“下一步”。
- 协议和端口选择 “TCP”,并在“特定本地端口”中输入
123,点击“下一步”。 - 操作选择 “允许连接”,点击“下一步”。
- 配置文件,根据您的网络环境勾选 “域”、“专用”、“公用”(通常建议勾选“域”和“专用”),点击“下一步”。
- 为规则命名一个清晰的名字,“NTP Server Inbound”,然后点击“完成”。
您的防火墙已经允许外部设备访问您的 NTP 服务器了。
步骤 4:重启 Windows Time 服务
为了让所有配置更改生效,必须重启服务。
- 再次打开
services.msc。 - 找到
Windows Time服务。 - 右键点击它,选择 “重新启动”。
第三部分:验证 NTP 服务器是否正常工作
在服务器本地验证
打开命令提示符或 PowerShell,执行以下命令:
w32tm /query /status
如果一切正常,您会看到类似下面的输出,表明它正在同步时间,并且角色是客户端(因为它自己也需要同步一个源)。
源: time.windows.com
层级: 3
精度: -6
状态: 正在同步
上次成功同步时间: 2025/10/27 10:30:15
偏差: 0ms
从客户端计算机验证
找一台其他的 Windows 电脑(客户端),配置它同步到您刚刚搭建的 NTP 服务器。
-
在客户端上,以管理员身份打开 PowerShell 或命令提示符。
-
执行以下命令,将
<Your-Server-IP>替换为您的 NTP 服务器的 IP 地址或主机名:w32tm /config /syncfromflags:manual /manualpeerlist:"<Your-Server-IP>,0x9" /update w32tm /resync /force
-
等待几秒钟后,再次执行
w32tm /query /status查看客户端是否成功从您的服务器同步了时间。
第四部分:常见配置场景
工作组环境(独立服务器)
如果您没有 Active Directory 域控制器,这是最常见的情况。
-
服务器端: 按照上述 第二部分 的步骤操作。
-
客户端配置: 在需要同步时间的所有客户端电脑上,执行以下命令(将
168.1.100替换为您的 NTP 服务器 IP):# 设置手动同步源 w32tm /config /syncfromflags:manual /manualpeerlist:"192.168.1.100,0x9" /update # 立即同步一次 w32tm /resync /force
-
设置客户端定期同步(可选): 您可以通过组策略或注册表来配置客户端的同步间隔,默认情况下,客户端会定期与服务器通信以保持时间同步。
Active Directory 域环境
在域环境中,时间同步策略由域控制器自动管理,但您仍然可以自定义。
- PDC 模拟器 (PDC Emulator) 角色: 在林中,所有域控制器都会自动与 PDC 模拟器 同步时间,PDC 模拟器则默认与外部源(如
time.windows.com)同步。您只需要将 PDC 模拟器配置为可靠的 NTP 源即可。 - 配置 PDC 模拟器:
- 在 PDC 模拟器上,按照 第二部分 的步骤启用 NTP 服务器。
- 确保域中的所有客户端都已加入域,它们会自动从域控制器获取时间策略,无需额外配置。
- 您可以使用
w32tm /query /status检查 PDC 模拟器是否正在从正确的源同步。
第五部分:排错
如果同步不成功,请检查以下几点:
- 防火墙: 确认服务器的防火墙(包括第三方防火墙)允许 UDP 端口 123 的入站流量,NTP 主要使用 UDP。
- 服务状态: 确认
Windows Time服务在服务器和客户端上都在运行。 - 时间源: 确保服务器本身的时间是准确的,如果服务器时间都错了,客户端自然也无法同步。
- 网络连通性: 从客户端
ping一下服务器的 IP 地址,确保网络是通的。 - 查看详细日志:
- 在命令行中运行
w32tm /debug /enable /file:w32tm.log /size:10000000 /roll:7来启用详细日志记录。 - 日志文件通常位于
%SystemRoot%\Debug\w32tm.log。 - 使用完毕后,用
w32tm /debug /disable关闭日志,以免占用过多磁盘空间。
- 在命令行中运行
通过以上步骤,您就可以成功地在 Windows 系统上搭建一个稳定可靠的 NTP 服务器了。
