Home Update クッキー及びWeb ビーコンについて



NTPサーバーによる時刻同期

NTPサーバーの概要

 ここでは、ネットワーク上のサーバー及びクライアントマシンの時刻同期をとるためのプロトコルであるNTP(Network Time Protocol )について解説していきます。PCの時刻はマザーボード上のリアルタイムクロック(RTC)によって時間が表示されていますが、この時間はあまり正確ではなく、毎日少しづつ時間が狂っていきます(電池の消耗度にもよりますが、年間約10分程度)。NTPサーバーは、タイムサーバーに接続されたラジオ・クロックや原子時計から時刻を取得し、UTC (協定世界時)に同期させることができます。PCの時刻が狂っていると、メールの送受信時刻が狂ったり、こまめにとっているログの取得時間なども狂ってくることになります。Linuxでは標準でNTPサーバーが付属しているので是非、活用して時刻同期を行いましょう。




■NTPサーバーのインストール

$ su -
# rpm -ivh ntp-4.1.2.0.rc1.2.i386.rpm

■自動起動の設定


ランレベル3と5でntpd が自動起動するように設定します。

# chkconfig --level 35 ntpd on
# chkconfig --list ntpd

ntpd 0:オフ 1:オフ 2:オフ 3:オン4:オフ 5:オン6:オフ





■/etc/ntp.confの編集

 それでは、/etc/ntp.conf を開いて環境に合わせて編集していきます。「server 127.127.1.0」はNTPサーバーと同期化できなかった場合には、リアルタイムクロック(RTC)を使用するという意味です。「fudge 127.127.1.0 stratum 10」では、Stratum(以下後述)を10と設定することでRTCの優先順位をさげていることを示しています。以降で、上位NTPサーバーを追加していくので「#」をつけてコメントアウトしてしまっても構わないです。

#server 127.127.1.0 # local clock
#fudge 127.127.1.0 stratum 10

 次に上位NTPサーバーを追加していきます。NTPは階層構造になっており、最上位の階層に位置するNTPサーバーをStratum-1(ストレータム1)といい、日本では福岡大学に公開NTPサーバーが2台設置してあります。また、Stratum-2(ストレータム2)以下は最終的には最上位(Stratum-1)のNTPサーバーと同期するようになっており、公開NTPサーバーとしては、独立行政法人通信総合研究所、NTT、IIJ等が共同研究の一環で運営しているものが3台あります。以下にNTPサーバーを記しましたのでいずれかのNTPを利用してください。また、自分が加入しているプロバイダが公開NTPを提供していることもあるので、プロバイダのHPなども参照してみてください。


◎日本の代表的な公開NTPサーバー

Stratum ホスト名 IPアドレス
Stratum-1 clock.nc.fukuoka-u.ac.jp 133.100.9.2
Stratum-1 clock.tl.fukuoka-u.ac.jp 133.100.11.8
Stratum-2 ntp1.jst.mfeed.ad.jp 210.173.160.27
Stratum-2 ntp2.jst.mfeed.ad.jp 210.173.160.57
Stratum-2 ntp3.jst.mfeed.ad.jp 210.173.160.87

 ここでは、福岡大学のNTPサーバーを利用していくことにします。「# --- OUR TIMESERVERS -〜」の箇所に以下の4行を追記します。server ステートメントは利用する公開NTPサーバーのアドレスを記述します。また、restrictでは、自分のPCへのアクセスを許可するIPアドレスを指定します。notrust は時刻の問い合わせ拒否、nomodify は変更要求の拒否、notrap はメッセージ・トラップ・サービスの拒否を表しています。

# --- OUR TIMESERVERS -----
# or remove the default restrict line
# Permit time synchronization with our time source, but do not
# permit the source to query or modify the service on this system.

# restrict mytrustedtimeserverip mask 255.255.255.255 nomodify notrap noquery
# server mytrustedtimeserverip
restrict 133.100.9.2 mask 255.255.255.255 notrust nomodify notrap
restrict 133.100.11.8 mask 255.255.255.255 notrust nomodify notrap
server 133.100.9.2
server 133.100.11.8


 同様に、自宅内のネットワーク(クライアントマシン)からも時刻同期の要求を許可する記述をしてあげる必要があります。

# -- CLIENT NETWORK -------
 中略
restrict 172.16.50.0 mask 255.255.255.224 notrust nomodify notrap
restrict 172.16.51.0 mask 255.255.255.240 notrust nomodify notrap


 「driftfile /etc/ntp/drift」は、内部時計と実際の時間とのズレを記録するファイルのパスを指定しています。

driftfile /etc/ntp/drift




■NTPサーバーの再起動

 以上の設定を終えたら、サーバーを再起動して設定を有効にします。

# /etc/init.d/ntpd restart
ntpdを停止中: [ OK ]
ntpdを起動中: [ OK ]


■NTPの動作確認

 それでは、上記で設定したNTPサーバーにきちんと接続できているかどうかを「ntpq -p」コマンドを使用して確認します。アスタリスク "*" が左端に表示されれば、それが現在参照中のNTPサーバーであることを表しています。以下の出力結果の意味については下記表を参照してください。

# ntpq -p
     remote           refid    st t when poll reach   delay   offset  jitter
============================================================================
*clock.nc.fukuok .GPS.          1 u   62  128  367   39.471  -11.038   1.311
+clock.tl.fukuok .GPS.          1 u   63  128  377   39.356  -11.571   0.388

 なお、ntp -p 実行時に、No association ID's returned と表示された場合は、NTPサーバーとの同期がとれていません。/etc/ntp.conf の内容をもう一度よく確認してください。また、上位NTPサーバーにping を打って正常に通信できているかどうかチェックしてみてください。


◎ntpq -pの出力の意味
 "*" 参照同期中のサーバーを表している
 "+" クロック誤り検査に合格したサーバー
 "#" 参照同期中ではあるが、距離が遠いサーバー
 " " 左に何も表示されない場合(空欄)、サーバーを参照していない
 "x" クロック誤り検査に不合格となったサーバー
 ". " 参照リストから除外されたサーバー
 refid 上位NTPサーバーが参照しているホスト名 or IPアドレス
 st 上位NTPサーバーの階層
 t 階層のタイプ l:local、u:unicast、m:multicast、b:broadcast
 when 最後のパケットを受け取ってからの時間(秒)
 poll 問い合わせを行う間隔(秒)
 reach 到達可能性に関するレジスタ・データ(8進数)
 delay 推定遅延(ミリ秒)
 offset 偏差補償(ミリ秒)
 jitter RMS Jitterの平均値(ミリ秒)



■時刻の即時調整


 上記で設定したNTPは時間が即座に調整されるというわけではなく、システムに問題が発生しないように徐々に時間を調節していきます。けれども、UTCの時刻と内蔵時計の差があまりに狂っている場合は時間が調整されるまで時間がかかってしまいます。そこで、ntpdateコマンドを使用することで現在の時刻を即座に調整しておきます。書式は、「ntpdate "NTPサーバー名"」です。

# ntpdate clock.nc.fukuoka-u.ac.jp
13 Dec 03:06:36 ntpdate[4026]: adjust time server 133.100.9.2 offset -0.002717 sec


 なお、コマンド実行時はNTPサーバーを停止させておかないと「the NTP socket is in use, exiting」というエラーメッセージが表示されますのでNTPサーバーを一旦、停止させてから再度起動するようにしてください。

# ntpdate clock.nc.fukuoka-u.ac.jp
5 Jan 14:37:17 ntpdate[8613]: the NTP socket is in use, exiting

# /etc/init.d/ntpd stop
ntpdを停止中: [ OK ]

# ntpdate clock.nc.fukuoka-u.ac.jp
5 Jan 14:38:14 ntpdate[8633]: adjust time server 133.100.9.2 offset 0.012635 sec




■/etc/ntp/step-tickers

 また、/etc/ntp/step-tickersに公開NTPサーバーのホスト名を記述しておくことでシステム起動時に時刻調整を行った後で、NTPを起動するようになります。

# vi /etc/ntp/step-tickers
clock.nc.fukuoka-u.ac.jp


 以下のように編集したらNTPの再起動を行ってみてください。通常の再起動に加えて、「ntpd:時間サーバと同期中:」という操作が追加されました。

# /etc/init.d/ntpd restart
ntpdを停止中: [ OK ]
ntpd:時間サーバと同期中: [ OK ]
ntpdを起動中: [ OK ]




■LinuxクライアントをNTPサーバーと同期させる

 自宅内のLinuxクライアントを、自宅内のNTPサーバーと時刻同期させてみます。外部NTPサーバーを指定しても構いませんが、外部への余計なトラフィックを抑えるため、LAN内で解決させます。単に即時的にNTPサーバーと時刻同期を行うためには以下、コマンドを実行します。

# /usr/sbin/ntpdate 172.16.50.2
26 Apr 01:34:15 ntpdate[3979]: adjust time server 172.16.50.2 offset -0.000030 sec


 もし、定期的に時刻同期を行うのであれば、cron を用います。1日に1回、時刻同期を行うのであれば、/etc/cron.daily/ntp.cron として以下のように記述し、保存しておきます。

# vi /etc/cron.daily/ntp.cron

#!/bin/sh
/usr/sbin/ntpdate 172.16.50.2


 実行権も付与させておきます。

# chmod 755 /etc/cron.daily/ntp.cron




■リアルタイムクロック(RTC)との同期化

 マザーボード上のリアルタイムクロックとも時刻の同期を行っておきます。先頭の"hw"はハードウェアの略です。

# hwclock --systohc




■システムクロックの設定

 dateコマンドで時間を表示し、dateの後ろに数字を付け加えると時刻の設定を行うことができます。
数字は左から、「月 日 時 分 年」となっており、以下では2003年12月14日22時10分に設定しています。

# date
2003年 12月 13日 土曜日 04:13:25 JST
# date 1214221003




■タイムゾーンの設定

 いくら時刻を調整したとしてもタイムゾーンが正しく設定されていなければ、正しい時刻を表示してくれません。date コマンドを実行し、以下のように「JST」と表示されていればOK です。協定世界時の場合は、UTCと表示され、日本の時刻より9時間前の時間が表示されます(時差が9時間)。

# date
Thu Sep 2 23:20:42 JST 2004


 もし、上記コマンド実行時に、JST と表示されていない場合は時刻が日本に設定されていないので正しく設定しなおします。タイムゾーンを設定するには環境変数TZを以下のように指定します。

# export TZ=Asia/Tokyo


 環境変数TZをアンセットするにはunset コマンドを使用します。

# unset TZ


 タイムゾーンを設定する方法として、/etc/localtime ファイルを使用することもできます。実際に/etc/localtime を編集するのではなく、/usr/share/zoneinfo/ 以下にある各タイムゾーンファイルにシンボリックリンクを張っておきます。たとえば、東京に時刻を合わせる場合には、以下のようにします。なお、タイムゾーンが日本以外の場合で、指定すべきタイムゾーンがわからない場合は、tzselect コマンドを使って調べることができます。

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime




■Windows クライアントをNTPサーバ(Linux)と同期させる

 Windows クライアントをNTPサーバ(Linux)と同期させるには、Windows2000 標準で付属しているSNTP機能を使用します。Linux 上のNTPサーバが外部のNTPサーバに接続し、正しい時刻を取得後、LAN内のクライアントがLAN内に設置したNTPサーバ(Linux)に接続しにいくといった階層的な構造をとることとします。まず、コマンドプロンプトを開き、以下のようにコマンドを入力します。

C:\>net time /setsntp:172.16.50.2
コマンドは正常に終了しました。
 
#NTPサーバのIPアドレスを入力します


C:\>net time /querysntp
現在の SNTP 値: 172.16.50.2

コマンドは正常に終了しました。
#現在設定されているタイムサーバのIPアドレスが表示されます。

 上記コマンドを実行しても即座に正常な時刻に反映されるわけではありません。3分以上時刻が進んでいる場合は即座に修正されますが、3分以内の場合は動作しているプログラムへの支障が出る可能性を避けるためにシステムが徐々に修正していきます。なお、即座に結果を反映させたいという短気な方は、「管理ツール」→「サービス」からWindows Timeサービスを再起動させます。再起動後、タスクバー上のデジタル時計がすぐに反映されるようになります。一度、net time コマンドを実行後は、デフォルトで8時間に1回、時刻同期が行われます。



 なお、イベントログには、「W32Time」というサービス名でログが出力されます。「イベントビューア」→「システム」内にW32Time というイベントログをクリックして「プロパティ」を見てみると、以下図のように時刻のズレを何秒修正したかが表示されています。









TOPに戻る

Sponcerd Link


Search
 
Web サイト内
Rental Server

【レンタルサーバのXbit】 低価格・高品質のビジネスクオリティー。300メガ1,050円〜30分で サービススタート可能!


容量300MB、月額125円、高性能なサーバが日本最大級のバックボーンに直結。
さくらのレンタルサーバ



当サイトはLinux自宅サーバーの構築を目的としたサイトです。
当サイトに関するご意見、ご要望等は、こちらのメールアドレスよりお願いします。
Beginning | Introduction | Installation | Server |
Security | Tips | Guest Book | Related-Sites
Copyright©2003-2006 KORO All Rights Reserved.
総計:
今日:
昨日: