我的一台服务器有一个奇怪的问题。 ntpd
并ntpdate
无法工作,但调试显示没有任何错误。起初我以为可能是本地或网络防火墙阻止了 UDP 端口 123,但事实并非如此——该服务器可以通过 UDP 端口 123(ntp 协议)与 Internet 通信并获得答案。
让我演示一下这个问题。
date -s "30 DEC 2012 02:30:00"
- 有效,所以我可以成功地设置时钟而不会出错。
ntpq -pn pool.ntp.org
- 有效,我确实从时间服务器获取了详细的时间数据,并证明 UDP 数据包正在运行。
ntpdate -d pool.ntp.org
- 调试模式有效,显示大量调试数据并显示当前时间偏移:
30 Dec 02:38:56 ntpdate[19267]: step time server 208.97.140.69 offset 228.234554 sec
一切看起来都很正常,直到:
ntpdate pool.ntp.org
- 暂停 4.7 秒后,它返回:
30 Dec 02:41:29 ntpdate[19274]: no server suitable for synchronization found
类似ntpd
的问题运行,它不更新时钟。
ntpd 启动后,ntpq -pn
导致所有 refid 永远停留在.INIT.
这意味着它们无法同步。
/var/lib/ntp/drift 是 ntp.conf 中的 driftfile 设置,它是 chmod 644 并且归 ntp:ntp 所有,与我所有其他系统一样。
我尝试了十几个其他的 ntp 时间服务器,禁用了 iptables 防火墙,并确认数据中心没有过滤 udp 流量。有什么想法阻止 ntpd 和 ntpdate 同步我的时钟吗?
这是配备 Intel CPU 的专用服务器上的 CentOS 6.3 x64。
ntpdate
ntpd
如果偏移量太高,(和)将拒绝(轻松地)设置时间。这两个应用程序都会尝试慢慢调整您的时间,以免混淆您的系统或任何可能无法很好地处理大时间跳跃的应用程序。试试
ntpdate -b
吧。无论看起来多么不合理,它都会设定时间。您可能还需要添加
-u
标志,以防止ntpdate
使用特权(<1024)端口。请注意,这-u
是隐含的-d
!听起来-d
工作正常。如果添加
-u
在工作和非工作之间产生差异,那么您在导致这些问题的方式上有防火墙。不幸的是,似乎无法
ntpd
使用不受限制的端口。你能在 pastebin 中提供以下输出吗?
您是从 stratum 1 服务器同步还是从其他任何服务器同步。
No server suitable for synchronization 意思是说客户端和服务器之间无法建立通信。
如果我们不能从这组数据中找到线索,可能需要 tcpdump 来查看数据包丢失的位置。
停止并启动 ntpd 守护程序并等待达到 377,然后停止 tcpdump。这应该会提供进一步的线索。