NTP 未更新 CentOS 中的服务器时间

NTP 未更新 CentOS 中的服务器时间

我为 arm 编译了 ntp,我的 NTP 客户端没有更新任何服务器的时间。我参考了帖子“为什么 ntpd 没有更新我的服务器上的时间? (7)”,但什么也没发生。以下是 ntpq -pn 的输出

[Tue May 15 13:18:26 root@Unknown:bin]$./ntpq -pn
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 125.62.193.121  .INIT.          16 u    -   16    0    0.000    0.000   0.000

我了解到 refid 不应该是“.INIT”,并且 delay、offset、jitter 值不应该是 0

查看 ntpd 日志

[Tue May 15 13:19:08 root@Unknown:bin]$tail -f ntp.log
15 May 12:29:35 ntpd[18175]: proto: precision = 1000.000 usec
15 May 12:29:35 ntpd[18175]: ntp_io: estimated max descriptors: 1024, initial socket boundary:
15 May 12:29:35 ntpd[18175]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123
15 May 12:29:35 ntpd[18175]: Listen normally on 1 lo 127.0.0.1 UDP 123
15 May 12:29:35 ntpd[18175]: Listen normally on 2 eth1 173.39.19.72 UDP 123
15 May 12:29:35 ntpd[18175]: peers refreshed
15 May 12:29:35 ntpd[18175]: Listening on routing socket on fd #19 for interface updates

附注:ntpupdate -u ntp.ubuntu.com 有效,但 ntpd 无效。我的 ntp.conf 只包含一行

server 91.189.94.4 minpoll 4 maxpoll 4

其中上面的IP是ntp.ubuntu.com。


[Fri May 18 15:12:26 root@Unknown:~]$ping pool.ntp.org
PING pool.ntp.org (202.71.140.36): 56 data bytes
64 bytes from 202.71.140.36: seq=0 ttl=53 time=40.000 ms
64 bytes from 202.71.140.36: seq=1 ttl=53 time=39.000 ms
64 bytes from 202.71.140.36: seq=2 ttl=53 time=39.000 ms
64 bytes from 202.71.140.36: seq=3 ttl=53 time=39.000 ms

Ping 可以工作,但服务器从不更新时间

答案1

您的 ntpd 认为远程系统是 16 层(这意味着它的时间可靠性最低)。大多数 ntp 客户端不会与这样的系统同步。我强烈建议使用pool.ntp.org 如其说明中所述

他们的示例ntp.conf文件:

driftfile /var/lib/ntp/ntp.drift

server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org

此外,您绝不应该在配置文件中使用 IP,除非您的系统由于某些疯狂的要求而不支持 DNS 解析。

更新:
NTP Pool 项目会尝试半智能地猜测服务器应该返回什么时间。但您通常应该使用主机名中的国家代码来指定服务器所在的国家/地区。对于印度,其国家/地区代码为:

server 0.in.pool.ntp.org
server 1.in.pool.ntp.org
server 2.in.pool.ntp.org
server 3.in.pool.ntp.org

相同的漂移、记录和其他选项仍然适用。

答案2

您的系统没有从您列出的服务器收到 NTP 响应,这就是“refid”列下的“INIT”的含义:它仍处于 INITialization 状态 - 发送数据包以获取时间的 INITial 读数。

Ping 可能有效,但可能是防火墙阻止了您的计算机和您尝试访问的计算机之间的 NTP(123/udp)数据包。或者可能是您的 ntp.conf 文件中的“restrict”行过于严格,因此即使数据包往返,也会被忽略。请参阅之前的 Server Fault 问题:

使用 ntpd 同步服务器时间时出现问题

测试 NTP 数据包是否存在网络级问题的一种方法是作为 root 运行“ntpdate {server}”,看看是否会在本地设置时钟(注意:尝试此操作时,ntpd 无法运行)。

如果“ntpdate”不起作用,则意味着有东西阻止了 NTP 数据包。如果“ntpdate”起作用,但“ntpd”不起作用(如问题中的当前情况),则意味着您的配置中存在其他东西破坏了某些功能。

请记住,仅仅因为“ping”到另一台主机有效,并不意味着该远程主机上的服务有效。可能是您尝试访问的服务有防火墙,或者守护程序可能未在远程计算机上运行。Ping(和 traceroute)仅用于调试 IP 级连接:它们不测试传输级(TCP、UDP)服务可用性/可达性。

相关内容