ntpdate 可以工作,但 ntpd 无法同步

ntpdate 可以工作,但 ntpd 无法同步

这是在 RHEL 5.5 中。

首先,ntpdate 对远程主机起作用:

$ ntpdate XXX.YYY.4.21
24 Oct 16:01:17 ntpdate[5276]: adjust time server XXX.YYY.4.21 offset 0.027291 sec

其次,这是我的 /etc/ntp.conf 中的服务器行。所有restrict行都已注释掉,以便进行故障排除。

server 127.127.1.0
server XXX.YYY.4.21

我执行service ntpd start并检查ntpq

$ ntpq
ntpq> peer
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*LOCAL(0)        .LOCL.           5 l   36   64  377    0.000    0.000   0.001
 timeserver.doma .LOCL.           1 u   39  128  377    0.489   51.261  58.975

ntpq> opeer
 remote           local          st t when poll reach   delay   offset    disp
==============================================================================
*LOCAL(0)        127.0.0.1        5 l   40   64  377    0.000    0.000   0.001
 timeserver.doma XXX.YYY.22.169   1 u   43  128  377    0.489   51.261  58.975

XXX.YYY.22.169 是我正在处理的主机的地址。对我的 ntp.conf 文件中的 IP 地址进行反向查找可验证 ntpq 输出是否正确命名了远程服务器。但是,如您所见,它似乎只是转到我的 .LOCL. 时间服务器。此外,ntptrace它只返回本地时间服务器,然后ntptrace XXX.YYY.4.21超时。

$ ntptrace
localhost.localdomain: stratum 6, offset 0.000000, synch distance 0.948181

$ ntptrace XXX.YYY.4.21
XXX.YYY.4.21: timed out, nothing received
***Request timed out

这看起来就像我的 ntp 守护进程只是在查询自己。

我正在考虑这种可能性:我的测试网络时间服务器和公司网络时间服务器之间的路由器(我无法控制)在源端口上阻塞。(我认为 ntpdate 在端口 123 上发送,这会绕过该过滤器,这就是为什么在 ntpd 运行时我无法使用它。)我已向网络人员发送电子邮件以检查这一点。

最后,telnet XXX.YYY.4.21 123永远不会超时或完成连接。

问题:

我在这里遗漏了什么?

我还可以检查什么来找出此连接失败的原因?

strace ntptrace XXX.YYY.4.21显示 ntptrace 发送的源端口吗?我可以解构大多数 strace 调用,但无法找出该数据的位置。

如果我无法直接检查测试网络和时间服务器之间的网关路由器,我该如何建立证据证明它导致了这些断开连接?或者,我该如何排除它?

答案1

377列中的表示reach连接正常;telnet由于 NTP 是 UDP,因此无法连接。

server 127.127.1.0尝试从您的配置中删除-*告诉*LOCAL(0)我们,层数为 5 的本地服务器正在用于同步,优先于层数为 1 的远程服务器;延迟和偏移量均为 0.000 可能与此有很大关系。

答案2

如果您要包含本地时钟,则其级别会稍微有点失真。看起来您已将其设置为 5。我通常将其设置为至少 8 ( fudge 127.127.1.0 stratum 8)。如果您不失真,则对于网络上的其他主机来说,您看起来就像一个原子钟。在我扫描的一个网络上,我发现许多低层服务器宣布的时间通常有几小时或几天的误差。

Shane 所说的reach值是正确的,它表明您可以访问服务器。您的时间服务器的高offset和值表明它可能不太可靠。它们可能很高,因为您的服务器仍在同步。间隔增加到 128 的事实表明您的服务器正在获得一致的结果。它应该逐渐增加到 1024 秒。jitterpoll

尝试运行如下循环:

while sleep 60; do
    ntpq -n -c peers; done

这将让您了解 ntp 的运行情况。您应该会看到它随着时间的推移而稳定下来。

可以设置许多限制来ntpd限制可以远程访问的服务器信息量。您可能只能使用上游服务器作为时间源。

防火墙规则可以限制源和目标端口 123 的流量。这提供了有效的 ntp 设置,但限制了其他工具的访问。某些工具允许您使用端口 123 作为源端口(如果可用)。我偏爱ntpdate在调试模式下使用。

如果您正确理解refid上游服务器的 IP 地址,则它似乎正在使用您的服务器作为其首选时间源。尝试将其添加restrict noquery到您的配置中。可能是您的上游服务器配置不当。尝试添加您的路由器和/或名称服务器作为源,我发现它们可能比官方公司服务器更好。

答案3

我有同样的问题:

ntpq -p 显示 reach = 0

然而 1- ntpd 正在运行 2- ntp.conf 列出了服务器 3- ntpdate 可以使用这些服务器工作 4- ntpdate -u 可以使用这些服务器工作 5- nc 显示这些服务器上的 TCP 端口 123 已打开 6- nc 显示这些服务器上的 UDP 端口 123 已打开

因此基本上 ntpdate 可以工作并且没有防火墙问题,而且 ntpq -p 显示列出的每个服务器的 reach =0。

原来是 ntp.conf 中的限制行。我刚刚从 ntp.conf 中删除了所有限制行,然后重新启动了 ntpd,一切就恢复正常了。

答案4

只是想在 Google 搜索结果顶部发表我的看法。我在一台 NTP 未绑定到主机外部接口的主机上遇到了这个问题。如果您遇到此问题,请查看 的输出netstat -tulpn

此 ntpd 实例将无法同步到已知的良好时间源。

$ sudo netstat -tulpn | grep ntp
udp        0      0 127.0.0.1:123               0.0.0.0:*                                  31316/ntpd          
udp        0      0 0.0.0.0:123                 0.0.0.0:*                               31316/ntpd          

这会。

$ sudo netstat -tulpn | grep ntp
udp        0      0 192.168.1.15:123            0.0.0.0:*                               32294/ntpd          
udp        0      0 127.0.0.1:123               0.0.0.0:*                               32294/ntpd          
udp        0      0 0.0.0.0:123                 0.0.0.0:*                               32294/ntpd   

这是因为配置文件试图仅使用 0.0.0.0 通配符来限制与 IPv4 接口的绑定。

$ grep ^interface /etc/ntp.conf 
interface listen 0.0.0.0

正确(期望)的配置如下。

$ grep ^interface /etc/ntp.conf 
interface listen ipv4
interface ignore ipv6

(或者,删除两个接口配置选项。)

您还可以检查/etc/sysconfig/ntp或等效任何可能限制接口绑定的配置。

相关内容