ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows搭建并运行NTP服务

Windows搭建并运行NTP服务

Windows 自带Windows Time(w32time)​ 服务就能当 NTP Server 用,不用装第三方软件。下面给你一套工作组/局域网环境可用的标准做法(Win10/11、Windows Server 通用)。


一、核心原理

  • NTP 走UDP 123

  • w32time 默认只做客户端,要对外提供服务需改注册表:

    • NtpServer\Enabled = 1开启服务端

    • Config\AnnounceFlags = 5声明自己是“可靠时间源”

  • 如果是域控,NTP Server 默认已开,只需调上游时间源


二、服务端配置(管理员 CMD / PowerShell)

1. 开启 NTP Server 功能

reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer /v Enabled /t REG_DWORD /d 1 /f

2. 声明为可靠时间源

reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config /v AnnounceFlags /t REG_DWORD /d 5 /f

若这台机器本身连不上外网上游、又希望强行对外授时,可改成0xA(不依赖上游也可宣告自己可靠)。

3.(可选)指定自己先跟谁同步

如果本机时间不准,先让它跟公网 NTP 对齐:

reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters /v Type /t REG_SZ /d NTP /f reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters /v NtpServer /t REG_SZ /d "ntp.aliyun.com,0x1 time.windows.com,0x1" /f

每个 NTP 地址后面必须带,0x1,否则 SpecialPoll 模式不生效。

4. 重启时间服务

net stop w32time net start w32time

(建议把 Windows Time 服务启动类型设为“自动”)

5. 放行防火墙 UDP 123 入站

netsh advfirewall firewall add rule name="NTP Server" protocol=udp dir=in localport=123 action=allow

或用 PowerShell:

New-NetFirewallRule -DisplayName "NTP Server" -Direction Inbound -Protocol UDP -LocalPort 123 -Action Allow

三、验证服务端是否正常

在本机:

w32tm /query /status netstat -an | findstr :123

看到UDP 0.0.0.0:123监听即成功。

从局域网另一台机器测:

w32tm /stripchart /computer:192.168.1.100 /samples:5

能出 offset 曲线就通了。


四、客户端怎么连

Windows 客户端(管理员):

w32tm /config /manualpeerlist:"192.168.1.100,0x8" /syncfromflags:manual /reliable:no /update net stop w32time && net start w32time w32tm /resync

Linux 客户端:

ntpdate -q 192.168.1.100 # 或写进 /etc/ntp.conf -> server 192.168.1.100 iburst

五、常见坑

  1. 改完注册表没重启 w32time​ → 不生效

  2. 防火墙只开 TCP 123​ → NTP 是 UDP,必须 UDP

  3. AnnounceFlags 没改​ → 客户端认为“这不是可靠源”不去同步

  4. 本机时间差太大(>MaxPos/NegPhaseCorrection)​ → 拒绝跳变,需先手动近似对时

  5. 虚拟机​ → 优先用 Hyper-V/VMware 自带时钟同步,再叠加 NTP,避免漂移打架

返回列表