客户有个局域网,局域网里面有的设备,时间都不一致,导致交互的时候可能出现问题;
现在刚好有台主机,有两个以太网接口,其中一个可以连外网,能获取到网络时间,我们可以把这台主机做成ntp服务器,供局域网内其他主机做时间同步;
以下是相关操作方法步骤;
打开注册表编辑器。您可以按Win+R键,然后输入regedit
并回车。
导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer
导航到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config
在右侧面板中,双击“AnnounceFlags”,然后在数据值字段中输入“5”。
关闭注册表编辑器。
打开命令提示符(以管理员身份),然后输入以下命令来重启Windows时间服务:
net stop w32time && net start w32time
Windows主机已经被设置为NTP服务器,其他设备(如Linux主机和NVR设备)应该能够从此主机获取时间信息了。对于Linux主机和NVR设备,你需要将它们的NTP客户端指向Windows主机的IP地址。
AnnounceFlags
和Enabled
含义在Windows的注册表设置中,AnnounceFlags
和Enabled
这两个键值对NTP服务器的配置有特殊的含义。
AnnounceFlags
: 这个键控制了W32Time服务(Windows Time)是否(以及如何)向网络公布自己作为一个可用的时间源。它的值是一个位掩码,表示不同的标志。当AnnounceFlags
的值设为5时,表示以下两个条件:
值4(二进制100)告诉W32Time服务,只有当本机是一个可靠的时间服务时(例如,它已经被配置为手动同步到一个硬件时钟或外部NTP服务器),才公布自己为时间服务器。
值1(二进制001)让W32Time服务始终公布自己为时间服务器,无论它是否已经接收到合法的时间更新。
Enabled
: 这个键决定了是否启用NTPServer。如果把这个值设为1,那么NTPServer就会被启用,即W32Time服务将作为NTP服务器,为其他设备提供时间。
请注意,在修改注册表之前,一定要创建一个还原点或者备份注册表。错误的修改可能会导致系统不稳定。
在Windows上,有一些第三方应用程序允许你很容易地设置NTP服务器。
例如, “NetTime”。NetTime是一个简单的、易于使用的时间同步客户端,也可以作为服务器运行。以下是如何设置它的步骤:
下载并安装NetTime:http://www.timesynctool.com/
运行NetTime,然后右键点击系统托盘中的NetTime图标,选择“Settings”。
在“Settings”窗口中,勾选"Always provide time"选项,使得NetTime作为服务器提供时间服务。
点击“OK”保存设置。
这样,你就把你的Windows主机设为了NTP服务器。然后你就可以在其他设备(如Linux主机和NVR设备)上将其NTP客户端指向Windows主机的IP地址,实现局域网内的时间同步。
下载完成后点开默认安装即可:
点击Settings,勾选Allow other computers to sync to this computer:
弹出个警告,提示我们在把此主机用于ntp服务器时,需保证此主机时间的准确性,我们点No即可:
0.nettime.pool.ntp.org
是一个公共的网络时间协议(NTP)服务器地址,它是NTP Pool Project的一部分。
NTP Pool Project是一个大型的、由志愿者和赞助商维护的NTP服务器池。它为全球的互联网用户提供精确的时间服务。"pool.ntp.org"项目使用DNS轮询来分配各种时间服务器的流量,这意味着当你查询"pool.ntp.org"时,DNS服务器会返回该池中任意一个服务器的IP地址。
在0.nettime.pool.ntp.org
这个地址中,0
表示该服务器在NTP Pool中的逻辑编号,而nettime
则可能是服务器组的名称,但我没有找到关于nettime
的特定信息。通常,你会看到像0.pool.ntp.org
,1.pool.ntp.org
这样的地址,其中的数字(如0, 1)代表了不同的服务器或服务器组。
然而,如果你的网络不能访问互联网,那么你将无法使用这个地址,因为它需要通过互联网来访问NTP Pool的服务器。在这种情况下,你需要设置一个内部的NTP服务器,如我之前所述。
Ubuntu 20.04默认使用的是systemd-timesyncd
服务来同步时间,你不需要另外安装NTP。以下是如何使用timedatectl
来同步NTP服务器的时间:
首先打开终端。
使用以下命令检查systemd-timesyncd
服务的状态:
timedatectl status
NTP service: active
行显示为yes
,则表示systemd-timesyncd
服务正在运行。如果没有,你可以用以下命令启动它:sudo timedatectl set-ntp on
/etc/systemd/timesyncd.conf
文件来更改NTP服务器。例如,使用nano编辑器:sudo nano /etc/systemd/timesyncd.conf
#NTP=
开头的行,删除#
并添加你的NTP服务器,多个服务器之间用空格分隔。例如:NTP=server1 server2
systemd-timesyncd
服务来应用更改:sudo systemctl restart systemd-timesyncd
7. 查看时间是否同步成功
用timedatectl
命令查看,如果同步成功,我的盒子RTC Time那儿时间会显示正确,而不是1970xxxx:
timedatectl
用systemctl status systemd-timesyncd.service --no-pager
命令查看systemd-timesyncd服务的状态以及重要日志:
systemctl status systemd-timesyncd.service --no-pager
如果同步成功,会显示下面这行文字:
Initial synchronization to time server 192.168.19.232:123 (192.168.19.232).
以上就是在Ubuntu 20.04上使用timedatectl
来同步NTP服务器时间的步骤。
注意:此方法为备选方案,在ntp无法同步时,可测试开启,看看开启后是否能够同步。
在Windows中,你可以通过以下步骤检查和配置防火墙以允许UDP 123端口的入站和出站流量:
打开“控制面板”。
点击“系统和安全”。
点击“Windows Defender 防火墙”。
在左侧菜单中,点击“高级设置”。
在新窗口中,你会看到"入站规则"和"出站规则"两个选项。首先,我们来创建一个允许UDP 123端口入站的规则。
点击"入站规则",然后在右侧点击"新建规则"。
在弹出的向导中,选择"端口",然后点击"下一步"。
选择"UDP",然后在"特定本地端口"中输入"123",点击"下一步"。
选择"允许连接",然后点击"下一步"。
确保所有的网络类型都被勾选,然后点击"下一步"。
给规则命名(例如,“NTP UDP 123 Inbound”),然后点击"完成"。
接下来,我们创建一个允许UDP 123端口出站的规则。
在左侧菜单中,点击"出站规则",然后在右侧点击"新建规则"。
重复步骤7-11,只是在第9步时选择"允许连接"。
现在,Windows防火墙应该已经配置为允许UDP 123端口的入站和出站流量了。
参考文章:时间同步服务器