NTP 環境を構築する - NTP クライアントの設定 - Linux 編

SPECIAL

コンピュータの時刻を調節するのに利用する、NTP プロトコルのお話です。

ここでは、Linux で NTP サーバーを参照して時刻の自動調整を行う方法について記しています。


2-2: NTP クライアントの設定 - Linux 編

ntpd による同期

ntpd を使用する場合、クライアントもサーバも設定はほとんど変わりません。

違う点としては、/etc/ntp.conf へ書き込む NTP Server の情報に、NTP サーバを設定する で設定した NTP Server を指定するという点くらいです。あとは、ntpd を起動すれば完了です。

 

ただし、 ntpd を利用すると、同時に NTP サービスも開始されてしまいますので気をつけましょう。

不必要な 52/TCP,UDP パケットをパケットフィルターで遮断したり、"/etc/ntp.conf" に "restrict default igunore" と記載するなどして、不用意に NTP が利用されないようにしておくと良いでしょう。

"restrict" で指定した場合、必要な通信許可設定も合わせて行っておく必要があります。

restrict default ignore

restrict 127.0.0.1

restrict 192.168.1.1 mask 255.255.255.255 nomodify notrap noquery

このようにして、基本的には利用禁止、ローカル環境 (127.0.0.1) や NTP サーバー (ここでは 192.168.1.1) とのやり取りは可能というように設定することが出来る様子です。

 

ntpdate による同期

クライアント用途のコンピュータのように、使うたびに起動するような場合は、ntpdate コマンドを使って時刻を合わせるのが簡単です。

この ntpdate コマンドは ntpd をインストールすると付いてきますので、持っていない場合には 1-2: NTP サーバを設定する - Linux 編 で紹介したように、ntpd をインストールしましょう。

 

 

/usr/local/bin/ntpdate -b time.ez-net.jp

というように、-b オプションの後に続けて、問い合わせたい NTP Server を指定します。

するとすぐに指定された NTP Server へ時刻を問い合わせて設定してくれます。NTP Server は空白で区切って複数指定することができます。

よって、上記の time.asia.apple.com の部分を、自分で用意した NTP Server へ変更すれば、自前の NTP Server を使用することができるようになります。

 

これを /etc/rc.d/rc.local などの起動スクリプトへ記述しておけば、起動するたびごとに時刻が自動的に調節されるようになります。

 

定期的に ntpdate を実行する

常時稼動しているコンピュータの場合、rc.local に記載しておくだけではしっかりとした時間同期を行うことができません。

ntpdate を利用して継続して同期を維持するには、crond を使用して、稼動中にも定期的に ntpdate を自動実行させる必要があります。

ただし、crond による時刻同期を行う場合、急に時刻が変わるために各種アプリケーションが混乱して誤動作をする危険性があります。例えば午前 0 時に何か処理をするプログラムの場合、時刻のずれ具合と ntpdate のタイミングによっては、午前 0 時が 1 日に 2 度訪れてしまう可能性も考えられます。

ですので、長い時間起動していて時刻のずれが気になる場合は、冒頭に記した ntpd を利用するのが安全です。

 

ともあれ、以下では ntpdate を cron を用いて定期実行する方法について記しておこうと思います。

なお、以下のお話は Slackware 8 でのお話ですので、ディストリビューションによっては設定の仕方が違うかもしれませんので気をつけましょう。

 

まず、次のようにして root 用の crontab の編集を行います。

crontab -e root

 CentOS 5.4 の場合は、予め用意されている "/etc/crontab" をテキストエディタで編集すれば大丈夫のようです。

 

設定項目は MIN HOUR DAY MONTH DAYOFWEEK COMMAND の順番で並べられていますので、適切なタイミングで ntpdate を起動するようにします。

今回は12時間おきに実行されるようにしてみることにします。よって、次のような行になります。

0 0,12 * * * ntpdate -b time.ez-net.jp

これで毎日 0:00 と 12:00 に、自動的に ntpdate が実行されるようになります。

 

自動実行された際にその記録をとっておきたい場合があるかもしれません。

その場合は、たとえば次のようなスクリプトを作成して、このスクリプトを crond に実行してもらうようにします。

#!/bin/sh

 

NTPDATE=/usr/local/bin/ntpdate

 

SERVER=time.ez-net.jp

LOGFILE=/var/log/ntpdate.log

 

(${NTPDATE} -b ${SERVER} 2>&1) >> ${LOGFILE}

これで、LOGFILE で設定したファイルに ntpdate が返した結果が記録されます。

目次