NTP.CONF(5)

名称
ntp.conf - ネットワークタイムプロトコル (NTP) デーモンの設定ファイル

書式
/etc/ntp.conf

解説
ntp.conf 設定ファイルは、 ntpd(8) デーモンの初期始動時に、同期用時刻供給源、モード、その他関連情報を 指定するために読み込みます。 通常は、この設定ファイルは /etc ディレクトリにインストールされますが、どのディレクトリにもインストール 可能です (デーモンの -c コマンドラインオプションを参照)。

ファイルのフォーマットは、他の UNIX 設定ファイルと似ています。 コメントは、文字 ‘#’ からはじまり、行末まで続きます。 また、空行は無視されます。 設定コマンドは、先頭のキーワードと、 その後に続く引数のリストからなります。 引数にはオプションのものもあります。 各引数は空白で区切られています。 コマンドは、複数の行にまたがることはできません。 引数として、ホスト名、 ドットで 4 つの部分に区切られた形式の数値で書かれたホストアドレス、 整数、浮動小数点で表現された数値 (秒で時間を指定した場合)、 テキスト文字列があります。

このマニュアルページの残りでは、設定と制御オプションについて述べます。 "NTP の設定と NTP サブネットの設定に関する注意" のページ ( /usr/share/doc/ntp にある HTML 文書の一部として入手可能です) では、これらオプションについて更に進んだ議論があります。 一般的な 設定オプション の議論に加えて、 サポートされている機能と、その機能を制御するためのオプションについて 述べた、次のようなセクションがあります:

•   認証機能のサポート

•   モニタ機能のサポート

•   アクセス制御機能のサポート

•   参照クロック機能のサポート

これらのセクションの後に その他のオプション について述べたセクションもあります。 利用可能なオプションは豊富にありますが、 必要なオプションは、 server, peer, broadcast, manycastclient コマンドだけです。

設定オプション
次に述べるのは、NTPv4 の設定コマンドについてです。 これらのコマンドは、基本的な機能は NTPv3 のときと同じですが、 場合によっては、新たな機能や引数を持ったものがあります。 コマンドには、2種類のクラスがあります。 設定コマンドは、リモートサーバまたは通信相手または参照時計との 永続的なアソシエーションの設定を行ないます。 補助コマンドは、さまざまな関連操作を制御する環境変数を設定します。

  設定コマンド
コマンドのキーワードおよび必要とされる IP アドレスの種類によって、 さまざまなモードが決定されます。 アドレスは次のような種類にクラス分けされます。 (s) リモートサーバあるいは通信相手 (IP クラス A, B, C のいずれか)、 (b) ローカルインタフェースのブロードキャストアドレス、 (m) マルチキャストアドレス (IP クラス D)、 あるいは、 (r) 参照時間アドレス (127.127.x.x) です。 以下では、各コマンドに適用可能なオプションだけを記載していることに 注意してください。 記載していないオプションを使用してもエラーにならないかもしれませんが、 その結果、妙なことをしたり、 破壊的なことをしでかしたりすることがあります。

server address
    [key key | autokey] [burst] [iburst] [version version] [prefer] [minpoll minpoll] [maxpoll maxpoll]

peer address
    [key key | autokey] [version version] [prefer] [minpoll minpoll] [maxpoll maxpoll]

broadcast address
    [key key | autokey] [version version] [prefer] [minpoll minpoll] [ttl ttl]

manycastclient address
    [key key | autokey] [version version] [prefer] [minpoll minpoll] [maxpoll maxpoll] [ttl ttl]

これら 4 つのコマンドは、使用するタイムサーバ名またはアドレスと、 動作を行うモードを指定するものです。 address は、DNS 名でも ドットで 4 つの部分に区切られた形式の IP アドレスでも良いです。 アソシエーションの振る舞いに関するさらなる情報は、 "アソシエーション管理" のページにあります。

server
    タイプ s および r のアドレス用です。 このコマンドは、リモートサーバまたはローカルのラジオ時計との 永続的クライアントモードの アソシエーションを行使します。 このモードでは、ローカル時計がリモートサーバに同期することは ありますが、 リモートサーバがローカル時計に同期することは決してありません。 このコマンドは、タイプ b または m のアドレスに対して 使用すべきでは ありません。

peer
    タイプ s のアドレス専用です。 このコマンドは、指定したリモートの通信相手との間で 永続的対称アクティブ (symmetric-active) モードの アソシエーションを行使します。 このモードでは、ローカル時計がリモートの通信相手に同期することが あります。 また、リモートの通信相手がローカル時計に同期することもあります。 この性質は、さまざまな故障の生じ方によっては、ローカル側と リモート側のどちらもがより良い時刻源になりえるような、 サーバのネットワークで有益です。 このコマンドは、タイプ b, m あるいは r のアドレスに対して 使用すべきでは ありません。

broadcast
    タイプ b および m のアドレス専用です。 このコマンドは、 永続的ブロードキャストモードのアソシエーションを行使します。 複数のローカルブロードキャストインタフェース (サブネット) および / あるいは、複数のマルチキャストグループを指定するため、 複数のコマンドを使用できます。 ローカルのブロードキャストメッセージは、指定されたサブネットに 関連づけられたインタフェースだけに到達するということに注意して ください。 ただし、マルチキャストメッセージは全てのインタフェースに到達します。 ブロードキャストモードでは、ローカルサーバは、指定したアドレスに 待機しているクライアント群に対して定期的にブロードキャストメッセージを 送信します。 このときのアドレスは、通常は、ローカルネットワーク (の 1 つ) の ブロードキャストアドレス、もしくは NTP に割り当てられた マルチキャストアドレスです。 IANA は、マルチキャストグループのアドレス 224.0.1.1 をNTP 専用に 割り当てています。 しかし、メッセージを収容するために、その他の競合しないアドレスも 管理境界内で使用できます。 もともと、この仕様は、ローカルサーバが送信側として動作する時のみ 適用されるものです。 ブロードキャストクライアントとして動作させたい場合は、後に説明する broadcastclient もしくは multicastclient コマンドの項を参照してください。

manycastclient
    タイプ m のアドレス専用です。 このコマンドは、指定されたマルチキャストアドレスに対して メニーキャストクライアントモードのアソシエーションを行使します。 この場合、 使用するメニーキャストサーバで manycastserver コマンドで指定したアドレスと一致するアドレスを 指定することが必要です。 IANA が割り当てた 224.0.1.1 というマルチキャストアドレスは、 使用すべきではありません。 ただし、これらのメッセージがインターネット上の広大な領域に 撒き散らされ、それによって膨大な量のリプライが送り手に 集中しないように、何か特別な手段を講じている場合は別です。 manycastserver コマンドは、ローカルサーバがクライアントモードで動作することを指定します。 ローカルサーバは、ブロードキャスト / マルチキャストメッセージを送った結果 発見したリモートサーバとともに、クライアントモードで動作します。 クライアントは、指定した address に関連するグループアドレスへ、要求メッセージを送ります。 そして、特に有効にされたサーバがこの要求メッセージに応答します。 クライアントは、最も正確な時間を提供するサーバを選択し、以後は、 server コマンドを使用した場合と同様の動作を継続します。 それ以外のサーバは、まるで応答を受信しなかったかのように無視します。

オプション:

autokey
    サーバもしくは通信相手との間で送受信したパケットの全てが、 認証オプション の項で説明する autokey 方式を使用して暗号化された 認証フィールドを含むようになります。

burst
    サーバが到達可能な場合、 ポーリング間隔ごとに、通常のパケット 1 個の代わりに、 パケット 8 個をバースト的に送信します。 最初のパケットと2 個目のパケットの間隔は約 16 秒としてあります。 これはモデムによる電話接続が完了するまでの時間を取るためです。 それ以後のパケットの間隔は約 2 秒です。 この動作は、 server コマンドと s アドレスを使った時刻管理を質的に改善するために 設計されました。

iburst
    サーバに到達できない場合、ポーリング間隔ごとに、通常の パケット 1 個の代わりに、パケット 8 個をバースト的に送信します。 サーバに到達できない限り、モデムの電話接続が完了するように、 パケットの間隔は約 16 秒としてあります。 サーバが到達可能になると、パケットの間隔は約 2 秒になります。 この動作は、 ntpd(8) が -q オプション付きで起動されたとき、 server コマンドと s アドレスによる初期同期確立を高速化するために設計されました。

key key
    サーバもしくは通信相手との間で送受信したパケットの全てが、 1から65534の間 (両端を含む) の値の 鍵識別子 key を使用して暗号化された認証フィールドを含むようになります。 デフォルトでは、暗号化されたフィールドは含まれません。

minpoll minpoll

maxpoll maxpoll
    このオプションは、NTP メッセージに対する最小および最大のポーリング間隔 を、秒単位で 2 の指数の値で指定します。 最大ポーリング間隔のデフォルトは 10 (1024秒) ですが、 maxpoll オプションを使用することで、上限である 17 (36.4 時間) まで 増やすことができます。 最小ポーリング時間はのデフォルトは 6 (64 秒) ですが、 minpoll オプションを使用することで、下限である 4 (16 秒) まで 減らすことができます。

prefer
    サーバに望ましいものとしての印をつけます。 他の条件で差がなければ、この印のついたサーバは、 正しく動作しているホストの中から同期用に選択されます。 さらなる情報が必要なら、 "緩和のルールと prefer キーワード" のページを参照してください。

ttl ttl
    このオプションは、ブロードキャストサーバモードと メニーキャストクライアントモードでのみ使用します。 このオプションは、ブロードキャストサーバとマルチキャストサーバの上で 使用する生存時間 ttl を指定し、リング検索をメニーキャストクライアントパケットに拡張する 最大 ttl を指定します。 デフォルトの値は 127 ですが、適切な値を選択するのはちょっとした 黒魔術のようなものですので、システム管理者との間の調整が必要です。

version version
    送出する NTP パケットで使用するバージョン番号を指定します。 バージョン 1-4 から選択します。 バージョン 4 がデフォルトです。

  補助コマンド

broadcastclient
    このコマンドは、任意のローカルインタフェース (タイプ b) に対する ブロードキャストサーバメッセージの受信を可能にします。 最初のメッセージを受信する際に、ブロードキャストクライアントは、 サーバとの間でクライアントサーバ間の短いやりとりを用いて、 名目上の (nominal) サーバ伝播遅延を測定します。 そのあと、ブロードキャストクライアントモードに入ります。 このモードで、その後に受信するブロードキャストメッセージに同期します。 偶然、あるいは故意にこのモードで両者決裂に至ることを避けるため、 サーバとクライアントはどちらも、 認証オプション の項で説明する対称鍵認証または公開鍵認証を用いて 動作しなくてはならないことに注意してください。

manycastserver address ...
    このコマンドは、(1個または複数の) 指定した マルチキャストグループアドレス (タイプ m) に対するメニーキャストクライアントメッセージの受信を可能にします。 少なくとも 1 個のアドレスを必要とします。 しかし、リプライの伝播を制限し、最初の送信側に大量のメッセージが 殺到しないように、なんらかの方策を特別に用意しない限り、 IANA が割り当てた NTP マルチキャストアドレス 224.0.1.1 を使用してはいけません。 偶然、あるいは故意にこのモードで両者決裂に至ることを避けるため、 サーバとクライアントはどちらも、 認証オプション の項で説明する対称鍵認証または公開鍵認証を用いて 動作しなくてはならないことに注意してください。

multicastclient address ...
    このコマンドは、(1個または複数の) 指定した マルチキャストグループアドレス (タイプ m) に対するマルチキャストサーバメッセージの受信を可能にします。 最初のメッセージを受信する際に、マルチキャストクライアントは、 サーバとの間でクライアントサーバ間の短いやりとりを用いて、 名目上の (nominal) サーバ伝播遅延を測定します。 そのあと、ブロードキャストクライアントモードに入ります。 このモードで、その後に受信するマルチキャストメッセージに同期します。 偶然、あるいは故意にこのモードで両者決裂に至ることを避けるため、 サーバとクライアントはどちらも、 認証オプション の項で説明する対称鍵認証または公開鍵認証を用いて 動作しなくてはならないことに注意してください。

認証機能のサポート
認証機能のサポートによって、NTP クライアントは、サーバが 本当に既知で信頼できるものであり、偶然であれ意図的であれ、 サーバのふりをしてクライアントをだまそうとする侵入者ではないことを 確認できます。 NTPv3 仕様 RFC-1305 は、受け取った NTP パケットを 暗号により認証するための方式を定義しています。 もともと、この機能は、Cipher Block Chaining (CBC) モードで機能する Data Encryption Standard (DES) アルゴリズムを使用して (一般的に、DES-CBC と 呼ばれる方式です) 実現されていました。 後に、秘密鍵を使用した RSA Message Digest 5 (MD5) アルゴリズムを用いて (一般的に、 keyed-MD5 と呼ばれています) 改良がなされました。 どちらのアルゴリズムもメッセージダイジェスト、つまり、 片方向ハッシュを計算します。 これは、サーバが正しい秘密鍵と鍵の識別子を持っているか否かを 検証するのに使用できます。

NTPv4 は、NTPv3 の方式を 保持しています。 この方式は、対称鍵暗号化と説明するのが適切でしょう。 それに加えて、公開鍵暗号化に基づく新しい Autokey 方式も 提供しています。 一般に、公開鍵暗号化は対称鍵暗号化よりも安全であると 考えられています。 この方式の安全性が、両サーバそれぞれで生成され外部に持ち出されない 秘密の値 1 個に基づくからです。 Autokey を使うことで、鍵配布/管理機能が含むものは全て公開値のみです。 値が公開されているので、鍵配布と保管が単純化されます。

認証機能はアソシエーションそれぞれに対して個別に設定されます。 設定オプション の項で説明されるように、 認証機能は、 peer, server, broadcast, manycastclient コマンドの key サブコマンドまたは autokey サブコマンドを利用して設定されます。 以下で説明する認証機能オプションは、1 組の鍵を指定し、 設定するアソシエーションそれぞれに対する鍵を選択し、 設定操作を管理します。

auth フラグは、新しいアソシエーションまたはリモート設定コマンドが 暗号化認証を必要とするかどうかを制御します。 このフラグの有効/無効の設定は、 enable および disable 設定コマンドを使用して行なうことができます。 また、他のマシンで ntpdc(8) プログラムを動かして、リモートから設定コマンドを送り行なうことも できます。 このフラグが有効に設定されていれば (デフォルトは有効に設定されています)、 新規のブロードキャストクライアントアソシエーション、 新規の対称パッシブアソシエーション、 リモート設定コマンドは 対称鍵方式または、公開鍵方式のいずれかを用いて 暗号的に認証されなければなりません。 このフラグが無効に設定されていれば、暗号的に認証されていなくても これらの操作は有効です。 後者のモードで操作を行うと、悪者ハッカー (訳注: クラッカー) がクライアントの時刻管理処理に 重大な混乱をもたらすことが可能であるという、重大な脆弱性を招く ことは理解しておいてください。

ファイアウォールと多数のブロードキャストクライアントが存在する ネットワークでは、認証機能を無効にしておくことも許容できるかも しれません。 というのは、無効にすることで鍵の配布を行なわずにすみますし、 ネットワークの管理が単純になるからです。 しかし、設定ファイルがホスト名を含む場合、または、 サーバかクライアントがリモートから設定される場合、 DNS と、それとは別の名前解決プロセスを用いて ホスト名を解決します。 偽物のネームサーバメッセージから守るために、 内部で生成された鍵を使用して名前解決メッセージを認証しています。 この鍵は、通常、ユーザからは見えません。 しかし、暗号化機能のサポートが無効にされている場合、 この名前解決プロセスが失敗してしまいます。 この問題の解決策は、ホスト名の代わりに IP アドレスを指定する (こちらはあまりお勧めしません) か、または、 auth フラグを有効にして名前解決プロセスを行ない、 名前解決プロセスが完了してから auth フラグを無効にするかのどちらかです。

マルチキャストサポートが利用可能な場所での代替案として魅力的なもの は、メニーキャストモードです。 このモードでは、クライアントは定期的にサーバを流し釣りします。 このモードでの暗号化認証は、公開鍵方式を 以下に説明するように使用します。 このメニーキャストモードの主な利点は、クライアントはサーバを 通常の動作の間に発見するので、サーバになり得るマシンに 事前に設定する必要がないことと、クライアント全てで同じ 設定ファイルを利用できることです。

NTP 配布ソフトウエアの構築前に rsaref20 ソフトウエアをインストールしておいた場合、 デフォルトの対称鍵暗号化サポートに加えて、公開鍵暗号化のサポートも 利用可能です。 公開鍵暗号化は、正確性と安定性を犠牲にせずに、安全なサーバ認証を 提供します。 対称鍵暗号化、公開鍵暗号化両方に対するセキュリティモデルと プロトコル方式は、以下に説明します。

  対称鍵方式
RFC-1305 仕様では、本来、65,534 個の鍵の中の任意の 1 個を使い、 アソシエーションを認証することが可能です。 鍵それぞれは 32 ビットの鍵識別子により区別されます。 ここで使われるサーバとクライアントは、 メッセージを認証するための鍵および鍵識別子を合意しておく 必要があります。 鍵およびそれに関連する情報は、鍵ファイル中で指定します。 通常、このファイルは、 ntp.keys と呼ばれます。 このファイルは安全な手続きを用いて交換/格納する必要がありますが、 この手続きは、NTP プロトコル自体の範疇を超えています。 本来の NTP アソシエーションに使用される鍵に加えて、追加の鍵を ntpq(8) および ntpdc(8) ユーティリティプログラム用のパスワードとして使用できます。

ntpd(8) が初めて起動すると、 ntpd は、 keys コマンドで指定した鍵ファイルを読み込み、鍵キャッシュに鍵を 設置します。 一方、鍵は使用する前に trusted コマンドでアクティブにしておくことが必要です。 これにより、例えば、いくつかの鍵の束をインストールし、 ntpdc(8) を使用して鍵の束をリモートからアクティブにしたり、非アクティブに したりできます。 また、これにより、鍵の安全性が損なわれてしまった場合に使用できる 鍵の取消機能も提供されます。 requestkey コマンドは、 ntpdc(8) ユーティリティ用にパスワードとして使用される鍵を選択します。 それに対して、 controlkey コマンドは、 ntpq(8) ユーティリティ用にパスワードとして使用される鍵を選択します。

  公開鍵方式
RFC-1305 に記載されている、もとからある NTPv3 の認証方式は 継続してサポートされています。 しかしながら、NTPv4 では、 Autokey と呼ばれる認証方式が追加され、それを利用できます。 この認証機構は、MD5 メッセージダイジェスト、RSA 公開鍵署名、 Diffie-Hellman 鍵合意アルゴリズムを使用します。 これらは NTPv4 配布ソフトウエアには含まれていませんが、 いくつかのソースコードが存在します。 この機能を有効にするためには、 README.rsa ファイルに説明してあるように、 rsaref20 パッケージをインストールしておかねばなりません。 一度インストールすると、configure と構築プロセスがそれを 自動的に検出し、必要なルーチンをコンパイルします。 Autokey 方式は、サポートするさまざまな NTP モードに対応して いくつかの動作モードを持っています。 すべてのモードでタイムスタンプ付き RSA 署名を使用し、 暗号化の値の送信元を検証します。 すべてのモードで、クライアント、サーバそれぞれで独立に計算できる 特殊なクッキーを 1 個使用します。 対称モードでは、このクッキーは Diffie-Hellman 鍵合意アルゴリズムを 用いて組み立てられます。 それ以外のモードでは、このクッキーは IP アドレスとサーバのみが知っている秘密の値とで組み立てられます。 それに加えて、すべてのモードで S-KEY 方式と良く似た方式を使用します。 その方式では、疑似乱数鍵のリストを生成し、逆順で使用します。 これらの方式は、幹部向け要約、現状、要約スライド、文献リスト ともども、 "自主認証(Autonomos Authentication)" のページで説明します。

Autokey 方式で使用する暗号化の値は、 ntp-genkeys(8) プログラムで生成するファイルの中に組み込まれています。 それらは、対称秘密鍵、公開鍵/秘密鍵の組、合意パラメータです。 これらファイルの形式の説明は、 ntp.keys(5) マニュアルページを参照してください。 これらのファイルには、 rsaref20 パッケージのアルゴリズムにより生成された暗号化の値が 印字可能な ASCII 文字の形式で含まれています。 すべてのファイル名には NTP 秒のタイムスタンプと、その後ろに デフォルトの名前とが含まれます。 これらのデフォルトの名前は以下で与えます。 ファイルデータはシステムクロックを種とする乱数値に由来しており、 ファイル名にタイムスタンプが含まれているため、 これらのファイルを生成するごとに、 異なるファイル内容とファイル名で生成されます。

ntp.keys ファイルは DES/MD5 秘密鍵を含みます。 このファイルを同じセキュリティ区画に属する他のサーバやクライアントに 配布する際には、安全な手段で配布せねばなりません。 また、このファイルは root のみが見られるようにしなければなりません。 このファイルは Autokey 方式では使用しませんが、 ntpdc(8), ntpq(8) ユーティリティが使用する いくつかのリモート設定コマンドを認証する際に必要です。 ntpkey ファイルは RSA 秘密鍵を保持します。 このファイルを生成したマシンでのみ利用できます。 他のデーモンやアプリケーションプログラムと共用することは 決してありません。 ですから、root のみが見られるようにしなければなりません。

ntp_dh ファイルは、合意パラメータを保持します。 このパラメータは対称 (アクティブ、パッシブ) モードでのみ使用します。 対称モードアソシエーションを開始する通信相手同士で同じパラメータを 共有することが必要ですが、どちらの ntp_dh ファイルから得られたパラメータかは問題になりません。 通信相手の一方がパラメータを保持する場合、他方は Autokey プロトコルを用いてそのパラメータを取得します。 通信相手が双方ともパラメータを保持している場合、双方は 最も新しいコピーを使用します。 通信相手がパラメータを持っていない場合、 設定されたアソシエーションまたは未設定のアソシエーション のいずれかについて、 全てのアソシエーションがパラメータを要求します。 しかし、どちらかの通信相手がパラメータを受信するまでは、 アソシエーションの処理を進めることはできません。 一度ロードされると、パラメータは要求に応じて他のクライアントや サーバに提供することができます。 ntp_dh ファイルのデータは公開値なので、このファイルは 安全でない手段を用いて配布することもできます。

ntpkey_host ファイルは RSA 公開鍵を含みます。 ここで、 host はホストの名前です。 ホストはそれぞれ自分自身の ntpkey_host ファイルを持っています。 通常、このファイルは、Autokey プロトコルを用い他のホストに提供されます。 server アソシエーション、または、 peer アソシエーションは、特定のサーバまたは通信相手に関連した 公開鍵を要求します。 この公開鍵は、ローカルファイルから直接ロードされるか、 Autokey プロトコルを用いてサーバから間接的にロードされます。 これらのファイルのデータは公開値であるため、 これらのファイルは安全でない手段を用いて幅広く配布/保管することが できます。

ntpkey_certif_host ファイルはオプションで、そのホストに対する PKI 証明データを含みます。 これはホスト名と RSA 公開鍵の結び付きを提供します。 現在の実装では、この証明データが存在すれば、クライアントはそれを 取得しますが、その内容は無視されます。

インタフェースごとの名前付けが幅広く使用されているため、 設定され行使中のアソシエーションで使用されるホスト名は、 UNIX の gethostname(3) ライブラリ関数を使って決定されます。 ntp-genkeys(8) プログラムと Autokey プロトコルは、ともにこのルーチンが返す名前を 用いて公開鍵ファイルの名前を派生させます。 どのサーバもクライアントも固有の公開鍵と秘密鍵をロードする必要が ありますが、それぞれのクライアントアソシエーションまたは通信相手 アソシエーションに対する公開鍵は、Autokey プロトコルを用いて サーバまたは通信相手から取得することができます。 しかし、現在の開発段階では、 サーバまたは通信相手の認証の確実性と サーバ名、アドレス、公開鍵の暗号との結合は、 認証局 (certificate authority) や 信用の輪 (web of trust) により確立されたところにまで達していません。

  閏秒表
NIST は、1972 年以後、歴史的に全ての閏秒の挿入の発生を示す表を 提供しています。 この閏秒表は、挿入発生それぞれだけでなく、 協定世界時 (Coordinated Universal Time:UTC) に関する 国際原子時 (International Atomic time:TAI) のオフセットもあわせて 記載しています。 ちなみに、協定世界時は NTP により伝播されているものです。 この表は、NIST 国家時刻サーバから FTP を使い ASCII ファイル pub/leap-seconds として直接取得することができます。

厳密にはセキュリティ機能ではありませんが、Autokey 方式は サーバまたは通信相手から安全に閏秒表を取り出す手段を提供しています。 サーバは、 crypto コマンドで指定したファイルから、閏秒表を直接ロードします。 クライアントは、サーバから Autokey プロトコルを使い間接的に 取得します。 一度ロードされると、閏秒表は要求に応じ他のクライアントやサーバに 提供できます。

  鍵の管理
デフォルトで、全ての鍵ファイルは、 /usr/local/etc に置かれます。 このディレクトリは通常、 ネットワークで NFS マウントされた共有ファイルシステムの中にあり、 個々のマシンに別々にインストールする手間を省くことができます。 このデフォルトは、 keysdir 設定コマンドを用いて上書きすることができます。 しかし、ここは秘密鍵ファイルを置く場所としては良いとはいえません。 マシンそれぞれが自分のファイルを必要とするからです。 このファイルをインストールするのに適当な場所は /etc です。 ここは、通常、共用ファイルシステムに存在しません。

推奨するやり方は、 ファイルをインストールした時のタイムスタンプ拡張子を保持し、 (タイムスタンプ拡張子のない) デフォルト名から実ファイルへの リンクを作ることです。 これにより、新規ファイルの生成をリンクを張り変えることで有効に できます。 しかし、 ntpd(8) は、拡張値を取り出す瞬間にリンク名を解釈し、要求された時点で 公開鍵とホスト名とともにリンク名を送付します。 これにより、クライアントはファイルと生成時刻が常に現在であると 検証することができます。 しかし、各ファイルの実際の場所は crypto 設定コマンドにより上書きされる可能性があります。

暗号化鍵と関連パラメータ全ては、例えば、1ヶ月に1回ぐらいの頻度で 定期的かつ自動的に再生成する必要があります。 ntp-genkeys(8) プログラムは、一度に生成するファイル全てに対し 同じタイムスタンプ拡張子を使います。 ですから、ファイル生成のそれぞれは区別され、データ監視の際に ファイル生成を認識できます。 公開鍵/秘密鍵の組は全てのサーバとクライアントにより 生成されねばなりませんが、公開鍵と合意パラメータを、 同じセキュリティ区画内の全てのマシンに対しわざわざ コピーする必要はありません。 これらは、Autokey プロトコルを使い自動的に取得できるからです。 しかし、プライマリサーバの全ては同じ合意パラメータファイルを持つ 必要があります。 これを達成するために推奨する方法は、プライマリサーバの 1 つに そのファイルを生成させ、その後で、同じセキュリティ区画内の 他のプライマリサーバに対し UNIX rdist(1) コマンドを用いてコピーすることです。 Autokey プロトコルの将来のバージョンでは、合意プロトコルが この処理を自動的に行なう機能の提供を含むことになります。

サーバとクライアントは新規のファイル世代の生成を 次のように行なうことができます。 全てのマシンは起動時に古いファイル世代をロードしており、 正常に動作しています。 指定した間隔で、各マシンは新規の公開鍵/秘密鍵の組を生成し、 デフォルトファイル名から新規ファイル名へのリンクを作成します。 その後で、 ntpd(8) は再起動され、新規の生成をロードします。 その結果、クライアントはもはや認証を正しく行なうことが できなくなります。 Autokey プロトコルがそう設計されているので、 数分後にクライアントはタイムアウトし、 プロトコルを最初から開始します。 その結果新規の世代をロードし、以前通り動作を続けることが できるようになっています。 同様の手続きが合意パラメータファイルに対しても使用できます。 しかし、この場合、このファイルを持つすべてのマシンが同じコピーを 持つように十分用心しておく必要があります。

  認証コマンド

autokey [logsec]
    Autokey プロトコルで使用するセッション鍵のリストを 再生成する時間間隔を指定します。 各アソシエーション用の鍵リストのサイズは、この時間間隔と現在の ポーリング間隔に依るということに注意してください。 デフォルト値は 12 です (4096 秒、つまり、約 1.1 時間です)。 指定した時間間隔以上のポーリング間隔に対しては、 セッション鍵のリストは単一エントリを持ち、メッセージを 送るごとに再生成されます。

controlkey key
    ntpq(8) ユーティリティプログラムで使用する鍵の識別子を指定します。 このプログラムは、RFC-1305 で定義された標準プロトコルを使用します。 key 引数は、鍵のキャッシュ中の信頼された鍵に対する鍵識別子です。 値の範囲は、1 から 65534 で両端を含みます。

crypto
    [flags flags] [privatekey file] [publickey file] [dhparms file] [leap file] このコマンドは NTP デーモンを構築する際に RSA ライブラリを含め設定することが必要です。 このコマンドは公開鍵暗号化を有効にし、必要な RSA 秘密鍵ファイルと 公開鍵ファイルをロードし、存在するなら Diffie-Hellman 合意パラメータ ファイルもロードします。 ファイルを指定しないでいた場合、デフォルトの名前は以下に説明するように 使われます。 次に示すのはサブコマンドです。

    privatekey file
        RSA 秘密鍵ファイルの場所を指定します。 指定がない場合のデフォルトは、 /usr/local/etc/ntpkey です。

    publickey file
        RSA 公開鍵ファイルの場所を指定します。 指定がない場合のデフォルトは、 /usr/local/etc/ntpkey_host です。 ここで、 host は鍵を生成したマシンの名前です。

    dhparms file
        Diffie-Hellman パラメータファイルの場所を指定します。 指定がない場合のデフォルトは、 /usr/local/etc/ntpkey_dh です。

    leap file
        閏秒表ファイルの場所を指定します。 指定がない場合のデフォルトは、 /usr/local/etc/ntpkey_leap です。

keys keyfile
    DES/MD5 秘密鍵ファイルの場所を指定します。 このファイルは、対称鍵モードで動作しているときに ntpd(8), ntpq(8), ntpdc(8) が使用する鍵と鍵識別子を含みます。

keysdir path
    このコマンドは NTP デーモンを構築する際に RSA ライブラリを含め設定することが必要です。 秘密鍵ファイル、合意パラメータファイル、公開鍵ファイルに対する デフォルトのディレクトリパスを指定します。 設定ファイルにこのコマンドが出てこなかったとき、 このデフォルトは /usr/local/etc です。

requestkey key
    ntpdc(8) ユーティリティプログラムで使用する鍵の識別子を指定します。 このプログラムでは、 ntpd(8) の現在の実装に特有の専用プロトコルを使用します。 key 引数は、信頼された鍵に対する鍵の識別子です。 その値は 1 から 65534 の範囲です (両端を含む)。

revoke logsec
    Autokey 方式で使用するある暗号化値の再計算の間隔を、 秒数を 2 の指数で指定します。 この方式のアルゴリズムによる総当たり攻撃を そらすために、これらの値を頻繁に更新する必要があります。 しかし、いくつかの値の更新は比較的高価な処理です。 デフォルトの時間間隔は 16 です (65,536 秒、つまり約 18 時間です)。 指定した間隔以上のポーリング間隔に対して、 メッセージを送るごとに新しい値が再計算されます。

trustedkey key ...
    通信相手を対称鍵暗号化を使い認証する目的で、信頼する 暗号化鍵の識別子を指定します。 また ntpq(8) および ntpdc(8) プログラムで使用される鍵も指定します。 認証手続きが要求することは、この目的のために、 ローカルとリモートのサーバとが同じ鍵および鍵の識別子を 共有していることですが、 異なったサーバには、異なった鍵を使用可能です。 key 引数は 32 ビット符号なし整数で、1から65,534までの範囲の値です。

モニタ機能のサポート
ntpd(8) には、サーバおよびクライアントの時間計測のパフォーマンスを長時間 連続して記録するのに適した、包括的なモニタ機能が含まれています。 現在サポートされている統計の種類のリストと実行例については、 後で述べる statistics コマンドを参照してください。 統計ファイルは、ファイル世代集合と、配布物の中の ./scripts ディレクトリにあるスクリプトを使用して管理されています。 これらの機能と、 UNIX の cron(8) ジョブを使用して、 データが自動的に要約され、時間を遡った分析を行うときのために 保存されます。

  モニタ機能のコマンド

statistics name ...
    統計レコードの書き込みを有効にします。 現在のところ、4 種類の name の統計がサポートされています。

    loopstats
        ループフィルタの統計情報の記録を有効にします。 ローカル時計の更新を行うたびに、 loopstats という名前のファイル世代集合に次の形式の行を出力します:

            50935 75440.031 0.000006019 13.778190 0.000351733 0.013380 6

        最初の 2 つのフィールドは、日付 (ユリウス暦に修正済) と 時刻 (UTC 午前 0 時からの秒数) です。 次の 5 つのフィールドは、 秒単位の時間オフセット、 100 万分の 1 (PPM) 単位の周波数オフセット、 秒単位の RMS ジッタ、100 万分の 1 (PPM) 単位の Allan 偏差、 時計学習アルゴリズムの時定数です。

    peerstats
        通信相手に関する統計情報の記録を有効にします。 これには、設定されたものと現在有効なものとの両方について、 NTP サーバの通信相手の全て、特別な時刻信号の通信相手の全て に対する統計レコードが含まれます。 有効な更新が行われる度に、peerstats という名前のファイル世代集合の 現在の要素に次の形式の行を追加します:

            48773 10847.650 127.127.4.1 9714 -0.001605 0.00000 0.00142

        最初の 2 つのフィールドは、日付 (ユリウス暦に修正済)、 時刻 (UTC で午前 0 時からの秒数) です。 次の 2 つのフィールドは、それぞれドットで 4 つの部分に区切られた 形式の記法で書かれた通信相手のアドレスおよびステータスです。 ステータスフィールドは、RFC 1305 の NTP 仕様の追記 A で述べている フォーマットを用いて、16 進数で符号化されています。 最後の 3 つのフィールドは、オフセット、遅延、RMS ジッタで、 すべて秒単位です。

    clockstats
        時計ドライバの統計情報の記録を有効にします。 時計ドライバからの更新を受ける度に、clockstats という名前の ファイル世代集合に、次の形式の行を追加出力します:

            49213 525.624 127.127.4.1 93 226 00:08:29.606 D

        最初の 2 つのフィールドは、日付 (ユリウス暦に修正済) および時刻 (UTC で午前 0 時からの秒数) です。 次のフィールドは、ドットで 4 つの部分に区切られた形式の記法で書かれた 時計のアドレスを示しています。 最後のフィールドは、時計から受け取った最後のタイムコードを 意味のある ASCII フォーマットにデコードしたものです。 時計ドライバによっては、これ以外に追加でそこそこの情報を集め、 あわせて表示するものがあります。 さらなる情報については、各時計特有の情報を参照してください。

    rawstats
        そのままのタイムスタンプ (raw-timestamp) の統計情報を 記録できるようにします。 これには、設定されたものと現在有効なものとの両方について、 NTP サーバの通信相手の全て、特別な時刻信号の通信相手の全て に対する統計レコードが含まれます。 通信相手または時計ドライバから受け取った NTP メッセージは それぞれ、rawstats という名前のファイル世代集合に 次のような形式で 1 行付け足します:

            50928 2132.543 128.4.1.1 128.4.1.20 3102453281.584327000 3102453281.58622800031 02453332.540806000 3102453332.541458000

        最初の 2 つのフィールドは、日付 (ユリウス暦に修正済) および時刻 (UTC で午前 0 時からの秒数) です。 次の 2 つのフィールドは、 通信相手あるいは時計のアドレスと、 ローカルアドレスを示しています。 これらはドットで 4 つの部分に区切られた記法で書かれています。 最後の 4 つのフィールドは、 生起、受信、送信、最終の 4 種類の NTP タイムスタンプを 順に示したものです。 タイムスタンプの値は受け取ったままのものであり、さまざまな データ平滑化や緩和アルゴリズムが処理する前のものです。

statsdir directory_path
    統計ファイルを作るディレクトリのフルパスを指定します (下記参照)。 このキーワードにより、ファイル世代集合のための filegen ファイル名のプレフィックスの変更 (これがなければ固定のままです) が可能となります。 これは、統計ログを扱うのに便利です。

filegen name
    [file filename] [type typename] [link | nolink] [enable | disable] ファイル世代集合 name の設定を変更します。 ファイル世代集合は、サーバの活動期間を通じて 継続的に大きくなっていくファイルを扱う手段を提供します。 サーバの統計はこのようなファイルの典型例です。 ファイル世代集合は、実際のデータを格納するのに用いられる ファイル集合へのアクセスを提供します。 どんな時点でも、ファイル集合の高々 1 つの要素に対してだけ 書き込みが行われます。 指定した type は、ファイル集合の新しい要素に、データがいつ、 どのように出力されるのかを指定します。 この方法で、 ntpd(8) の動作を妨げる危険を冒すことなく、 現在使用されていないファイル集合の要素に格納されている情報を、 管理操作のために使用できます (最も重要な操作: 新たな出力データ用の空きを作るために、これら要素を削除できます)。 このコマンドは、リモートで動作している ntpdc(8) プログラムから送信可能であることに注意してください。

    name
        これは、統計レコードのタイプです。 statistics コマンドの項で示すものと同じです。

    file filename
        これは、統計レコード用のファイル名です。 集合のメンバのファイル名は、次の 3 つの要素の結合、 すなわちプレフィックス、ファイル名、サフィックスからできています。

        prefix
            ファイル名のパスであり、定数です。 これは、 filegen オプションを使っても変更されることはありません。 パスは、サーバが定義します。 通常は、コンパイル時に定数として指定します。 しかし、別のコマンドを使って、個々のファイル世代集合に対し 設定することも可能です。 例えば、 loopstats および peerstats 生成時に使われるプレフィックスは、 前に説明した statsdir オプションを使用して設定可能です。

        filename
            この文字列は、そのまま先に述べたプレフィックスの後ろに結びつきます (間に ‘/’ (スラッシュ) は入りません)。 これは、 filegen ステートメントの file 引数を使用することで変更できます。 この中身には、 ‘..’ という要素を使用することはできません。 それは、プレフィックスで示されたファイルシステムの階層外を filename が参照してしまうのを防ぐためです。

        suffix
            この部分は、ファイル集合の要素ひとつひとつを反映しています。 これは、ファイル集合の種類に依存して生成されます。

    type typename
        ファイル世代集合は、タイプによって特徴づけされます。 次のような種類がサポートされています:

        none
            このファイル集合はごく普通のファイル 1 つです。

        pid ntpd(8) サーバが生成されるごとに、ファイル集合の要素が 1 つ 使用されます。 このタイプは、動作中にファイル集合のメンバに何の変更も 施すことはありませんが、異なる ntpd(8) サーバの生成に属しているファイルを分けるのに簡単な方法を 提供します。 ファイル集合のメンバのファイル名は、プレフィックスと filename 文字列をつないだものに ‘’. (ドット) を付け加え、 ntpd(8) サーバのプロセスのプロセス ID を 10 進数で表現したものを 付け加えたものです。

        day 1 日ごとにファイル世代集合の要素が 1 つ生成されます。 1 日とは、UTC 時刻で 0:00 から 24:00 までの期間と定義されています。 ファイル集合メンバのサフィックスには、 "". (ドット) と日付を YYYYMMdd 形式で表したものが含まれています。 ここで、 YYYY は、4 桁で表した西暦年です (例えば、1992)。 MM は、2 桁の月です。 dd は、2 桁の日です。 つまり、1992 年 12 月 10 日に書かれた情報は全て、 ~prefix/filename/19921210 という名前のファイルに書かれることになります。

        week
            どの要素も 1 年のうちのある週に関連するデータを含みます。 ここで、週という用語は、年の始まりからの日数の 7 の商により 定義されます。 このようなファイル世代集合の要素は、ファイル集合の filename のベースに、次のようなサフィックスをつけることで区別されます: ドット、4 桁の西暦年、文字 ‘W’, 2 桁の週番号です。 例えば、1992 年 1 月 10 日からの情報は、サフィックス .1992W1 を持つファイルに出力されます。

        month
            1 月に 1 つのファイル世代集合の要素が作成されます。 ファイル名のサフィックスは、ドット、4 桁の西暦年、2 桁の月から なります。

        year
            1 年に 1 つのファイル世代集合の要素が作成されます。 ファイル名のサフィックスは、ドットと 4 桁の西暦年からなります。

        age この型のファイル世代集合は、サーバが 24 時間活動するごとに新たな要素に 変わります。 ファイル名のサフィックスは、ドット、文字 ‘a’, 8 桁の数から なります。 この数は、対応する 24 時間の始めからサーバが実行されている 秒数であるようになります。 情報は、ファイル世代集合が enable に設定されているときのみ、その集合に 書き込まれます。 出力は、 disable に指定することで抑制されます。

    link | nolink
        ファイル世代集合の現在の要素に、決まった名前でアクセスできると 便利です。 この機能は、 link を指定することで有効になり、 nolink を使用すると無効になります。 link が指定されると、現在のファイル集合の要素から、 サフィックスを持たないファイルへのハードリンクが作成されます。 すでにその名前を持つファイルが存在し、そのファイルへのリンク数が 1 であるとき、そのファイル名を、ドット、文字 ‘C’ そして ntpd(8) サーバプロセスのプロセス ID を後ろに付け加えたものに変更します。 ファイルへのリンク数が 1 よりも大きい場合は、 ファイルはアンリンクされます。 これによって、現在のファイルは、一定の名前でアクセスできます。

    enable | disable
        情報記録機能を有効または無効にします。

アクセス制御機能のサポート
ntpd(8) は、一般的な用途のアドレスおよびマスクベースの制限リストを 実装しています。 この制限リストは、アドレスおよびマスクでソートされており、 マッチするか否かをみるのに、この順序で探索が行われます。 この結果、最後にマッチしたものが、入力パケットと 関連付けられた制限フラグを定義します。 入力パケットの送り主のアドレスがマッチに使われます。 32 ビットのアドレスと、制限用のエントリに関連付けられた マスクとの AND をとり、それからエントリのアドレスと比較をして マッチが行われます (エントリのアドレスもマスクと AND が取られています)。 さらなる情報や例については、 "NTP の設定と NTP サブネットの設定に関する注意" のページにあります。

アクセス制限機能は、オリジナルの NSFnet バックボーン タイムサーバに対するアクセスポリシと一致するように実装されました。 この機能は、望まないものや落ちてしまったリモートのタイムサーバが 自分のタイムサーバに影響を与えないようにするには有効かも しれませんが、この機能を、標準の NTP 認証機能の代用になると 考えるべきではありません。 送り元アドレスに基づいた制限というのは、やる気十分のクラッカー には簡単に回避されてしまいます。

  死の接吻パケット
もともと、サービスを拒否されたパケットは、単純に捨てられるだけで、 統計カウンタを増やす以外に一切の動作を生じさせることはありません。 クライアントに明示的に送信停止を要求し、またシステムオペレータに メッセージを残すサーバメッセージなどの、より前向きな応答が 必要となることがときどきあります。 この目的のために、特にパケット形式が作られました。 それを称して、死の接吻 (kiss-of-death) パケットと言います。 kod フラグが設定されており、サービスが拒否されるか、クライアントが 限界値を越えたとき、サーバはパケットを返し、leap ビットを 非同期に設定し、階層を 0 に設定し、ASCII 文字列 "DENY" を 参照ソース識別子フィールドに設定します。 kod フラグが設定されていない場合、サーバは単にパケットを捨てるだけです。

死の接吻パケットを受信したクライアントまたは通信相手は、一連の 健全性チェックを行ない、セキュリティの露出 (exposure) を最小限に 押えます。 このパケットが、そのサーバから受信した最初のパケットである場合、 クライアントは、そのサーバの条件ではアクセスは拒否されたと想定します。 そのクライアントは階層と参照識別子の通信相手変数とを更新し、 通信相手フラッシュ変数のアクセス拒否 (テスト 4) ビットを設定します。 このビットが設定されている場合、クライアントはそのサーバに対し パケットを送信しません。 そのサーバから受信した最初のパケットでなかった場合、クライアントは サーバ側で限界値を越えたと想定します。 しかし、通信相手変数は更新しません。 いずれの場合でも、メッセージをシステムログに送出します。

  アクセス制御コマンド

restrict numeric_address
    [mask numeric_mask] [flag ...] numeric_address 引数は、ホストあるいはネットワークのアドレスです。 これは、ドットで 4 つの部分に区切られた形式で表現されます。 mask 引数も、ドットで 4 つの部分に区切られた形式で表現されます。 デフォルトは 255.255.255.255 です。 これは、 numeric_address が個別のホストのアドレスとして扱われるものであることを 意味しています。 デフォルトエントリ (アドレス 0.0.0.0, マスク 0.0.0.0) は常に含まれており、既定のソートアルゴリズムでは、 常にリストの先頭のエントリとなります。 numeric_address は、通常ドットで 4 つの部分に区切られた形式で与えられますが、 mask オプションを伴わないテキスト文字列 ‘default’ は、 デフォルトエントリを示すために使用できることに注意して下さい。 現在の実装では、 flag は常にアクセスを制限します。 すなわち、フラグを持たないエントリは、サーバへの自由なアクセスが 与えられることを示すことになります。 フラグは直交的ではなく、より制限の強いフラグは、 より制限の弱いフラグを冗長にすることもしばしばです。 フラグは、一般に 2 つのカテゴリに分類されます。 時間サービスを制限するものと、情報問い合わせやサーバを 実行時に再設定しようとするのを制限するものです。 次のフラグのうち、1 つ以上を指定できます:

    kod アクセスが拒否された場合、死の接吻パケットを送信します。

    ignore
        このエントリにマッチするホストからのすべてのパケットを無視します。 このフラグが指定されると、問い合わせも時間サーバへのポーリングも 応答されなくなります。

    noquery
        NTP のモード 6 と 7 のすべてのパケット (つまり情報問い合わせと 設定要求) を無視します。 時間サービスは影響を受けません。

    nomodify
        サーバの状態を変えようとするモード 6 と 7 のすべてのパケット (つまり実行時再設定) を無視します。 情報を返す問い合わせは許されます。

    notrap
        マッチしたホストにモード 6 の制御メッセージのトラップサービスを提供 することを拒否します。 トラップサービスは、モード 6 の制御メッセージプロトコルの サブシステムで、リモートのイベントロギングプログラムによる 使用が意図されています。

    lowpriotrap
        マッチしたホストによるトラップセットを低い優先度として宣言します。 1 つのサーバが保持し得るトラップの数は制限されています (現在の制限値は 3 です)。 トラップは通常、先入れ先出しベースで割り当てられ、後から来た トラップ要求はサービスを拒否されます。 このフラグは、後から到着する要求のための通常優先度のトラップが 低い優先度のトラップを上書きできるようにすることで、 割り当てアルゴリズムを変更します。

    noserve
        モード 6 と 7 以外のすべての NTP パケットを無視します。 基本的には、時間サービスは拒否されますが、それでも 問い合わせは許されています。

    nopeer
        ポーリングしているホストに、状態を持たない (stateless) 時間サービス を与えますが、通信相手用のメモリ資源を割り当てません。 割り当てておけば、将来、同期の相手として有用になるかも しれないとしてもです。

    notrust
        これらのホストは同期源としては決して使用されませんが、その他の点では 普通に扱われます。

    limited
        これらのホストは、同一のネットからのクライアント数の制限の対象と なります。 ここで言うネットとは、 (class A, class B, class C 等の) ネットの IP 表記のことです。 サーバに見えるホストで、過去 client_limit_period 秒の間アクティブであった、最初の client_limit 個のホストのみが、受け付けられます。 同一のネットの他のクライアントからの要求は拒否されます。 時間要求パケットのみが考慮されます。 ntpq(8) および ntpdc(8) プログラムが送信した問い合わせパケットは、この制限の影響は 受けません。 クライアントの履歴は、 ntpd(8) のモニタリング機能を用いて保持されます。 そのため、 limited フラグのついたアクセス制限のエントリがあれば、 モニタリング機能は常にアクティブです。

    ntpport
        実質的には、制限フラグと言うより、マッチのアルゴリズムを 変更するものです。 このフラグが存在すると、パケットのソースポートが標準の NTP の UDP ポート (123) である場合にのみ、制限エントリにマッチします。 ntpport と non-ntpport のどちらも指定できます。 ntpport の方が限定的なものであると考えられ、リストの後ろの方に ソートされます。

    デフォルトの制限リストエントリは、フラグ ignore, interface, ntpport を持ち、ローカルホストの インタフェースアドレスそれぞれに対応するもので、 サーバが自分自身の時間に同期しないようにするために、 スタートアップ時にテーブルに挿入されます。 デフォルトエントリは常に存在しています。 さもなくば無設定になってしまう場合であってもです。 他で設定されていない場合は、どのフラグもデフォルトエントリに 関連づけられません (すなわち、あなた自身の NTP サーバ以外の すべてが無制限になります)。

clientlimit limit
    client_limit 変数を設定します。 この変数は、同時にアクセス制御されるクライアント数を制限します。 この変数のデフォルト値は 3 です。

clientperiod period
    client_limit_period 変数を設定します。 この変数は、クライアントが非アクティブであるとみなされ、 そのために、もはや制限されるクライアント数に数えられなくなるまでの秒数を 指定します。 この変数のデフォルト値は 3600 秒です。

参照クロック機能のサポート
NTP バージョン 4 デーモンは、40 種類ほどの、電波、衛星、 モデムを参照する 時計をサポートします。 さらに、バックアップ用およびクロック源が他に利用できなく なったときのために、特殊な疑似時計をサポートしています。 個別のデバイスドライバやオプションに関する詳細な説明は、 "参照クロックドライバ" のページ (これは、 /usr/share/doc/ntp にある HTML 文書の一部として利用可能です) にあります。 さらなる情報は、 "参照クロックドライバのデバッグのヒント" や、 "参照クロックドライバの書き方" など、そこからリンクされたページにあります。 それに加え、 PPS 信号のサポートについては、 "1 秒間隔のパルス (PPS) 信号のインタフェース" のページの説明が利用できます。 ドライバの多くは、特殊な回線規約 / ストリームモジュールを サポートしています。 このモジュールを用いると、時刻の正確性が飛躍的に向上します。 これに関しては、 "回線規約とストリームドライバ" のページに説明があります。

参照クロックは、一般に (常にではありませんが) 無線時刻コード受信機です。 この無線時刻コード受信機は、 カナダの NRC や合州国の NIST や USNO が提供しているサービスの ような、標準時刻の供給源に同期します。 コンピュータと時刻コード受信機との間のインタフェースは デバイス依存ですが、シリアルポートを使うのが普通です。 それぞれの参照クロックに特有のデバイスドライバを選択し、 そのディストリビューションでコンパイルする必要がありますが、 もっとも標準の無線、衛星、そしてモデム時計はデフォルトで 含まれています。 その時計用のドライバがコンパイルされていないか、 ハードウェアのポートが 適切に設定されていないときに参照クロックを設定しようとすると、 システムのログファイルに激しい警告がでますが、その他の障害が 起こることはありません。

設定の観点から見ると、 ntpd(8) は、参照クロックを、普通の NTP の交信相手にするのとできる限り同じような方法で扱います。 参照クロックは、通常の NTP 通信相手と区別するため、 文法的には正しいが、無効な IP アドレスを使って認識されます。 参照クロックのアドレスは、 127.127.t.u の形式です。 ここで、 t は時計の種類を示した整数で、 u はユニット番号 (範囲は 0-3) を示しています。 これは、過剰に見えるかもしれませんが、 実のところ、同種類の参照クロックを複数設定するのには時として 便利です。 この場合、ユニット番号は一意のものであることが必要です。

server コマンドを使用して参照クロックを設定します。 ここで、このコマンドの address 引数は参照クロックのアドレスです。 key, version, ttl オプションは、参照クロックのサポートでは使用しません。 参照クロックをサポートするために、 mode オプションが追加されています。 このオプションについては後で述べます。 prefer オプションは、サーバに、他の参照クロックや通信相手よりも いくらか熱心に、ある参照クロックを大切に扱わせるように促すのに 有効です。 このオプションに関してのさらなる情報については、 "緩和ルールと prefer キーワード" のページにあります。 minpoll と maxpoll オプションは、選択されたクロックドライバに 対してのみ意味があります。 さらなる情報については、別個のクロックドライバのドキュメントページを 参照してください。

fudge コマンドは、クロックドライバ固有の追加情報を提供するのに使用します。 通常は、 server コマンドの直後に使用されます。 address 引数はクロックのアドレスを指定します。 refid と stratum は、そのデバイスのデフォルト値を上書きするために使用することが できます。 2 個のオプションのデバイス依存の時刻オフセットと 4 個のフラグがあり、 それらも同様に fudge コマンドに含めることが可能です。

参照クロックの階層 (stratum) 番号は、デフォルトで 0 です。 ntpd(8) デーモンは各通信相手の階層に 1 を足すので、 プライマリサーバは、通常、外部階層 1 を示します。 バックアップを巧みに運用するため、 参照クロックの階層を 0 より大きい数に指定するのが有益な ことが多いです。 この目的のために、 stratum オプションを使用します。 参照クロックと、1 秒間隔パルス (PPS) 調整信号の両方を 含む場合、参照クロック識別子をデフォルト値以外の、ドライバに 依存したものに指定するのが有効です。 この目的のために、 refid オプションを使用します。 記述がない限り、これらのオプションは、すべての時計 ドライバに適用されます。

  参照クロックのコマンド

server
    127.127.t.u [prefer] [mode int] [minpoll int] [maxpoll int] このコマンドは、参照クロックを特殊な方法で設定するのに 使用できます。 オプションは次のように解釈されます:

    prefer
        その参照クロックを優先的なものとして印をつけます。 その他の点では対等であれば、正しく動作しているホストの中から この参照クロックが同期をとる対象として選ばれます。 さらなる情報については、 "緩和ルールと prefer キーワード" のページを参照してください。

    mode int
        モード番号を指定します。 この番号は、デバイス特有のやり方で解釈されます。 例えば、モード番号は、ACTS ドライバでは ダイヤル用のプロトコルを選択しますが、parse ドライバでは デバイスのサブタイプを指定します。

    minpoll int

    maxpoll int
        これらのオプションは、参照クロックのメッセージに対するポーリングの 最小間隔および最大間隔を 2 の指数で表した秒数で指定します。 直接接続されている参照クロックの大部分では、 minpoll および maxpoll は デフォルトで 6 (64 秒) です。 モデムの参照クロックでは、 minpoll はデフォルトで 10 (17.1 秒) で、 maxpoll はデフォルトで 14 (4.5 時間) です。 とりうる範囲は、4 (16 秒) から 17 (36.4 時間) までです。

fudge
    127.127.t.u [time1 sec] [time2 sec] [stratum int] [refid string] [mode int] [flag1 0 | 1] [flag2 0 | 1] [flag3 0 | 1] [flag4 0 | 1] このコマンドは、参照クロックを特殊な方法で設定するのに使用できます。 このコマンドは、 ドライバを設定するコマンドである server コマンドの直後に置かれる必要があります。 実行中に ntpdc(8) プログラムを使用して、これと同じことができるということに注意してください。 オプションは、次のように解釈されます:

    time1 sec
        ドライバが生成する時間のオフセットに追加される、秒単位で、固定小数点の 10 進数の定数を指定します。 この定数は、例えば正確な PPS 信号のような外部の標準時間に 合わせるために、特定の時計のわずかの時間オフセットを調節する 補正用定数として使われます。 また、この定数は、シリアルポートの遅延、 オペレーティングシステムの遅延や、ケーブルの長さの違い、 受信機内部の遅延に起因する、システム的な誤差や バイアスを補正する方法も提供します。 指定されたオフセット値は、伝播遅延に加えて、 他の手段、例えば内部ディップスイッチで提供されるものです。 個別のシステムやドライバに対する補正は使用できますが、 大まかな補正に関しては、ドライバのドキュメントページに 記載されています。 注意: 2個以上のラジオ時計や PPS 信号がサポートされているときの 校正を円滑に行なうために、特別の校正機能が提供されています。 その他のオプション のページで説明している enable コマンドの引数の形式を取り、 "参照クロックドライバ" のページに記載されるように動作します。

    time2 secs
        秒単位の、固定小数点 10 進数を指定します。 これは、ドライバ依存の方法で解釈されます。 " 参照クロック用ドライバ " ページの各ドライバの説明を参照してください。

    stratum int
        ドライバに割り当てられた階層番号を指定します。 この番号は、0 から 15 までの整数値です。 この番号は、最初にドライバ自身が割り当てていた 階層番号 (通常は 0) を上書きします。

    refid string
        1 文字から 4 文字までの ASCII 文字列を指定します。 この文字列は、ドライバが使用する参照識別子を定義しています。 この文字列は、最初にドライバ自身が割り当てていた、 デフォルトの識別子を上書きします。

    mode int
        モード番号を指定します。 この番号は、デバイスごとに固有のやり方で解釈されます。 例えば、ACTS ドライバではダイヤル用プロトコルを選択しますが、 parse ドライバではデバイスのサブタイプを選択します。

    flag1 0 | 1

    flag2 0 | 1

    flag3 0 | 1

    flag4 0 | 1
        これら 4 つのフラグは時計ドライバをカスタマイズするのに 使用されます。 これらの値の解釈や、すべてが使用されるか否かについては、 個々の時計ドライバに依存した機能です。 しかし慣習としては、 flag4 は、モニタ対象データを、 filegen コマンドで設定した clockstats ファイルへ記録 する機能を有効にするために使用します。 filegen コマンドに関するさらなる情報については、 モニタ機能のオプション セクションを参照してください。

その他のオプション

broadcastdelay seconds
    ブロードキャストおよびマルチキャストモードでは、ローカルサーバと リモートサーバとの間の遅延を決定するための特殊な補正が必要です。 通常、これは、クライアントサーバ間の最初の プロトコルのやりとりで自動的に行われています。 場合によっては、例えばネットワークやサーバのアクセス制御によって、 この補正の手続きが失敗してしまうこともあります。 このコマンドは、こうした状況の時に使用されるデフォルトの遅延を 指定します。 典型的には (イーサネットでは)、 0.003 から 0.007 秒までが適切です。 このコマンドを使用しない場合のデフォルト値は、0.004 秒です。

driftfile driftfile
    このコマンドは、ローカルの時計発振子の周波数オフセットを記録するため のファイル名を指定します。 このファイルが存在すると、起動時に読み込まれ、 初期周波数オフセットを指定するのに使用されます。 その後 1 時間に 1 度、 デーモンはその時点での周波数オフセットを計算し、 その値でファイルを更新します。 ファイルが存在しないか、このコマンドが与えられていない場合、 初期周波数オフセットは 0 と仮定されます。 この場合、周波数が安定し、 残留時間誤差が収まるのに数時間かかる場合があります。

    ファイルのフォーマットは、浮動小数点数 1 個だけを含む 1 行から なります。 この浮動小数点数は、100 万分の 1 (PPM) 単位での周波数オフセット値を 記録しています。 このファイルの更新は、 最初に現在の変動値を一時ファイルに書き込み、それから ファイルの名前を変更して古いファイルと置換えることにより行ないます。 このことは、 ntpd(8) が、ドリフトファイルのあるディレクトリに対し書き込み権を持っている 必要があることと、シンボリックであろうとなかろうと、 ファイルシステムリンクは避けるべきことを意味しています。

enable
    [ auth | bclient | calibrate | kernel | monitor | ntp | stats]

disable
    [ auth | bclient | calibrate | kernel | monitor | ntp | stats] さまざまなサーバオプションを有効にしたり無効にしたりする 手段を提供します。 指定されていないフラグには影響がありません。 これらのフラグは全て ntpdc(8) ユーティリティプログラムを使用してリモートに制御できるという ことに注意してください。 フラグの説明は次の通りです。

    bclient
        有効の場合、 broadcastclient コマンドと同一の効果があります。 デフォルトでは、このフラグは disable です。

    calibrate
        校正機能を有効にします。 この機能は、クロックドライバそれぞれの time1 の値を補正し、現在選択している時刻源または、カーネル学習信号と 同じオフセットを示すようにします。 さらなる情報については、 "参照クロックドライバ" のページを参照してください。 このフラグのデフォルトは disable です。

    kernel
        adjtime(2) システムコールに対し、正確に計時できる カーネルサポートが実装されていれば、これを有効にします。 もともと、NTP デーモンが コンパイルされるときに、このルーチンがサポートされるかどうかは 自動的に検出されるので、ユーザがこのフラグのことを気にする 必要はありません。 このフラグは本来、カーネルの開発中にこのサポートを 無効にできるようにするために提供されていました。 このフラグのデフォルトは、 enable です。

    monitor
        モニタ用機能を有効にします。 さらなる情報が必要なら、 ntpdc(8) プログラムの monlist コマンドの項を参照してください。 このフラグのデフォルトは、 enable です。

    ntp サーバが、NTP を用いてローカル時計を調整できるようにします。 無効になっている場合は、 ローカル時計は、内蔵の時刻と周波数オフセットで 自分勝手に動きます。 このフラグが有用なのは、 ローカル時計が別のデバイスやプロトコルで制御され、 他のクライアント用に同期を提供するためだけに NTP を使う場合です。 この場合、ローカル時計のドライバをこの機能や、 さらに、誤差予測や閏秒表示子 (leap-indicators) を提供する ために使用できます。 さらなる情報が必要なら、 "参照時間ドライバ" のページを参照してください。 このフラグのデフォルトは、 enable です。

    stats
        統計機能を有効にします。 さらなる情報が必要なら、 "モニタ用オプション" のセクションを参照してください。 このフラグのデフォルトは、 enable です。

logconfig configkeyword
    このコマンドは、システムの syslog(3) 機能や、その代用の logfile ログファイルに書かれる出力の量と種類を制御します。 デフォルトでは、すべての出力がオンです。 configkeyword キーワードはすべて、 ‘=’, ‘+’, ‘-’ を先頭につけることが できます。 ここで、 ‘=’ は、 syslog(3) の優先度マスクを設定し、 ‘+’ はメッセージを追加し、 ‘-’ はメッセージを削除します。 syslog(3) メッセージは、4 つのクラス ( clock, peer, sys, sync) で制御できます。 これらのクラスの内部で、 4 種のメッセージが制御できます。 情報メッセージ (info) は設定情報を制御します。 イベントメッセージ (events) はイベントのロギング (到達可能性、同期、アラーム状況) を制御します。 統計情報の出力は、 statistics キーワードを使用して制御されます。 最後のメッセージグループは、ステータスメッセージです。 これは主に、同期のステータスを表します。 設定キーワードはメッセージクラスとイベントクラスとを そのまま結びつけた形をしています。 プレフィクス all は、メッセージクラスの代わりに使用できます。 メッセージクラスの後ろに、キーワード all を続けることができ、 それによって、それぞれのメッセージクラスのメッセージをすべて 有効 / 無効にできます。 このため、最低限のログの設定は次のようになるでしょう:

        logconfig=syncstatus +sysevents

    この設定では、単に ntpd(8) の同期のステータスと重要なシステムイベントをリストします。 単純な参照サーバに対しては、 次のような最低限のメッセージの設定を行うと有益でしょう:

        logconfig=syncall +clockall

    この設定では、時計の情報すべてと同期情報をリストします。 他のイベントや通信相手に関するメッセージ、そしてシステムの イベントなどは抑止されます。

logfile logfile
    このコマンドは、デフォルトのシステムの syslog(3) 機能の代わりに使用される、代用のログファイルの在処を指定します。

setvar variable [default]
    このコマンドは、システム変数を追加します。 これらの変数は、アクセスポリシなどの情報を追加して 配布するために使用できます。 name=value の形式の変数に default キーワードが続いている場合、 その変数は、デフォルトのシステム変数の一部として リストされるようになります ( ntpq(8) rv コマンドを参照。) こうした変数の追加は、情報を与える目的だけを果たします。 リストされるということ以外に、プロトコルに関係しません。 既知のプロトコル変数は常に、 setvar の機構により定義されたいかなる変数よりも優先されます。 同じグループのすべての変数名を含んだ 3 つの特別な変数があります。 sys_var_list は、すべてのシステム変数名を保持しています。 peer_var_list は、すべての通信相手の変数名を保持しています。 そして、 clock_var_list は、参照クロックの変数名を保持しています。

tinker
    [ step step | panic panic | dispersion dispersion | stepout stepout | minpoll minpoll | allan allan | huffpuff huffpuff] このコマンドは、極めて例外的な状況下で、 いくつかのシステム変数を変更するために使用します。 設定ファイル中で、 このコマンドは、他の設定オプションのどれよりも前に置く必要があります。 これらの変数のデフォルト値は、 ネットワーク速度と信頼性の予測値について、 幅広い範囲で、注意深く最適化させてあります。 一般に、これら変数は簡単に予測できない込み入った方法で 相互作用を及ぼし合います。 また、変数の組合せによっては、とんでもない動作になってしまう 可能性があります。 ごくまれにですが、デフォルトの値を変更する必要がある場合が ありますが、いずれにしても、 つまみを回したいという誘惑に抵抗できない輩はいるもので、 このコマンドはそういう人達のためのものです。 特に強調しておきますが、このつまみを回すのは各自の勝手で やることで、サポートグループに一切の助けを求めることはできません。

    全ての引数は、浮動小数点数の秒、または秒分の秒です。 minpoll 引数は、秒を2のベキ整数で表したものです。 この変数は次のように動作します。

    step step
        この引数は、時刻設定の閾値 (通常 0.128秒) の 新しい値になります。 0 に設定した場合、時刻設定 (step) による補正は生じません。 一般には、時刻設定を避ける目的のためには、時刻設定閾値は 触らずに、 -x コマンド行オプションを使うのが普通です。

    panic panic
        この引数は、パニック閾値 (通常 1000 秒) の新しい値になります。 0 に設定した場合、パニック健全性チェックは無効にされ、 時刻オフセットとして全ての値が受理されます。

    dispersion dispersion
        この引数は、分散値増加率 (通常、.000015) の新しい値になります。

    stepout stepout
        この引数は、ワッチドッグタイムアウト (通常 900 秒) の新しい値になります。

    minpoll minpoll
        この引数は、マルチキャストクライアントアソシエーション、 メニーキャストクライアントアソシエーション、 対称パッシブモードアソシエーションを設定するときに用いる 最小ポーリング間隔の新しい値になります。 デフォルトの値は 6 (64秒) で、下限は 4 (16秒) です。

    allan allan
        この引数は、最小 Allan 遮断値の新しい値になります。 この値は PLL/FLL 時刻学習アルゴリズムのパラメータの 1 つです。 デフォルトは 1024 秒で、この値が下限でもあります。

    huffpuff huffpuff
        この引数は現在実験的に提供される スーハーフィルタ (huff-n'-puff filter) のスパンの新しい値になります。 この値は、このアルゴリズムが最小遅延を求める時間間隔のうち 最も新しいものを決定します。 下限は 900 秒 (15分) ですが、よりまともな値は 7200 (2時間) です。 このコマンドが与えられるまでこのフィルタは有効になっていませんので、 デフォルトはありません。

trap host_address
    [port port_number] [interface interface_address] このコマンドは、指定したホストアドレス、ポート番号に トラップ受信器を設定します。 このトラップ受信器は、指定したローカルインタフェースアドレスを 持つメッセージを送信します。 ポート番号を指定しない場合、値 18447 が使用されます。 インタフェースアドレスを指定しない場合、 そのメッセージが送信されたローカルインタフェースを ソースアドレスに持つメッセージが送信されます。 マルチホームを持つホストでは、経路情報の 変更にともない、時により使用するインタフェースが変わることに 注意してください。

    トラップ受信器はイベントメッセージや、 サーバからのその他の情報を、ログファイルにログを取ります。 このような監視プログラムは、自分自身のトラップを動的に要求することも ありますが、トラップ受信器の設定により、サーバの起動後に 失われるメッセージはないことは保証されます。

関連ファイル
/etc/ntp.conf
    デフォルトの設定ファイル名
ntp.keys
    MD5 秘密鍵
ntpkey
    RSA 秘密鍵
ntpkey_host
    RSA 公開鍵
ntp_dh
    Diffie-Hellman 合意パラメータ

関連項目
ntpd(8), ntpdc(8), ntpq(8)

提供されているマニュアルページに加えて、理解しやすいドキュメントが world wide web 上で入手可能です。 http://www.ntp.org/ から入手できます。 このドキュメントのスナップショットが HTML フォーマットで /usr/share/doc/ntp ディレクトリ内にあります。 David L. Mills, Network Time Protocol (Version 3), RFC1305.

バグ
構文チェックに好き嫌いはありません。 なんでも喜んで食べます。 オプションやモードの、ばかげた組合せやお笑いの組合せさえ 検出しないこともあります。

ntpkey_host は実際にはデジタル認証です。 セキュリティディレクトリサービスが幅広く利用可能に なった際には、そこから取得すべきです。