時刻設定(NTP)関係

設定

/etc/ntp.confに設定を記述。 以下に記すのはNTPv4におけるサーバ設定コマンドの記述法である。 コマンドは2種類のグループに分類できる。 1つはリモートサーバとの連携、1対1でのやりとり、時計の参照に関する設定を行う設定コマンド(configuration command)、もう1つは様々な関連操作に関する環境変数を指定する補助コマンド(auxilliary command)である。

設定コマンド
コマンド書式 備考
server NTPサーバ オプション 時刻情報を問い合わせる上位NTPサーバを指定する。
設定コマンドオプション
オプション指定値 備考
iburst サーバにアクセスできない時、通常とは異なる8パケットを送る。パケット送出間隔は通常2秒だが、1つ目のパケットと2つ目のパケットとの間隔は calldelay コマンドを使って変更できる。これにより、モデムやISDNの呼び出しが完了するまでの時間を確保できる。このオプションは server コマンドと s 型のアドレスでのみ有効である。server コマンドにはこのオプションを指定することが推奨される。

【書式】

# このサーバの時刻情報と同期することを許可するが、
# 時刻情報やこのサーバシステムのサービスを修正することは許可しない
restrict default kod nomodify notrap nopeer noquery


restrict -6 default 制限内容 ←デフォルトの制限設定
restrict -6 NTPサーバ名 or IPアドレス オプション ←指定サーバの制限設定
オプション・制限内容 内容
-6 IPv6の設定
ignore 全てのアクセスを無視
mask ネットマスク ネットワークの範囲を指定する。この指定がない場合の既定値は「mask 255.255.255.255」(指定サーバのみ対象)
【例】192.168.0.0/24 のネットワークからのアクセスは全て許可する
	restrict 192.168.0.0 mask 255.255.255.0
      
noquery 関連する情報の問い合わせに応答しない。
notrust 認証が成立しないと通信を許可しない。
nomodify クライアントによるサーバの設定変更を許可しない。
notrap クライアントにサーバが同期することを許可しない。
kod アクセス違反があると、kiss-o'-death (KoD) パケットが送られる。

オプションがなければ全てのアクセスを許可する。一般的な設定は以下の通り、かな?

NTP問い合わせ

chronycコマンドはNTPデーモン(chrony)の管理コマンド。CentOS7以降ではこれが標準のNTPツールのよう。

chronyc オプション コマンド

オプション

コマンド

sources

chronyd がアクセスしている現在の時刻情報源についての情報を表示する。

【例】
$ chronyc sources
210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* ntp1.example.net               2  10   377   235   +475us[ +309us] +/-   30ms
^+ ntp2.example.net               2   7   377    79    +44us[  +44us] +/-   33ms

ntpqコマンドはNTPデーモン(ntpd)が行うやりとりを監視しパフォーマンスを決定するのに用いられるプログラム。引数を指定しないと対話モードになる。

ntpq
-4
引数ホスト名のDNS名前解決の際、強制的にIPv4の名前空間を使う。
-6
引数ホスト名のDNS名前解決の際、強制的にIPv6の名前空間を使う。
-c
後に続く引数は対話モードでのコマンドとして解釈され、指定されたホストに対して実行するコマンドのリストに追加される。-cオプションは複数指定可能。
-d
デバッグモードをONにする。
-i
強制的に対話モードにする。プロンプト文字が標準出力(通常はディスプレイ)に表示され、コマンドは標準入力(通常はキーボード)から読み取られる。
-n
全ホストを、正式ホスト名に変換せずドット区切りの数値(IPv4アドレス)で出力する。
-p
--peers
ピア(利用しているNTPサーバ)の一覧を表示する。合わせて各ピアの状態等も表示される。対話モードコマンドのpeersと同等。
【例】
$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
     ピア名           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*sng-ntp-ext.asi 17.82.254.14     2 u  49m 137m   37   84.529   -4.582   1.144

以下、対話モードコマンドについて記す。コマンド名の指定は、前方一致で特定できる場合、途中までの入力でOK。

? コマンド名
helpl コマンド名
コマンド名を省略すると、使用可能なコマンドリストを表示する。 コマンド名を指定すると、指定したコマンドの情報を表示する。
addvars 変数名 = 変数値...
rmvars 変数名...
clearvars
rv assocID 変数名=変数値,...
システムあるいはピアから変数の値を読み取って返す。

参照先上位サーバ

一般に利用可能な公開ntpサーバについて

サーバ名 Stratum 備考
ntp.nict.jp 1 国立研究開発法人 情報通信研究機構が運営
ntp.jst.mfeed.ad.jp 2 インターネットマルチフィード株式会社が運営する時刻情報提供サービス。複数のサーバが指定できる場合、ntp1.jst.mfeed.ad.jp、ntp2.jst.mfeed.ad.jp、ntp3.jst.mfeed.ad.jpが指定できる。ntp.jst.mfeed.ad.jpはDNSで前記3サーバのラウンドロビンとなっている。
ats1.e-timing.ne.jp 1 アマノビジネスソリューションズ株式会社が運営する公開時刻サーバ
s2csntp.miz.nao.ac.jp 2 大学共同利用機関法人 自然科学研究機構 国立天文台 水沢支部が運営する公開時刻サーバ

指定のNTPサーバに時計を合わせる

あらかじめ問い合わせ先として設定されたNTPサーバに問題なく問い合わせを行い、応答が得られているかを確かめるにはntpq -pが使える。一方、NTPの設定(/etc/ntp.confなど)を変更せず、その他のサーバにNTP問い合わせを行って時計合わせを行うにはntpdateコマンドが使える。またこのコマンドは、NTPの問い合わせに応答するかどうかを確認するのにも利用できる。実行には管理者権限が必要。

【例1】問い合わせ先がNTPの問い合わせに応答しなかった場合
# ntpdate server1
 6 Nov 11:57:28 ntpdate[2689]: no server suitable for synchronization found

【例2】問い合わせ先がNTPの問い合わせに応答した場合
# ntpdate server2
 6 Nov 15:17:44 ntpdate[5010]: adjust time server xxx.xxx.xxx.xxx offset 0.016557 sec

【例3】他のNTPサーバと通信していて問い合わせできない場合
# ntpdate server2
 6 Nov 15:17:21 ntpdate[4993]: the NTP socket is in use, exiting
Mac OS 10.6.8の場合、[システム環境設定]-[日付と時刻]の[日付と時刻]タブで「日付と時刻を自動的に設定」のチェックボックスがONになっているとntpdateによる問い合わせができない。これをoffにした上でntpdateを実行する。

うるう秒について

うるう秒があるかどうかは2ビットのLeap Indicatorで上位NTPサーバから通知される。値の意味は以下の通り[1][2]。うるう秒挿入まで24時間を切ると、うるう秒情報が配信され、NTPデーモンは所定時間になるとkernelに対して時計を操作する(1秒足踏みするあるいは1秒スキップする)指示を出す。

Leap Indicatorの値 内容
00 時刻は通常通り(うるう秒なし)
01 UTC(世界協定時)で当日の最後に1秒挿入される(23時59分60秒が存在する)
10 UTC(世界協定時)で当日の最後に1秒が削除される(23時59分59秒が存在しない)
11 時刻はGPSに同期していない(配給された時刻を使うべきではない)

Leap Indicatorの状態はntpqコマンドで確認できる[3]

# うるう秒なしの場合(Leap Indicator = 00)
$ /usr/sbin/ntpq -c rv
assID=0 status=06f4 leap_none, sync_ntp, 15 events, event_peer/strat_chg,
version="ntpd 4.2.2p1@1.1570-o Tue Oct 25 12:54:50 UTC 2011 (1)",
processor="x86_64", system="Linux/2.6.18-164.15.1.el5", leap=00,
stratum=3, precision=-20, rootdelay=10.694, rootdispersion=35.983,
peer=21610, refid=210.173.160.27,
reftime=d39ce1a0.a93876de  Tue, Jul  3 2012 12:12:32.661, poll=10,
clock=d39ce4d9.4fa70ec2  Tue, Jul  3 2012 12:26:17.311, state=4,
offset=-0.142, frequency=-20.235, jitter=0.256, noise=0.125,
stability=0.000, tai=0

うるう秒が挿入されるとシステムログに以下のような記録が残る。

Jul  1 08:59:59 server kernel: Clock: inserting leap second 23:59:60 UTC

frequency error -xxxx PPM exceeds tolerance 500 PPMエラー

システムログ(/var/log/messages)やntpのログ(/var/log/ntp.log)に表題のようなエラーメッセージが出ていて、システムの時刻が合わない場合、ntpサービスを一旦止めて「ntpd -qg」を実行すればよい[4]

# service ntpd stop
# ntpd -qg
# service ntpd start

オプションの意味は以下の通り。

-g
通常、ntpdはオフセット値が異常しきい値を超えるとシステムログにメッセージを出力して終了します。しきい値の初期値は1000秒です。このオプションによって制限なくどんな時刻にでも設定できてしまいますが、これは一度しか起こりません。設定変更後にしきい値を超えると、ntpdはシステムログにメッセージを残して終了します。このオプションは-qや-xのオプションと同時に使えます。他のオプションについてはtinkerコマンドのマニュアルを参照してください。
-q
最初に時刻を設定した直後にntpdを終了する。これは運用を終了しようとしているntpdataプログラムを模したふるまいをします。-gと-xのオプションも同時に指定できます。注:カーネル時間訓練はこのオプションを無効にできます。