外部の時刻サーバーと同期し、サーバーの時刻を正確に保つために使用するNTPですが、環境によってはインターネットを通じて外部に接続することができないことがあります。それでも、ネットワークに接続されているサーバー群の時刻は同期がとれている必要がある時もあります。Webサーバー群でログのタイムスタンプをあわせたいときなど。

そんなときは、一台をネットワーク内の時刻サーバーとして扱い、そのサーバーの時刻を他のマシンの基準にさせることができます。次の様な環境で構成してみます。

サーバーA:192.168.0.1
時刻サーバー

サーバーB:192.168.0.2
サーバーC:192.168.0.3
クライアント

まず、クライアントとなるサーバーB/Cの設定を見てみます。

restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
server 192.168.0.1 minpoll 4 maxpoll 10

これらのサーバーの設定については今まで通り、時刻サーバーを見に行く設定にするので特に問題ないと思います。

時刻サーバーとなるサーバーAですが、基本的な設定ファイルの書き方は今まで通りです。一つ違うのは、このサーバーは外部サーバーと同期するのではなく、自分自身と同期するように設定ファイルを記述すると言うことです。

restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap
fudge 127.127.1.0 stratum 5

ntp.confを編集したらntpdサービスを再起動します。

しばらく時間をおいてntpqコマンドで確認してみました。

サーバーA

]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*LOCAL(0) .LOCL. 5 l 33 64 377 0.000 0.000 0.001


サーバーB/C

# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.0.1 LOCAL(0) 6 u 535 1024 377 1.334 0.484 0.126
LOCAL(0) .LOCL. 10 l 13 64 377 0.000 0.000 0.001


サーバーAではstratumを5と指定したのに、サーバーB/Cでは6と認識されているのがなぜだかわかりませんが、無事にタイムサーバーとして認識され、同期されていることがわかりました。
ローカルネットワーク内での同期なので、時刻差がとても小さいです。