这是在 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 秒。jitter
poll
尝试运行如下循环:
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
或等效任何可能限制接口绑定的配置。