web-dev-qa-db-ja.com

ntpq -pnが「接続が拒否されました」と報告するのはなぜですか?

最近、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が機能しないのはなぜですか?

9
slm

次のように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)

Ipv4はsa_family=AF_INETを使用するのに対し、ntpqクライアントがポート123のUDP経由でntpdに接続しようとすると、ipv6はsa_family=AF_INET6を使用することに注意してください。

-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

参考文献

11
slm

最近、CentOS7でも同じ問題が発生しました。 ntpq -pは、「read:Connection refused」、および「clocklist」などのntpデバッグの他の多くのコマンドを表示します。 NTP ntp.confで設定したサーバーは無視されていました。その他の注目すべき出力は次のとおりです:

[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で設定したサーバーが使用されています。

CentOS7のntpがどういうわけか誤解されているというWordを駆り立てる方法がわかりません。おそらく誰かがこれを見て報告するでしょう。

EpelとCentOSリポジトリの両方が同じバージョンntp-4.2.6p5-29.el7.centos.x86_64を表示していたことに注意してください。

2
ppr