NTPサービスの使い方

大学院情報科学研究科 岡本 東
lfo@dais.is.tohoku.ac.jp
総合情報システム運用センター 曽根 秀昭
sone@tains.tohoku.ac.jp

1 NTPの役割

 ワークステーションやPCなどのコンピュータは内部に時計を持っており, OS がファイルのタイムスタンプを付ける場合や アプリケーションが時刻を知る必要がある場合はその時計を参照しています。 しかし,ほとんどの場合,その時計はあまり正確なものではなく, そのままにしておくと誤差が蓄積され,ずれた時刻を示すようになってしまいます。
 電子メールのヘッダの Date: フィールドなどにつく時刻も この時計を利用していますが,これが大幅にずれていると 「メールを出した時刻がメールを受け取った時刻よりも後である」 といったようなおかしなことになってしまうことがあります。
 また,複数のホストで NFS を用いてファイルを共有しているような場合, それぞれのコンピュータの時計がばらばらだと, 同じ時刻に作成されたファイルが,作成したコンピュータによって 古いファイルや未来のファイルになってしまうことになり, 使っているアプリケーションによっては不都合が生じてしまいます。
 そこで,ネットワークを利用して複数のホストの間で時刻合わせを 行う方法がいくつか考え出されました。 TAINS ではそのうちのひとつである NTP (Network Time Protocol) [1] を利用することをお勧めします。 xntp というフリーソフトウェアを用いると,この NTP による 時刻合わせを行うことができます。

2 NTPの仕組み

 時刻を正しく合わせるためには,どこかに基準となる正確な時計が必要です。 TAINS 上では ntp.tohoku.ac.jp と ntp2.tohoku.ac.jp というホストが 正確な時計を持っています。 これらは常に GPS 受信機から得た時刻に時計を合わせるようになっています。
 しかし,TAINS 上のすべてのホストがこれらに直接時刻を問い合わせたのでは ネットワークやコンピュータ自体に負荷がかかりすぎて, せっかくの正確さが失われてしまいます。
 そこで TAINS では,正確な時刻を知っているホストは時刻情報を ブロードキャストして,ほかのホストはそれを聞いて 時刻をあわせるようにしています。 ブロードキャストは,放送局のように,受け取る相手を特定しないで送り出すので, 一度にすべてのホストへ情報を伝えることができます。 ただし,ブロードキャストはルータで区切られた先のネットワークへ届きませんから, SuperTAINS や TAINS88 のサブネットのルータは, 幹線側から聞いた時刻情報をもとにサブネット側に時刻情報をブロードキャストする, という方法で TAINS 全体に時刻情報が伝播するようにしています。
 単純なプロトコルでこのような方法を用いると, ネットワークの伝達遅延による時刻のずれを生じてしまい, いくつものルータを介した先ではずれが蓄積されて大きなずれになってしまいます。 しかし,NTP は広範囲のネットワークで利用されることを前提に設計されており, ネットワークの伝達遅延も考慮されているため, 十分に正確な時刻情報を得ることが可能です。 NTP を利用しているホストでは, 内部時計はミリ秒より良い正確さを保つことが期待できます。
 NTP ではこのようなブロードキャストを用いた方法の他に, 特定のホスト (server) を指定してその時刻に合わせる方法や, 複数のホスト (peer) で相互に誤差を補整し合う方法を用いることもできます。

3 xntp のインストール

 ワークステーションなどで NTP を利用するためにはまず前述の xntp というフリーソフトウェアをインストールします (標準で入っている OS もあります)。
 現時点で最新のものは xntp3-5.90-export.tar.gz というパッケージです。 これは ftp://sakunami.gw.tohoku.ac.jp/network/ntp/ などから入手することができます。
 あとは,このパッケージを展開し, その中にある INSTALL というドキュメントに従ってください。 ほとんどの場合は,
    # ./configure
    # make
    # make install
で十分なはずです。 この場合は /usr/local/bin にすべてのバイナリが入ります。

4 NTP の設定

4.1 TAINSでの利用形態

 実際に NTP を利用するためには xntpd というデーモンを起動しますが, 利用形態によって設定が異なります。 利用形態は,どのようにして時刻情報を参照するか (知るか) によって 決まりますが,TAINSでは以下のルール (*1) が定められています。
(1) NTP (Network Time Protocol) により,センターが SuperTAINS 基幹ネットワークの FDDI ループ及び TAINS88 内に同報し,これを受信して利用するものとする。
(2) サブネットでは,(1) のネットワークに接続したルータが 中継するものとする。 その他,一つのサブネットでは2台までのネットワーク機器が最寄りの ATM ルータを参照することができるものとする。
(3) センターが運用するサーバと同等又はそれ以上の stratum の NTP サーバの部局における運用に当たっては,センターと協議し, その指示に従うものとする。

4.2 SuperTAINS FDDI 直結の場合

 SuperTAINS のルータが時刻情報をブロードキャストしているので それを聞いて時刻合わせを行うだけです。 具体的には xntpd -b というふうに -b オプションをつけて起動します。 設定ファイルは不要です。
 boot 時に自動的に起動するように /etc/rc.local 等に 以下のように書いておくといいでしょう。
    if [ -f /usr/local/bin/xntpd ]; then
        /usr/local/bin/xntpd -b
    fi

4.3 TAINS88 直結の場合

 この場合も TAINS88 上に時刻情報がブロードキャストされているので, 同様に xntpd -b で起動します。

4.4 サブネットの場合

 SuperTAINS FDDI または TAINS88 につながっているルータが ブロードキャストを聞き,内側のネットワークにブロードキャストするように, ルータで設定します。 この場合に,サブネット内部のホストは 4.2 と同様に, ブロードキャストを受け取るだけで済みます。

4.4.1 ワークステーションを用いたルータの設定

 ワークステーションを用いたルータの場合には, /etc/ntp.conf というファイルに以下のように書きます。
    broadcastclient 外側のブロードキャストアドレス
    broadcast       内側のブロードキャストアドレス
 例えば,130.34.48.0/26 の SuperTAINS FDDI に直結した 130.34.206.64/26 の研究室内ネットワークのルータの場合は,
    broadcastclient 130.34.48.63
    broadcast       130.34.206.127
のように書きます。
 あとは,xntpd -c /etc/ntp.conf のように -c の後に設定ファイル名を指定して起動します。

4.4.2 Cisco社のルータの設定

 ルータとして専用ルータを用いている場合には, NTP 情報のブロードキャストを扱う機能がルータにあれば, 外側にブロードキャストされている NTP 情報を拾い内側に NTP 情報をブロードキャストすることができます。 Cisco 社のルータの場合には,configuration に以下の要領で設定を追加します。
  clock timezone jst 9
  ntp source     外側の I/F
  interface      外側の I/F
    ntp broadcast client
  interface      内側の I/F
    ntp broadcast version 3
 例えば,130.34.48.0/26(Fddi0)の SuperTAINS FDDI に直結した 130.34.206.64/26(Ethernet0)と 130.34.206.128/26(Ethernet1)の 部局内ネットワークのルータの場合は,
  clock timezone jst 9
  ntp source     Fddi0
  interface      Fddi0
    ntp broadcast client
  interface      Ethernet0
    ntp broadcast version 3
  interface      Ethernet1
    ntp broadcast version 3
をルータの configuration に追加します。

4.4.3 サブネット内のホストの設定

 ルータが以上のように設定されれば,その他のホストはルータからの ブロードキャストを聞くだけでよいので xntpd -b で起動します。
 すべてのホストの /etc/rc.local 等に以下のように書いておき, ルータだけ /etc/ntp.conf を用意するようにすると便利でしょう。
    if [ -f /usr/local/bin/xntpd ]; then
        if [ -f /etc/ntp.conf ]; then
            /usr/local/bin/xntpd -c /etc/ntp.conf
        else
            /usr/local/bin/xntpd -b
        fi
    fi

4.4.4 ルータが NTP に対応できない場合の設定

 サブネットのルータに xntp をインストールできない場合は, サブネット内部の1〜2台のホストだけが最寄りのATMルータを サーバとして直接時刻を聞いて,内部にブロードキャストするように するのがよいでしょう。そのホストの設定は以下のようにします。
    server    サーバのATMルータのアドレス
    broadcast 内側のブロードキャストアドレス
 どのATMルータを指定すればよいかわからない場合は, 運用係<tains@tains.tohoku.ac.jp> までお問い合わせください。
 他のホストはこのホストからの ブロードキャストを聞くだけでよいので,以上の説明と同様に xntpd -b で起動します。

4.5 その他

 いくつかの OS では xntpd を起動する前に下準備が必要です。
 例えば SunOS ではハードウェアで持っている時計を無効にしてやらなければ なりません。 これは xntp パッケージに入っている tickadj コマンドを使って行うことができます。 以下のようにして xntpd を起動する前に tickadj を実行するとよいでしょう。
    if [ -f /usr/local/bin/tickadj ]; then
        /usr/local/bin/tickadj -Asq;
    fi
    if [ -f /usr/local/bin/xntpd ]; then
        if [ -f /etc/ntp.conf ]; then
            /usr/local/bin/xntpd -c /etc/ntp.conf
        else
            /usr/local/bin/xntpd -b
        fi
    fi
詳しいことは xntp パッケージに入っているドキュメントを ご覧ください。
 そのほか,不明の点があれば,NTP 運用担当の <ntp@tohoku.ac.jp> までお問い合わせください。

参考文献

[1] David L. Mills, RFC1305 ``Network Time Protocol (Version 3)'', 1992.

[注釈]
*1 総合情報システムの利用における技術的条件に関する申し合わせ事項, 平成9年1月27日


www-admin@tohoku.ac.jp
pub-com@tohoku.ac.jp