22.12. NTP

寄稿: Hukins Tom [FAMILY Given].

22.12.1. 概説

時間の経過とともに、コンピュータの時計はずれてしまいがちです。 時間が経つと、コンピュータの時計は正確でなくなってゆきます。 NTP (Network Time Protocol) は時計が正確であることを保証する方法の一つです。

インターネットサービスの多くは、 コンピュータの時計が正確であることに依存しているか、 あるいは多くを負っています。 たとえば web サーバ は、 あるファイルがある時刻以降に修正されていたらそのファイルを送ってほしいという要求を受け取るかもしれません。 cron(8) のようなサービスは所定の時間にコマンドを実行します。 時計が正確でない場合、 これらのコマンドは期待したとおりには実行されないかもしれません。

FreeBSD は ntpd(8) NTP サーバを搭載しています。これは、 マシンの時計を合わせるために他の NTP サーバに問い合わせをしたり、 他のマシンに対して時刻を報じるために使用できます。

22.12.2. 適切な NTP サーバの選択

時刻を同期するために利用する NTP サーバを、 一つ以上見つける必要があります。 ネットワーク管理者、または ISP はこの目的のために NTP サーバを設定しているかもしれません ― 本当にそうなのか確かめるためにドキュメントを確認してください。 あなたの近くの NTP サーバを探せる 公にアクセス可能な NTP サーバのリスト があります。 どのサーバを選択するとしても、そのサーバの運営ポリシを理解し、 要求されているなら利用許可を求めることを忘れないでください。

使用しているサーバのうちのどれかが到達不能になるか、 その時計の信頼性が低い場合、無関係の NTP サーバをいくつか選択するとよいでしょう。 ntpd(8) は他のサーバから受け取った応答を賢く利用します ― 信頼できないサーバより信頼できるサーバを重視します。

22.12.3. マシンの設定

22.12.3.1. 基本設定

マシンが起動するときだけ時計を同期させたい場合は ntpdate(8) が使えます。頻繁に再起動され、 たまに同期すれば十分なデスクトップマシンには適切かもしれません。 しかしほとんどのマシンでは ntpd(8) を実行するべきです。

ntpd(8) を動かしているマシンでも、起動時に ntpdate(8) を使用するのはよい考えです。 ntpd(8) プログラムは時計を徐々に変更します。しかし ntpdate(8) は正しい時刻と現在設定されているマシンの時刻がどんなに離れていようとも時計を設定します。

起動時に ntpdate(8) を有効にするためには、 ntpdate_enable="YES"/etc/rc.conf に追加してください。 さらに、同期したいすべてのサーバおよび、ntpdate(8) に渡すあらゆるフラグを ntpdate_flags に指定する必要があるでしょう。

22.12.3.2. 一般設定

NTP は ntp.conf(5) に記述された書式の /etc/ntp.conf ファイルによって設定されます。 簡単な例を以下に示します。

server ntplocal.example.com prefer
server timeserver.example.org
server ntp2a.example.net

driftfile /var/db/ntp.drift

server オプションは、 使用するサーバを一行に一つずつ指定します。サーバが上記の ntplocal.example.com のように prefer 引数とともに指定された場合、 このサーバは他のサーバより優先されます。 優先されたサーバからの応答は、 他のサーバの応答と著しく異なる場合は破棄されますが、 そうでなければ他の応答を考慮することなく使用されます。 prefer 引数は、通常、 特別な時間モニタハードウェアを備えているような非常に正確であるとされている NTP サーバに対して使用されます。

driftfile オプションはシステム時計の周波数オフセットを格納するために使用するファイルを指定します。 ntpd(8) プログラムは、 時計の自然変動を自動的に補正するためにこれを用います。 これにより、一定時間外部の時刻ソースから切り離されたとしても、 十分正確な時刻を維持することを可能にします。

driftfile オプションは、使用している NTP サーバから過去に受け取った応答に関する情報を格納するために、 どのファイルが使用されるか指定します。 このファイルは NTP に関する内部情報を含んでいます。 これは他のプロセスによって修正されてはいけません。

22.12.3.3. サーバへのアクセス制御

デフォルトでは NTP サーバはインターネット上のすべてのホストからアクセスが可能です。 /etc/ntp.conf 内で restrict オプションを指定することによって、 どのマシンがサーバにアクセスできるかを制御できるようにします。

NTP サーバにアクセスするマシンのすべてを拒否したいのなら、 以下の行を /etc/ntp.conf に追加してください。

restrict default ignore

あなたのネットワーク内のマシンにだけサーバに接続して時計を同期することを認めたいが、 それらからサーバに対して設定を行うのを許さず、 同期する端末としても利用されないようにしたいのなら、 以下を加えてください。

restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap

192.168.1.0 をあなたのネットワークの IP アドレスに 255.255.255.0 をあなたのネットワークのネットマスクに置き換えてください。

/etc/ntp.conf には複数の restrict オプションを置けます。 詳細に付いては ntp.conf(5)Access Control Support サブセクションを参照してください。

22.12.4. NTP サーバの実行

NTP サーバが起動時に実行されることを保証するために、 xntpd_enable="YES"/etc/rc.conf に加えてください。 ntpd(8) にフラグを追加したい場合は /etc/rc.conf 内の xntpd_flags パラメータを編集してください。

マシンを再起動することなくサーバを実行したいときは、 /etc/rc.conf 内の xntpd_flags で追加されたパラメータをすべて指定して ntpd を実行してください。以下に例を示します。

# ntpd -p /var/run/ntpd.pid

注記:

FreeBSD 5.X では /etc/rc.conf 内のさまざまなオプションの名前が変わりました。 したがって、上記の xntpd に関するオプションは ntpd に置き換えてください。

22.12.5. 一時的なインターネット接続で ntpd を使用する

ntpd(8) プログラムは正しく機能するために、 インターネットへの常時接続を必要としません。しかしながら、 オンデマンドでダイアルアップされるように設定された一時的な接続の場合、 NTP トラフィックがダイアルを引き起こしたり、 接続を維持し続けるようなことを避けるようにした方がよいでしょう。 ユーザ PPP を使用している場合、以下の例のように /etc/ppp/ppp.conf 内で filter ディレクティブが使用できます。

 set filter dial 0 deny udp src eq 123
 # Prevent NTP traffic from initiating dial out
 set filter dial 1 permit 0 0
 set filter alive 0 deny udp src eq 123
 # Prevent incoming NTP traffic from keeping the connection open
 set filter alive 1 deny udp dst eq 123
 # Prevent outgoing NTP traffic from keeping the connection open
 set filter alive 2 permit 0/0 0/0

詳細については ppp(8) 内の PACKET FILTERING セクション、および /usr/share/examples/ppp/ 内の例を参照してください。

注記:

小さい番号のポートをブロックするインターネットアクセスプロバイダでは、 応答があなたのマシンに到達しないので NTP がきちんと動作しない場合もあります。

22.12.6. さらなる情報源

NTP サーバに関する文書は HTML 形式で /usr/share/doc/ntp/ にあります。

本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。

FreeBSD に関する質問がある場合には、 ドキュメント を読んだ上で <questions@FreeBSD.org> まで (英語で) 連絡してください。

本文書に関する質問については、 <doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。