2001年6月18日 改定

ネットワークタイム(ntp)サーバ構築

意外と気にしていない管理者が多いのが、サーバ間の時間の同期です。しかし時間を各マシン間で同期させることは重要で、メールにおけるログ情報や問題発生時のsyslogの解析、クラッカーからの攻撃の記録などにおいて、サーバ間でシステム時間を同一にしておかないと解析が困難になったり、バックアップデータの不整合が生じてしまいます。
インターネットでは以前から時間をマシン間で同期させる技術としてntp(Network Time Protocol)という技術が用意されており、全世界に散らばったntpサーバを利用することで、自分のサイトのマシンの時間をntpによって自動的に調節することが可能になっています。ntpサーバを自分のサイトに構築すれば、各クライアントからもこのサーバを使って同一のシステム時間に調整することが簡単にできますし、構築も左程、難しくないので、構築を推奨するサーバ機能の一つです。

1.ntpの仕組み

ntpは全世界に点在するpublic NTP(stratum 1)サーバが、何らかの仕組み(衛星やラジオ、原子時計等)で世界標準時にマシンの時間を合わせています。さらにその配下のsecondary NTPサーバが存在します。
ユーザはこれらpublicまたはsecondary(stratum 2)サーバの時間を使って、自分のサイトに容易にntpサーバを構築できるようになっています。
ユーザが構築したntpサーバはpublicまたはsecondaryサーバとパケットをやり取りして、ネットワーク的な遅延を加味しながら、最終的には数10mm/sec以内の誤差になるようにプログラムの設計がされています。
国内では近年までは福岡大学のntpサーバがpublicサーバして有名でしたが、2001年より mfeed (http://www.jst.mfeed.ad.jp/ )によって日本標準時(JST)がStrutam2として提供されましたので、一般のサイトではプロパイダがNTPサーバを用意していない場合には、このサーバを指定すると良いでしょう。

2.設定ファイル

ntpサーバを構築するには、親となるntpサーバを知らせてやる必要があります。この為の設定は、 /etc/ntp.con ファイルに次のように設定します
#
server xxxx.xxx.xxx.xxx   (最寄のプロパイダのNTPサーバのIPアドレス)
server 210.173.160.27   (mfeedのntp1サーバのIPアドレス)
server 210.173.160.57   (mfeedのntp2サーバのIPアドレス)
  

3.ntpサーバの構築

FreeBSDの場合、

標準的なインストールでntpサーバである「xntpd」がインストールされている筈です。/etc/defaults/rc.conf(R3.0より前のバージョンでは/etc/rc.conf)の中の記述で、
        :
xntpd_enable="NO" # Run ntpd Network Time Protocol (or NO).
xntpd_program="ntpd" # path to ntpd, if you want a different one.
xntpd_flags="-p /var/run/ntpd.pid"
        :
という記述がある筈なので、”xntpd_enable”を「YES」として再起動することでntpサーバが実行されます。

Linuxの場合

利用するディストリビューションによって違いますが例えばTurboLinux6.0ワークステーションではCD-ROMの中にxntpdのパッケージが見当たりません。しかし、TurboLinux6.1 Serverのパッケージの中にあるntp serverのパッケージがそのまま利用できるようです。
どうしてもパッケージが見当たらない場合にはソースファイルを http://www.eecis.udel.edu/~ntp/ から入手(2000/9/26現在、xntp3-5.93.tar.gz が最新)して、
 # tar zxvf xntp3-5.93.tar.gz
 # cd xntp3-5.93
 # ./configure
 # make
 # make install
で、/usr/local/binまたは/usr/local/sbinに各種のプログラムがインストールされます。

起動時に自動的に実行するようにするために、 /etc/rc.d/init.d/xntpd ファイルを次のような内容で作成します。
#!/bin/sh
echo -n "xntpd start."
/usr/local/bin/xntpd -l /var/log/xntpd
作成後、以下のコマンドを実行します。
 # chmod 0755 /etc/rc.d/init.d/xntpd
 # ln -s /etc/rc.d/init.d/xntpd /etc/rc.d/rc3.d/S81xntpd
 # ln -s /etc/rc.d/init.d/xntpd /etc/rc.d/rc5.d/S81xntpd
これで、次回の起動からntpサーバが立ち上がるはずです。

4.ntpサーバ稼動の確認

ntpサーバが起動したなら、
 # ps ax | grep xntpd
を実行して、xntpdのプロセスが存在するか確認してください。また
 # ntpq
 > peer
  remote   refid   st   t   when   poll   reach   delay   offset  disp
 ===================================================================
 host    host    3   l   19     64    377    0.00   0.019   10.01
 >quit
のように最寄のサーバからのoffsetが返ってくれば大丈夫です。