zl程序教程

您现在的位置是:首页 >  其他

当前栏目

(笔记)【NTP系列:07】NTP时间同步配置总结:Windows(W32Time)作为NTP时钟源服务端,Linux作为客户端

2023-04-18 15:23:41 时间

 

一、NTP工作模式(客户端/服务器模型)

NTP服务端:Windows(W32Time)系统

NTP客户端:Linux嵌入式控制板

 

二、NTP服务端配置

步骤如下:

1. 禁用windows防火墙或者设置防火墙入站规则(两者二选一)。
   方法1.禁用防火墙步骤:
      控制面板—>系统和安全—>windows防火墙—>启用或关闭防火墙
      关闭专用网络和公共网络的防火墙。
   方法2.设置防火墙入站规则步骤:
      控制面板—>系统和安全—>windows防火墙—>高级设置—>入站规则(右键)—>新建规则—>端口—>下一步—>UDP,特定本地端口:123—>起名NTP—>完成。
      打开Windows注册表:win+R->输入regedit->运行。

2. 修改Windows注册表: 修改注册表[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeConfig]中AnnounceFlags的值为5.AnnounceFlags值的含义:
5:强制时钟源为本地CMOS时钟 a:强制时钟源为本地CMOS时钟 修改注册表[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpServer]中Enabled的值为1.即使能NTP服务器. 修改[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClient]中Enabled的值为0.即关闭NTP客户端. 退出注册表。
3. 打开管理员命令行:右击开始—
>windows PowerShell(管理员) 在命令行中执行如下命令: 先停止服务: net stop w32time。 重新打开服务: net start w32time。如果提示:Windows Time 服务已经启动成功。则配置ok.
4. 回环测试ntp服务器是否运行: 在命令行中执行:w32tm
/stripchart /computer:127.0.0.1" 如果出现10:41:02 error: 0x80072746类似这种字样表示不通,服务器没有运行。 如果出现13:59:00, d:+00.0003901s o:+00.0000687s [ * ]类似这种字样表示服务器运行正常。

 

 

三、NTP客户端配置

 

1. 确认ntpd.service服务文件内容(以下为默认配置,无需更改)

root@XX:/lib/systemd/system# cat ntpd.service 
[Unit]
Description=Network Time Service
After=network.target

[Service]
Type=forking
PIDFile=/run/ntpd.pid
ExecStart=/usr/sbin/ntpd -u ntp:ntp -p /run/ntpd.pid -g

[Install]
WantedBy=multi-user.target

 

2. 确认ntpdate.service服务文件内容(以下为默认配置,无需更改)

root@XX:/lib/systemd/system# cat ntpdate.service 
[Unit]
Description=Network Time Service (one-shot ntpdate mode)
Before=ntpd.service

[Service]
Type=oneshot
ExecStart=/usr/bin/ntpdate-sync silent
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

 

3. NTP手动同步测试

使用"ntpdate ntp_server_ip"命令,观察时间是否同步成功,若不能同步成功,可使用”ntpdate -d ntp_server_ip“查看同步失败原因。

注:当ntpd服务运行时,是不能正确执行ntpdate的,此时需要关闭ntpd服务。

若手动同步不成功,可参考文章:(笔记)【NTP系列:02】NTP使用常见问题记录 - tdyizhen1314 - 博客园 (cnblogs.com)

 

4. NTP自动同步测试

 首先需要修改ntp唯一的配置文件”/etc/ntp.conf“,新增红色字体部分,其中:

tos maxdist 30:                                将容忍时钟偏差修改至30,单位为S,该值默认为1.5. 当偏差大于此限定值时,ntp不会同步时钟。
tinker panic 0:                                当服务器时钟与本地时钟偏差大于1000时,ntp客户端会视为此偏差过大,不会同步时钟,且会退出ntpd服务,设置为0可忽略此限制。
server 172.16.1.200 iburst minpoll 6 maxpoll 6:设置ntp服务器地址。
logfile /var/log/ntp.log:                      设置ntp日志文件路径,也可以不设置,仅是调试时使用。
 
配置完成后,参考如下:
root@AM437x-Droidsurg:~# cat /etc/ntp.conf 
# This is the most basic ntp configuration file
# The driftfile must remain in a place specific to this
# machine - it records the machine specific clock error
driftfile /var/lib/ntp/drift
# This should be a server that is close (in IP terms)
# to the machine.  Add other servers as required.
# Unless you un-comment the line below ntpd will sync
# only against the local system clock.
#
#
#
tos maxdist 30
tinker panic 0
#
# server time.server.example.com
server 172.16.1.200 iburst minpoll 6 maxpoll 6
#
# Using local hardware clock as fallback
# Disable this when using ntpd -q -g -x as ntpdate or it will sync to itself
server 127.127.1.0
fudge 127.127.1.0 stratum 14
#
# Defining a default security setting
restrict default
#
logfile /var/log/ntp.log

 

此时可使用系统命令启动服务,如下:

systemctl stop ntpd       #停止ntpd服务
systemctl start ntpd      #启动ntpd服务
systemctl status ntpd     #输出ntpd服务状态

此时可手动人为调整ntp服务端或客户端的时钟,观察是否能自动同步成功。【注:时间同步需要时间,并不是立即同步(除非修改时钟后,重启ntpd服务),而是需要等待若干分钟时间,如15分钟,有可能更长时间。只有当ntp客户端判断自身处于:Leap Indicator: unknown (clock unsynchronized),才会立将NTP报文中的时间同步至系统时钟

 

注:若ntpd自动同步不成功,可参考文章:(笔记)【NTP系列:05】NTP时间同步失败:Windows(W32Time)作为NTP时钟源服务端,Linux作为客户端 - tdyizhen1314 - 博客园 (cnblogs.com)