NTP で時刻合わせ

NTP とは Network Time Protocol の略で、ネットワーク上でクライアントがサーバーに対して時刻を問い合わせるためのプロトコルです。
NTP サーバーは、クライアントとの間で起こる可能性がある通信の遅れも考慮し、ネットワークの遅れに関する情報も内蔵しているため、正確な時刻同期が可能です。
NTP を使うとサーバーの時刻が正確に保たれるので、ログの時刻が正確に記録され、サーバーの運用管理にも役立ちます。

NTP のインストール

NTP は apt-get を使ってインストールします。
以下のように root 権限でインストールを行います。

$ sudo apt-get install ntp
Reading package lists… Done
Building dependency tree
Reading state information… Done
Suggested packages:
  ntp-doc
The following NEW packages will be installed:
  ntp
0 upgraded, 1 newly installed, 0 to remove and 1 not upgraded.
Need to get 327kB of archives.
After unpacking 877kB of additional disk space will be used.
Get:1 http://jp.archive.ubuntu.com feisty/main ntp 1:4.2.2.p4+dfsg-1ubuntu3 [327kB]
Fetched 327kB in 1s (182kB/s)
Selecting previously deselected package ntp.
(Reading database … 22002 files and directories currently installed.)
Unpacking ntp (from …/ntp_1%3a4.2.2.p4+dfsg-1ubuntu3_i386.deb) …
Setting up ntp (4.2.2.p4+dfsg-1ubuntu3) …
 * Starting NTP server ntpd                                              [ OK ]

NTP の設定

ここでは NTP サーバーの設定を行います。
NTP の設定ファイルは NTP をインストールしたときに作成されますが、時刻を同期するサーバーを近いサーバーに変更します。

$ sudo vi /etc/ntp.conf
/etc/ntp.conf
# /etc/ntp.conf, configuration for ntpd

driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

# You do need to talk to an NTP server or two (or three).
#server ntp.ubuntu.com
server ntp.nict.jp
server ntp.nict.jp
server ntp.nict.jp

# By default, exchange time with everybody, but don’t allow configuration.
# See /usr/share/doc/ntp-doc/html/accopt.html for details.
restrict default kod notrap nomodify nopeer noquery

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1 nomodify

# Clients from this (example!) subnet have unlimited access,
# but only if cryptographically authenticated
#restrict 192.168.123.0  mask  255.255.255.0 notrust

# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255

# If you want to listen to time broadcasts on your local subnet,
# de-comment the next lines. Please do this only if you trust everybody
# on the network!
#disable auth
#broadcastclient

設定ファイル 3 行目の driftfile は ntpd が時刻の調整を行う際に NTP サーバーから入手した時刻と ntpd が動作しているマシンとの時刻のずれを記録するファイルです。
12 行目の server で時刻を同期する NTP サーバーを指定します。
ここでデフォルトの設定をコメントアウトして、新たに 3 行追加します。
NTP サーバーを 3 つ指定していますが、制度をあげるためには複数指定することが推奨されています。
また ntp.nict.jp を 3 行指定していますがこれは NICT 公開 NTP サービス が提供しているもので、DNS ラウンドロビンによる負荷分散という仕組みを利用して別々の NTP サーバへ誘導してくれます。

NTP の再起動と動作確認

NTP を再起動して設定の変更を有効にします。

$ sudo /etc/init.d/ntp restart
 * Stopping NTP server ntpd                                              [ OK ]
 * Starting NTP server ntpd                                              [ OK ]

以下のように実行することで NTP サーバーの動作確認を行うことができます。
ntpq コマンドに -p オプションをつけて実行すると NTP サーバーの同期状態が表示されます。

$ sudo ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 ntp-b3.nict.go. .PPS.            1 u    6   64    1   30.498  -1496.5   0.001
 ntp-b2.nict.go. .PPS.            1 u    5   64    1   30.445  -1495.7   0.001
 ntp-a3.nict.go. .PPS.            1 u    4   64    1   30.544  -1498.0   0.001

NTP サーバーを起動した直後は上記ような結果になりますが、10 分ほど経過して同期が始まると以下のように表示されます。

$ sudo ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+ntp-b3.nict.go. .PPS.            1 u   43   64   77   30.146  -511.91 182.891
*ntp-b2.nict.go. .PPS.            1 u   56   64   77   30.226  -506.15 191.408
+ntp-a3.nict.go. .PPS.            1 u   26   64   77   29.345  -549.89 168.772

左端の * の記号は現在同期を行っているサーバー、+ の記号は次に同期行う候補のサーバーを表示しています。