Linux道場ネットワーク編
第5回NTP(network time protocol)について
はじめに
今回は、linuxコンピュータの時刻設定と「NTP」(network time protocol)、「NTP」に関連するコマンドについて取り上げます。「NTP」については、NTPサーバーの構築、設定ファイルについて解説します。
「ハードウェアクロック」と「システムクロック」について
コンピュータの時刻(時計)にはハードウェアクロック(ハードウェアが管理している時刻)とシステムクロック(linuxカーネルで管理している時刻)の2種類があります。
ハードウェアクロックはリアルタイムクロック(rtc (real time clock)とも呼ばれ、PCが起動していなくても常に動作し、システムクロックはコンピュータの起動時にハードウェアクロックを参照し、時刻設定が行われます。
起動後、ハードウェアクロックとシステムクロックは別々に動作します。(ハードウェアクロックとシステムクロックは同期していません。)
「時刻」に関係するコマンドについて
時刻を参照するには「date」コマンドを実行します。「date」コマンドではシステムクロックを参照し表示します。
図1は「date」コマンドを実行したときの画面です。
図1.「date」コマンド実行画面
システムクロックの変更を行う場合は「date」コマンドに、設定を行いたい時刻を引数(月/日/時/分/西暦)にして実行します。例えば1980年4月1日午後2時05分に変更する場合は、「date 040114051980」と入力します。
ハードウェアクロックを参照するには「hwclock」コマンドを実行します。図2は「hwclock」コマンドを実行したときの画面です。一番右側に表示された「-0.239894 seconds」ですがこれは、コマンド実行時時刻と画面に表示した時の時刻差を表しています。
図2.「hwclock」コマンド実行画面
「hwclock」コマンドのオプション「-w (--systohc)」で、ハードウェアクロックをシステムクロックの時刻と同期し、「-s (--hctosys)」で、システムクロックをハードウェアクロックの時刻と同期します。
「NTP」 ( Network Time Protocol )について
「NTP」 ( Network Time Protocol )とは、ネットワーク上の他のホストの時計(時刻)と自ホストのシステムクロックを同期させる為のプロトコルです。「ntpdate」(後述)コマンドを実行することで、自ホストのシステムクロックを他のホストのシステムクロックと同じにします。
Linuxコンピュータの時刻としてハードウェアクロックとシステムクロックがありますが、その時刻が必ずしも正確であるとは限らず稼働時間に応じて誤差が生じてきます。そのようなときに正しい時刻を取得、設定するためにNTPは利用されます。
NTP(サーバー)(タイムサーバー)は階層構造を持ち、最上位のNTP(サーバー)を基準として、ネットワーク上のホストの時刻が同期(同じ時刻を刻む)されます。この階層(構造)は「stratum」(stratumの意味は「層」)と呼ばれ、NTPの階層に応じてstratum1、stratum2…… のNTP(サーバー)と呼ばれます。階層はstratum1からstratum16まであり、階層ごとに上位階層のNTPを参照し、時刻の同期を行います。また最上位であるstratum1のNTP(サーバー)は原子時計(セシウム時計)やGPSの時刻を参照しています。尚、NTPの階層では原子時計(セシウム時計)やGPSをstratum0として扱っています。
(種類によって異なりますが原子時計は、何百年から何万年に1秒の誤差が発生するかしないかの精度です。)
図3はNTP階層構造の例です。
図3.NTP階層構造
NTPサーバーとの時刻の同期について
NTPサーバーと時刻の同期を行うには「ntpdate」モジュールが必要になります。今回、実際に導入を行うディストリビューションとして「Debian 2.6.18」を使用したときの例を示します。apt-getの設定(apt.confやsources.list)が正しく行われている事とインターネットへの接続ができる事を前提とします。最初に「apt-get update」と入力し、パッケージ情報ファイルを更新します。
次に「apt-get install ntpdate」と入力し、「ntpdate」の導入を行います。図4は「apt-get install ntpdate」を行ったときの画面です。
図4. 「apt-get install ntpdate」実行時の画面
NTPサーバーと同期を行うには「ntpdate NTPサーバー名(IPアドレス)」と入力し実行します。図5は実際にNTPサーバーとして「ntp.server」を指定して「ntpdate」コマンドを実行したときの画面です。
図5.「ntpdate」実行時の画面
図中にある「offset 76.801497sec」はNTPサーバーとの時刻の誤差を表しています。(xxx.xxx.xxx.xxxにはNTPサーバーのIPアドレスが表示されます。)
NTPサーバーの導入ついて
NTPサーバーの導入を行います。前提条件は「ntpdate」を導入したときと同じです。
「apt-get install ntp」と入力し、「ntp」の導入を行います。図6は「apt-get install ntp」を行ったときの画面です。
図6.「apt-get install ntp」実行時の画面
「apt-get install ntp」による導入が正しく行われると、NTPサーバーのプロセスとして「ntpd」が起動します。
図7.「ntpd」プロセス
但し、初期状態(未編集)で起動しているので一旦「ntpd」プロセスを終了し、設定ファイルの編集を行います。
(導入の環境がDebianで起動スクリプトの導入も行われている場合は「/etc/init.d/ntp stop」で終了できます。)
NTPサーバーの設定について
NTPサーバーの設定は「ntp.conf」ファイルで行います。(基本的にファイルの場所は「/etc/ntp.conf」になります。)
図8は未編集の「ntp.conf」です。(説明文(英文)は省いています。)
図8.ntp.conf(未編集)
表1は未編集の「ntp.conf」の各項目の意味についてです。
表1.ntp.confの各項目の意味
今回は図9のようにntp.confを設定しました。赤枠の「restrict default ignore」は、初期設定としてNTPサーバーとの時刻の同期、問い合わせへの応答等の全て行わないようにする記述です。(基本的には外部からの不正な問い合わせへの抑止等、セキュリティのことも考え、この記述を行います。)しかし、このままだと参照するNTPサーバーとの同期も行えないので緑枠内の記述で参照するNTPサーバーへの通信を許可しています。黄枠の記述でLAN(192.168.0.0)内のネットワークにあるホストからのみの問い合わせへの応答を許可しています。 (※参照するNTPサーバーについては、契約しているプロバイダ、または大学などの機関で公開しているNTPサーバーを記述してください。)
図9.ntp.conf(編集)
ntp.confファイル編集後、ntpを起動します。
設定したNTPサーバーの通信状態を確認します。確認には「ntpq -p」コマンドを実行します。
図10は「ntpq -p」コマンドを実行したときの画面です。
(※ntp起動後、すぐに同期を取らないため10〜15分後にコマンドを実行してください。)
図10.「ntpq -p」コマンド実行画面
表2は「ntpq -p」を実行したときの各項目の意味についてです。
表2.ntpq -p実行時の表示項目
「ntpq -p」時に「remote」に「*」印が表示されたサーバーを参照し、時刻を同期しています。
この時点でNTPサーバーとして動作しています。他のホストから「ntpdate 設定したホスト名(IPアドレス)」を実行し、時刻の同期を行えるか確認してください。
終わりに
次回はセキュリティの向上として、TCPWrappers(hosts.allow,hosts.deny)とSSHの鍵認証について取り上げます。
コラム執筆/森谷 仁
マイクロテクノロジー株式会社 管理本部 情報システム室
〒101-0021
東京都千代田区外神田5-1-2末広ビル
TEL 03-3833-8080