最近、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
が機能しないのはなぜですか?
次のように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
最近、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
を表示していたことに注意してください。