DebianにNTPをいれて自動で時計合わせする

作成日:2017年8月16日
コメント:(0)
カテゴリー:システム, ネットワーク
タグ:, ,

サーバー運用で問題になることの一つに時間合わせがある。
複数のサーバーでサービスを提供している場合などは各サーバーで時間がずれているとファイルのタイムスタンプやログの結果がまったく信用できないものになる。
またcronなどの時間による自動実行についても思った時間に実行されないことになる。
とくに仮想サーバーで構築されているシステムでは仮想サーバーを一時的に止めたり古いスナップショットからサーバーを複製したりとかすると簡単に時間がずれる。
また、そもそも仮想サーバーはハードウェアがエミュレートされているので当然、仮想ではないサーバーより遅い。
よって仮想サーバーを止めなくてもだんだん時間がずれていくことがある。
そんなこんなでネットワーク経由で時計合わせをする仕組みが存在する。
NTP(Network Time Protocol) というものでUDPの123番ポートを使用する。
このNTPの最大の特徴はネットワーク回線による遅延も考慮して時刻合わせをしてくれることである。




企業などのシステムでは普通は1台か数台程度のNTPサーバーを立てて、他のマシンはそのNTPサーバーを見て時刻合わせを行う。
そしてNTPサーバーは外部で提供されているNTPサーバーを見て時刻合わせを行う。
またわざわざ専用のマシンを立てなくてもNTPサーバーの機能を持つルーターなどもあるのでそれを使うこともある。
DebianではLinuxでよく使われているntpdというソフトがパッケージで提供されている。
これはNTPサーバーに問い合わせをして自マシンの時計を合わせるNTPクライアントとしての機能と、他のマシンからの問い合わせに答えて時間を返すNTPサーバーの機能がある。
このntpdを使って外部のNTPサーバーを見て時刻合わせをしてみる。
また、内部のLAN向けにNTPサーバーとしても可動させてみる。

1.ntpdのインストール

ntpdをインストールする。
もちろんrootで作業する。
# aptitude install ntp
自動的にntpdが起動する。
10分ほど放置すると自動的に時刻合わせが行われる。

2.NTPクライアントとしての設定

このままNTPクライアントとして可動して時刻合わせするだけならこのままでもいい。
が、せっかくなので少々設定を変える。
/etc/ntp.conf をいじる。

# vi /etc/ntp.conf

# You do need to talk to an NTP server or two (or three). 
#server ntp.your-provider.example

# pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will
# pick a different set every time it starts up. Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
pool 0.debian.pool.ntp.org iburst
pool 1.debian.pool.ntp.org iburst
pool 2.debian.pool.ntp.org iburst
pool 3.debian.pool.ntp.org iburst
という箇所がある。
これが参照する外部のNTPサーバーのリストになる。
精度を高めるために複数のNTPサーバーを指定することが推奨されている。
そしてこの4つのサーバーは問い合わせたクライアントに応じてランダムに
都度違うサーバーに割り当てられる仕組みになっている。
これをちょいと変えてみる。

# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
server ntp.nict.jp
server ntp.nict.jp
server ntp.nict.jp

# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: <http://www.pool.ntp.org/join.html>
#pool 0.debian.pool.ntp.org iburst
#pool 1.debian.pool.ntp.org iburst
#pool 2.debian.pool.ntp.org iburst
#pool 3.debian.pool.ntp.org iburst

ntp.nict.jp とは独立行政法人 情報通信研究機構の提供する日本標準時プロジェクトの公開NTPサーバーで
世界最高レベルのNTPサーバーを公開している。
三回書いているのは大事なことだから(rではなく、
DNSラウンドロビンの仕組みを利用して問い合わせるたびに異なるサーバーを割り当てる仕組みになっているから。
自分が使っているプロバイダーなどでNTPサーバーを提供していればそれを指定してもいい。
またLAN内にすでにNTPサーバーがあればそれを指定してもいい。
いずれにせよ、できるだけ地域的に近いサーバーを複数指定するのがいい。
/etc/ntp.conf を書き換えたらntpdを再起動する。

# /etc/init.d/ntpd restart

状況を見るにはntpqコマンドを使う。

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+time.platformni 157.7.235.92     3 u  576 1024  373   10.227   -0.798   2.513
+nipper.paina.jp 10.84.87.146     2 u  897 1024  377    6.319    1.409   1.704
*v157-7-235-92.z 10.84.87.146     2 u  937 1024  377    6.699    2.615   1.962
+chobi.paina.jp  131.113.192.40   2 u  630 1024   33   13.412   -2.855  32.005

10分ほどして同期が始まれば
このようにサーバー名の前に+や*などがつく。
*が現在同期しているサーバーで、+が次に同期する候補のサーバー。
dateコマンドなどでわざと数分程度時間をずらしてみて10分ほど放置してみて
時間合わせが行われているか確認してみるといい。
電話の時報か電波時計などを見ながら正確かどうかも見てみる。
これでNTPクライアントとしては終わり。

3.NTPサーバーとして可動させる

この設定したマシンをLAN内のNTPサーバーとして可動させてみる。
同じく /etc/ntp.conf を書換える。

コメント部分省略

restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited

restrict 127.0.0.1
restrict ::1

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

コメントアウトされているところは有効にしてネットワークの状況に応じて書換える。
最初の二行はとりあえずすべての問い合わせを拒否っておくことを表している。
次の二行はローカルからの問い合わせはすべて許可する。
最後の一行は同じLANからの問い合わせについてのみ時間を答えるが
時間の変更を外部からはさせない、trapサービスのパケットを拒否ということ。
この部分は各々のネットワークに合わせて変更する。
書換えが終わればntpdを再び再起動させる。
他のLinuxマシンからおなじくNTPを使ってこのマシンをサーバーとして設定しみたり
Windowsから参照したりして実験してみるといい。

大規模なLANだと一台のNTPサーバーに問合せが集中しないようにするべきで、
ある程度階層構造を持たせるのが望ましい。
また、NTPサーバーが止まっていても大丈夫なように複数のサーバーを用意するか
外部のNTPサーバーも参照する道も残すのがいいと思う。
以上。


Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

トラックバック URL

http://uturo1.nevernothing.jp/ntp/trackback/

公告

公告