我最近设置了运行 NTPD 的 CentOS 6.x 系统,并且在运行时遇到此错误ntpq -pn
:
$ ntpq -pn
ntpq: read: Connection refused
我知道它ntpd
已启动并通过命令运行ntpstat
:
$ ntpstat
synchronised to NTP server (204.11.201.12) at stratum 3
time correct to within 71 ms
polling server every 256 s
为什么ntpq -pn
不工作?
答案1
strace
您可以通过如下方式查看输出来对此进行分类:
$ strace ntpq -pn ::1|& grep -i conn
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(3, {sa_family=AF_INET6, sin6_port=htons(123), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
recvfrom(3, 0x7fffc3365a10, 516, 0, 0, 0) = -1 ECONNREFUSED (Connection refused)
write(2, "Connection refused\n", 19Connection refused
请注意,它使用 ipv6 进行连接。基本上这一行:
connect(3, {sa_family=AF_INET6, sin6_port=htons(123), inet_pton(AF_INET6, "::1", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
NTPD 是否正在侦听 ipv6 端口?
$ netstat -taupn|grep udp|grep ntp
udp 0 0 10.22.7.237:123 0.0.0.0:* 24213/ntpd
udp 0 0 127.0.0.1:123 0.0.0.0:* 24213/ntpd
udp 0 0 0.0.0.0:123 0.0.0.0:* 24213/ntpd
所以它似乎没有在侦听 ipv6,因此出现错误。我们可以通过告诉ntpq -pn
显式连接 ipv4 来解决这个问题,如下所示:
$ ntpq -pn 127.0.0.1
remote refid st t when poll reach delay offset jitter
==============================================================================
+69.89.207.199 212.215.1.157 2 u 209 256 377 43.582 2.768 0.076
-72.5.72.15 10.3.255.0 3 u 217 256 377 68.627 -1.833 4.388
*204.11.201.12 66.220.9.122 2 u 244 256 377 61.928 -0.712 0.234
+108.59.2.24 130.133.1.10 2 u 178 256 377 1.824 3.256 0.111
好多了。您可以strace
再次使用以下命令来确认我们的逻辑:
$ strace ntpq -pn 127.0.0.1|& grep -i conn
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(3, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(3, {sa_family=AF_INET, sin_port=htons(123), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
connect(4, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
connect(4, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
请注意,当客户端尝试通过端口 123 上的 UDP连接到您的服务器时,会使用 ipv4 sa_family=AF_INET
,而会使用 ipv6 。sa_family=AF_INET6
ntpq
ntpd
我们还可以使用-4
和-6
开关来ntpq -pn
:
$ ntpq -pn -4
remote refid st t when poll reach delay offset jitter
==============================================================================
+69.89.207.199 212.215.1.157 2 u 235 256 377 43.582 2.768 0.047
-72.5.72.15 10.3.255.0 3 u 248 256 377 68.627 -1.833 4.417
*204.11.201.12 66.220.9.122 2 u 265 256 377 61.802 -0.765 0.198
+108.59.2.24 130.133.1.10 2 u 212 256 377 1.824 3.256 0.097
参考
答案2
我最近在使用 CentOS7 时遇到了同样的问题。 ntpq -p 将显示“读取:连接被拒绝”,以及 ntp 调试中的许多其他命令,例如“clocklist”和其他一些命令。我在 ntp.conf 中设置的 NTP 服务器被忽略。以下是其他一些值得注意的输出:
[root@server ~]# ntpstat
synchronised to NTP server (69.164.198.192) at stratum 3
time correct to within 56 ms
polling server every 1024 s
[root@server ~]# ntpdate
14 Oct 00:02:14 ntpdate[21443]: no servers can be used, exiting
[root@server ~]# systemctl status ntp
Unit ntp.service could not be found.
[root@server ~]# systemctl status ntpd
ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
Active: inactive (dead)
ntpq> version
ntpq [email protected] Thu Aug 8 11:48:03 UTC 2019 (1)
ntpq> clocklist
ntpq: read: Connection refused
ntpq> cooked
Output set to cooked
ntpq> readlist
ntpq: read: Connection refused
当我检查它所使用的 NTP 服务器的 IP 时,它总是来自 ARIN(?) 或像 Level3 这样的大提供商。我无法选择服务器,但它使用的服务器看起来不错。但无论我做什么,它仍然不允许我选择自己的服务器/etc/ntp.conf
。
我开始怀疑我的程序不知何故有问题,我开始怀疑我加载的 epel 存储库,因为我需要从那里加载一些其他程序。
果然,我执行了以下操作并解决了问题:
yum remove ntp
yum install ntp --disablerepo=epel
它重新安装,现在ntpq -p
可以工作,并systemctl status ntpd
显示为:
[root@server ntpstats]# systemctl status ntpd
● ntpd.service - Network Time Service
Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2019-10-14 22:14:44 CDT; 3s ago
最后我设置的服务器/etc/ntp.conf
被使用了。
我不知道如何让 epel 知道他们的 CentOS7 ntp 被某种方式破坏了,也许有人会看到这个并报告。
请注意,epel 和 CentOS 存储库都显示相同的版本:ntp-4.2.6p5-29.el7.centos.x86_64
。
答案3
接受的答案对我不起作用。以下解决了连接问题:
编辑 /etc/ntp.conf 文件:
sudo nano /etc/ntp.conf
找到列出服务器的行并更改为以下内容:
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst
重新启动并重新加载 ntp 服务。
#force-reload the service
sudo systemctl force-reload ntp.service