基本的に ntp の設定ファイルは以下の4種類である。(認証を必要とする場合のみ
keys ファイルが使われる。)
/etc/ntp.conf
/etc/ntp/step-tickers
/etc/ntp/drift
/etc/ntp/keys
なお、RedHatにはこの他に
ntpservers というファイルがあるが、これは初期設定用として
RedHat が用意したタイムサーバを定義したファイルである。
■ /etc/ntp.conf
ntp を設定する基本ファイルで、通常 /etc 以下に置く。このファイルではアクセス許可や上位階層サーバの指定、DRIFTファイルのパスの設定等を行う。後半部に認証を指定するルールがあり、key
をファイルで指定することができる。 なお、ntp.conf
では赤字部分の restrict 行にルールを記述し、#以下はコメントである。またグレー部分は解説なので設定ファイルには残さないこと。
# Prohibit general access to this service.
restrict default ignore ・・・接続のポリシーとして不可
ignore:指定したホストからのパケットを無視する
noquery:NTPのモード6と7のパケットを無視する
nomodify:設定を変更するNTPのモード6と7のパケットを無視する。情報請求は許可
notrust:通常の利用は許可する。時刻同期の情報源としては使用しない
restrict 127.0.0.1 ・・・接続許可アドレス
restrict 133.100.9.2 ( 福岡大タイムサーバ clock.nc.fukuoka-u.ac.jp )
# -- CLIENT NETWORK -------
# クライアントからの接続許可範囲を指定 (ローカル192.168.1.0/24)
restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
# --- OUR TIMESERVERS -----
# このマシンが時間を確認しに行くサーバー (複数指定する)
server 130.69.251.23 (東大タイムサーバ)
server 133.100.9.2 (福岡大タイムサーバ)
# --- NTP MULTICASTCLIENT ---
# multicastclient # listen on default 224.0.1.1
# restrict 224.0.1.1 mask 255.255.255.255 notrust nomodify notrap
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
# --- GENERAL CONFIGURATION ---
# ローカルの設定 (指定する数値はIPアドレスではないので念のため。 127.127.1.0は、時間を取得するデバイス<=内蔵時計>を指定するためのNTP独自の表現である。)
server 127.127.1.0 # local clock
# 時刻同期の優先度
fudge 127.127.1.0 stratum 10
# 時刻のずれを修正するファイルとずれ幅の設定
driftfile /etc/ntp/drift
broadcastdelay 0.008
# 認証を必要とするか (ここでは yes とする)
authenticate yes
# 認証キーの指定 (keys ファイルのパスを指定)
keys /etc/ntp/keys
| ■ /etc/ntp/step-tickers
NTPサーバは起動前に ntpdate コマンドで時刻合わせをしておくことが望ましい。これは時刻のずれが大きいとサーバが同期するまで時間がかかる(実は1000秒以上ずれていると、NTPDはハードウェア上のトラブルが生じたと判断して停止してしまう)ためであるが、NTPサーバを起動後は
ntpdate は実行できないという矛盾がある。このため ntpd の起動スクリプトにはサーバ起動時にまず
ntpdate を使って時刻合わせをする設定が書いてある。この初期時刻合わせのためのサーバを指定するのが
step-tickers ファイルの役目である。
書式は対象サーバを列記するだけで、複数記述することができる。
server 130.69.251.23 (東大タイムサーバ)
server 133.100.9.2 (福岡大タイムサーバ)
|
■ 動作検証とntpq
設定が終わったら、先に述べたとおりのコマンドで起動する。
#/etc/rc.d/init.d/ntpd
start または #service ntpd start
ps aux | grep ntpd でプロセスの起動を確認したら、ntpq
コマンドに -p オプションをつけて動作を検証する。
#ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*ntp.nc.u-tokyo. .GPS. 1 u 46 64 17 15.685 10.384 0.290
clock.nc.fukuok .GPS. 1 u 51 64 17 261.152 118.519 20.330
LOCAL(0) LOCAL(0) 10 l 52 64 17 0.000 0.000 0.015
以上のように表示されれば動作検証が完了である。ここでアスタリスクがついているのが同期しているサーバであるが、同期される まで5分程度かかるので気長に待つこと。以下に
ntpq のメッセージの意味を一覧する。
メッセージ
|
内 容
|
remote |
接続先ホスト |
refid |
タイムサーバーが参照しているホスト |
st |
「Statum」1は基準サーバを直接参照していることを示している |
t |
タイムサーバーのタイプ |
when |
最後にパケットを受け取った時間(秒) |
poll |
ポーリング間隔 |
reach |
到達可能性を表すレジスタデータ(8進数) |
delay |
通信による遅延(ミリ秒) |
offset |
タイムサーバーとのずれ(ミリ秒) |
jitter |
時刻のばらつき(ミリ秒) | 運用上は
delay や offset 値がなるべく少なくなるサーバを探すとよい。関東地方での公開サーバは東京大学や東京理科大学にあるが、ネットワーク的に近いとは限らないので、traceroute
でホップカウントを確認すること。
NTPサーバを設置すると通信回線のトラフィックが増えるため、細い回線や処理能力の低いルータを使用している場合は回線障害が発生する恐れがある。トラフィックが極端に増大する場合はNTPの使用をあきらめるか、回線を変更して帯域を確保するしかないが、回線に余裕がある場合は次のような2つの方法で時計合わせをすることができる。
1.ntpd
を使う方法
クライアント側でもntpdを起動させて複数のntpサーバに同期させる。もっとも当たり前でntpらしい手法である。この方法を使えば、あるサーバがダウンしても他のサーバから同期することができ、システムの信頼性を確保できる。こうした点がデーモン起動のメリットだが、反面、ネットワークのトラフィックは単調に増加するのでそれなりの手当てが必要である。 以下にローカルのタイムサーバアドレスを
192.168.0.1 とした場合のクライアント用 ntpd.conf を示す。
# Prohibit general access to this service.
restrict default ignore ・・・接続のポリシーとして不可
ignore:指定したホストからのパケットを無視する
noquery:NTPのモード6と7のパケットを無視する
nomodify:設定を変更するNTPのモード6と7のパケットを無視する。情報請求は許可
notrust:通常の利用は許可する。時刻同期の情報源としては使用しない
restrict 127.0.0.1 ・・・接続許可アドレス
# -- CLIENT NETWORK -------
# クライアントからの接続許可範囲を指定 (ローカル192.168.1.0/24)
restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
# --- OUR TIMESERVERS -----
# このマシンが時間を確認しに行くサーバー (複数指定する)
server 192.168.0.1 (ローカルタイムサーバ)
# --- NTP MULTICASTCLIENT ---
# multicastclient # listen on default 224.0.1.1
# restrict 224.0.1.1 mask 255.255.255.255 notrust nomodify notrap
# restrict 192.168.1.0 mask 255.255.255.0 notrust nomodify notrap
# --- GENERAL CONFIGURATION ---
# 時刻のずれを修正するファイルとずれ幅の設定
driftfile /etc/ntp/drift
broadcastdelay 0.008
# 認証を必要とするか (ここでは yes とする)
authenticate yes
# 認証キーの指定 (keys ファイルのパスを指定)
keys /etc/ntp/keys
|
一読しておわかりいただけると思うが、クライアントとして利用するNTPDには
fudge ファイルに関する記述がない。これはローカルネット内で使用する時刻を代表NTPサーバに任せるためである。 仮に
fudge に 127.127.1.0 を書くと、ネットワーク障害時などに上位NTPサーバとの通信が切れると、クライアント上のNTPDはそれぞれの内蔵時計に時刻を合わせる。クライアントがサーバでなく自分自身の内蔵時計に同期するということは、それ以降ネットワーク内部の時刻がホストごとにばらばらになってしまうことを意味する。これではタイムサーバを動かす意味がないばかりか、エラーも出さないままネットワーク内部の時系列が狂っていくという怪現象(?)に悩まされることになりかねないので、クライアントとしてNTPDを動かす場合は
fudge の対象を内蔵時計にしないよう注意すること。
2.cron
に ntpdate を仕掛ける方法
ntp.rpmパッケージには、時刻合わせ用のツールとして
ntpdate が付属している。ntpdate の書式は次の通り。
# ntpdate -b
clock.nc.fukuoka-u.ac.jp
clock.nc.fukuoka-u.ac.jp
は前述のとおり福岡大学のタイムサーバである。ntpdate
では自分の使いたいタイムサーバを指定して時刻情報を取得し、ローカルのシステムクロックを同期することができる。さらにシステムクロックとハードウェアクロックを一致させたい場合は次のコマンドを使用する。
# /sbin/hwclock
--systohc
これによってハードウェアの時刻も一致させることができる。ただし、この2つのツールは
ntpd が起動していると実行できないので注意が必要である。サーバとクライアントを同時に動作させることはできないため、ntpd
が動いているホストで実行するときは最初に ntpd を止めること。 運用上はこれらを
crontab に記載して定期的に調整するとよい。以下に午前4時に時刻合わせを実施し、標準出力と標準エラー出力をNULLに掃き出す(画面には出力しない)設定を紹介する。
午前2時に時刻合わせをする例: 0
2 * * * /usr/sbin/ntpdate -s clock.nc.fukuoka-u.ac.jp > /dev/null
2>&1
この方法のメリットはntpdで問題となるセキュリティホールを気にせずに済む点である。サーバの運用指針として必要のないデーモンを極力常駐させないポリシーを立てている場合、こちらの方が第一選択となるだろう。ただし、この場合はcronで1つのNTPサーバのみを指定することがほとんどのため、対象サーバがダウンしている場合はサービスが停止してしまうという問題がある。(複数のサーバを対象にスクリプトを書いておく手もあるが、時系列の偏差をどうするかという問題が残る。いずれにせよ、この手法は厳密でクリティカルな使用目的にそぐわない。)
3.Windowsクライアントの時刻合わせ
Windowsクライアントでは
windows time サービスがデフォルトで起動しているはずなので net
time コマンドによって時計を合わせることができる。ただしこれにあたっては、まずタイムサーバの名前解決ができなくてはならないという困った
Windows のお約束があるので、内部DNSを立てておくか C:\WINNT\system32\drivers\etc\hosts
にタイムサーバ名を記述しておく。 net
time コマンドの基本的な使い方は以下のとおり。
net
time /setsntp:ntpserver
この書式でまずシンクロさせたいNTPサーバを記述する。これは再起動しても消えることはなく、一度やっておけば変更の必要が生じたときまで変わらない。現在の参照先を確認したい場合は次のコマンドを使用する。
net
tim /querysntp
※注意:Windowsでドメインを立てていると、クライアント機で実行する
net time コマンドは、まずドメインコントローラを参照に行くという問題がある。この場合はドメインコントローラを
Linux 側 NTPサーバに同期させておく。こうしておけばクライアントの
windows time service は自動的にドメインコントローラの時刻と同期する。これでうまくいかない場合は、先述の桜時計などを常駐させておく方法も簡単である。
なおマイクロソフトのNTPに関するテクニカルサポートのURLは以下のとおり。Windows
の時刻取得回数等の設定が必要になった場合はこちらを参照されたい。
http://support.microsoft.com/default.aspx?scid=kb;ja;223184
|