最近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は、「clocklist」などのntpデバッグの他の多くのコマンドと一緒に「read:接続が拒否されました」と表示します。 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などの大規模プロバイダーのIPです。サーバーを選択することはできませんが、使用しているサーバーはよさそうです。しかし、私が何をしても、私のサーバーを選択することはできません/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が何とか破損していることをepelに知らせる方法がわかりません。誰かがこれを見て報告することができます。
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