[Win服务器] 将 Windows PC 作为 NTP 校时服务器 —— 同步局域网内设备时间

66 0
Honkers 昨天 06:49 来自手机 | 显示全部楼层 |阅读模式

让局域网内所有设备(电脑、NAS、摄像头、路由器等)通过这台 Windows PC 统一校时,无需购买硬件 NTP 服务器。


目录

  1. 原理说明
  2. 系统兼容性说明
  3. 安全措施与备份机制
  4. 一键配置(推荐)
  5. 手动配置步骤
  6. 防火墙放行 NTP 端口
  7. 验证 NTP 服务是否正常运行
  8. 配置局域网其他设备同步
  9. 常见问题与排错
  10. 傻瓜式一键操作软件,以管理员身份运行

批处理程序更新日记

20260704:更新傻瓜式操作,一键以管理员身份运行;下载地址:https://download.csdn.net/download/hjjhl/93072110?spm=1001.2014.3001.5501

原理说明

Windows 系统内置了 W32Time(Windows Time Service),默认作为 NTP 客户端从互联网时间源同步。通过修改注册表并重启服务,可将其切换为 NTP Server 模式,监听 UDP 123 端口,响应局域网内其他设备的校时请求。

注意:Windows 时间服务精度有限(约 10-100ms),对精度要求极高的场景建议使用专用 NTP 服务器或 Linux ntpd。


系统兼容性说明

✅ 完全支持

操作系统说明
Windows 11(所有版本)原生支持,推荐使用
Windows 10(所有版本)原生支持,推荐使用
Windows Server 2016+功能完整,适合服务器场景

⚠️ 部分受限

操作系统问题
Windows 8 / 8.1基本可用,部分旧版 PowerShell cmdlet 行为可能有差异
Windows 7默认 PowerShell 2.0,脚本中的 Get-NetIPAddress、Get-CimInstance 等命令不可用,需要手动升级 PowerShell 至 5.1+
Windows Server 2008 R2 / 2012同上,需手动升级 PowerShell
Windows IoT / LTSC 精简版可能缺失特定 PowerShell 模块,功能可能受限

🚫 不支持

操作系统原因
Windows XP / Vista不含 NTP Server 注册表机制,且没有 netsh advfirewall

建议:优先在 Windows 10/11 专业版或企业版 上部署。如使用 Windows 7,请先升级 PowerShell。


安全措施与备份机制

1. 操作前自动备份注册表

工具在执行任何修改前,会自动将以下注册表路径的原始值保存到 %TEMP%\ntp-server-backup.reg 文件,以便恢复:

  • HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer\Enabled
  • HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer\AllowNonstandardModeCombinations
  • HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config\AnnounceFlags

恢复方法:双击导出的 .reg 文件即可还原。

2. 端口冲突检测

配置前工具会检查 UDP 123 端口是否已被其他程序占用(如 VMware 时间同步、Wireshark 等),如有冲突会给出提示。

3. 操作确认提示

对以下关键操作会在执行前弹出 (y/n) 确认,防止误触:

  • 开启 NTP 服务器
  • 关闭 NTP 服务器
  • 恢复默认配置
  • 删除防火墙规则

4. 操作日志记录

所有操作(成功的、失败的)都会写入日志文件:

  1. %TEMP%\ntp-server.log
复制代码

日志内容包括:操作时间、执行的功能、操作结果。方便事后排查问题。

5. 一键恢复出厂

工具内置「恢复默认配置」功能,可一键撤销所有更改:

  • 关闭 NTP Server(Enabled = 0)
  • 删除防火墙规则
  • 重启服务恢复客户端模式

如果使用过程中出现问题,随时可以执行「恢复默认配置」回到初始状态。


一键配置(推荐)

管理员身份运行 PowerShell(Windows 10 / 11 均可),执行以下脚本:

  1. # ===== 以管理员身份运行 PowerShell 后执行以下全部命令 =====
  2. # 1. 设置注册表:开启 NTP 服务器功能
  3. reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" /v Enabled /t REG_DWORD /d 1 /f
  4. # 2. 设置注册表:允许 NTP Server 响应客户端请求
  5. reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" /v AllowNonstandardModeCombinations /t REG_DWORD /d 1 /f
  6. # 3. 设置注册表:指定公告标志为 5 —— 表示本机是可靠的时间源
  7. reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config" /v AnnounceFlags /t REG_DWORD /d 5 /f
  8. # 4. 重启 Windows Time 服务使配置生效
  9. net stop w32time
  10. net start w32time
  11. # 5. 防火墙放行 NTP 端口(UDP 123)
  12. netsh advfirewall firewall add rule name="NTP Server" protocol=udp dir=in localport=123 action=allow
  13. # ===== 配置完成 =====
复制代码

执行完毕后,本机即作为 NTP 服务器运行,局域网内设备可通过本机 IP 进行校时。


手动配置步骤

步骤 1:打开注册表编辑器

  • 按 Win + R,输入 regedit,回车
  • 点击 允许管理员权限

步骤 2:启用 NTP Server

导航到:

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer
复制代码
  • 双击 Enabled,将值修改为 1
  • 双击 AllowNonstandardModeCombinations,将值修改为 1

如果 AllowNonstandardModeCombinations 不存在,右键 → 新建 → DWORD (32位),命名为 AllowNonstandardModeCombinations,值为 1。

步骤 3:设置公告标志

导航到:

  1. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
复制代码
  • 双击 AnnounceFlags,将值修改为 5

AnnounceFlags 常用值说明:

  • 0x00:不是时间服务器
  • 0x01:始终是时间服务器
  • 0x04:仅在作为可靠时间源时宣告
  • 0x05(推荐)= 0x01 + 0x04:始终作为可靠时间源宣告

步骤 4:重启 Windows Time 服务

以管理员身份运行 命令提示符(cmd)PowerShell

  1. net stop w32time
  2. net start w32time
复制代码

也可通过服务管理器:

  • 按 Win + R → 输入 services.msc → 回车
  • 找到 Windows Time 服务 → 右键 → 重新启动

防火墙放行 NTP 端口

NTP 使用 UDP 123 端口。Windows Defender 防火墙默认会阻止外部设备访问本机 123 端口,需要手动放行。

方法一:命令行(推荐)

  1. netsh advfirewall firewall add rule name="NTP Server" protocol=udp dir=in localport=123 action=allow
复制代码

方法二:图形界面

  1. 按 Win + R → 输入 wf.msc → 回车
  2. 点击左侧 入站规则
  3. 右侧点击 新建规则…
  4. 规则类型:端口
  5. 协议:UDP,特定本地端口:123
  6. 操作:允许连接
  7. 配置文件:全选(域、专用、公用)
  8. 名称:NTP Server

验证 NTP 服务是否正常运行

方法一:检查服务状态

  1. Get-Service w32time
复制代码

应显示 Running。

方法二:检查端口监听

  1. netstat -an | findstr ":123"
复制代码

应看到类似 UDP 0.0.0.0:123 *:* 或 UDP [::]:123 *:*。

方法三:本机自检(查看当前时间源)

  1. w32tm /query /status
复制代码

方法四:从其他设备测试连接

在局域网内另一台电脑上以管理员身份执行:

  1. w32tm /stripchart /computer:192.168.x.x /samples:5
复制代码

(将 192.168.x.x 替换为 NTP 服务器的 IP 地址)

如果能显示时间偏移和延迟,说明 NTP 服务正常。


配置局域网其他设备同步

Windows 客户端

管理员身份运行 命令提示符PowerShell

  1. rem 设置 NTP 服务器为 Windows PC 的 IP 地址
  2. w32tm /config /manualpeerlist:"192.168.x.x" /syncfromflags:manual /reliable:yes /update
  3. rem 立即强制同步
  4. w32tm /resync
复制代码

将 192.168.x.x 替换为 NTP 服务器实际 IP。

Linux 客户端

编辑 /etc/ntp.conf 或 /etc/chrony.conf,将服务器指向 Windows PC:

  1. # ntp.conf
  2. server 192.168.x.x iburst
复制代码

或使用 ntpdate 手动同步:

  1. sudo ntpdate 192.168.x.x
复制代码

macOS 客户端

  1. sudo sntp -sS 192.168.x.x
复制代码

或在 系统设置 → 日期与时间 中手动填入 NTP 服务器地址。

群晖 / NAS 设备

在控制面板 → 区域选项时间设置NTP 服务器,填入 Windows PC 的 IP。

路由器 / 交换机 / 摄像头等设备

通常在其管理界面的 系统管理 / 时间设置 中,将 NTP 服务器设为 Windows PC 的 IP 地址即可。


常见问题与排错

Q1:配置后局域网设备无法同步时间

  • 检查防火墙:确认 UDP 123 端口已放行(可用 wf.msc 查看入站规则)
  • 检查监听:在服务器上运行 netstat -an | findstr ":123",确认端口在监听
  • 检查服务:确认 W32Time 服务正在运行
  • 尝试禁用防火墙临时测试:(仅用于排错)netsh advfirewall set allprofiles state off,测试完记得恢复 netsh advfirewall set allprofiles state on

Q2:Windows 时间服务总是自动停止

  • 检查是否与其他服务(如 VMware 时间同步)冲突
  • 检查注册表 NtpServer\Enabled 和 Config\AnnounceFlags 是否设置正确
  • 查看系统事件日志:事件查看器 → Windows 日志 → 系统,过滤来源为 W32Time 的事件

Q3:本机时间不准,导致同步给局域网设备也是错的

  • 确保 NTP 服务器本身有可靠的时间源
  • 配置本机从公网 NTP 源同步:
  1. w32tm /config /manualpeerlist:"pool.ntp.org" /syncfromflags:manual /reliable:yes /update
  2. w32tm /resync
复制代码
  • 注册表中 Type 设置为 NTP:
  1. HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Parameters\Type = NTP
复制代码

Q4:重启电脑后配置失效

  • 检查注册表值是否持久保存(修改后是持久的,不会因重启丢失)
  • 但 W32Time 服务可能因电源管理自动停止。可将服务设置为自动启动:
  1. Set-Service w32time -StartupType Automatic
复制代码

Q5:如何恢复默认配置(取消 NTP 服务器)

  1. reg add "HKLM\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" /v Enabled /t REG_DWORD /d 0 /f
  2. netsh advfirewall firewall delete rule name="NTP Server"
  3. net stop w32time
  4. net start w32time
复制代码

参考

  • Microsoft Docs: Windows Time Service
  • NTP 协议标准:RFC 5905
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行