なぜ時刻同期が必要か

ネットワーク機器の時刻がばらばらだと、複数の機器にまたがるログ(syslog等)を時系列で突き合わせて障害を調査することが難しくなったり、証明書の有効期限の検証など、時刻に依存する機能が正しく動作しなくなったりする問題が生じます。NTP(Network Time Protocol)は、ネットワーク上の機器どうしで、正確な時刻を自動的に同期させるためのプロトコルです。

ストラタム(Stratum)

NTPでは、時刻の情報源からの「距離」を、ストラタムという階層番号で表します。

  • ストラタム0:原子時計やGPS受信機など、正確な時刻を刻む基準となる機器そのもの(NTP機器としては扱われません)。
  • ストラタム1:ストラタム0の機器に直接接続され、時刻情報を配信するNTPサーバーです。
  • ストラタム2以降:上位のストラタムのNTPサーバーから時刻を受け取り、さらに下位へ配信するサーバーです。数字が大きくなるほど、基準となる時刻源から段階的に離れていきます。

クライアントモードの設定

ある機器を、他のNTPサーバーから時刻を受け取るクライアントとして動作させるには、ntp serverコマンドで同期先のサーバーを指定します。

Router(config)# ntp server 192.168.1.1

複数のNTPサーバーを指定することもでき、その場合はNTPの選択アルゴリズムが到達性、ストラタム、遅延、オフセットなどを考慮して、同期に用いるサーバーを選択します。

サーバーモードの設定

自分自身が持つ時刻情報を、他の機器へNTPサーバーとして配信するには、ntp masterコマンドを使います。

Router(config)# ntp master 3

末尾の数値は、ルータが外部のNTPサーバーに同期できず、自身のソフトウェアクロックを時刻源として配信するときに用いるストラタム値です。外部のNTPサーバーに同期している場合は、その同期状態に基づくストラタムで下位へ時刻を配信します。ルータ自身が信頼できる外部の時刻源(GPS等)を持たない場合でも、ntp masterを設定することで、そのルータ自身のソフトウェアクロックを時刻源として、社内ネットワーク内の他の機器へ時刻を配信できます。

クライアントとサーバーの両立

多くの実運用環境では、1台の機器が「上位のNTPサーバーからは時刻を受け取るクライアント」であると同時に、「社内の他の機器へは時刻を配信するサーバー」としても動作します。これは、上位サーバーをntp serverで指定し、下位機器でその機器をntp serverとして指定することで実現できます。上位に同期できている機器が下位に時刻を配信するだけであれば、ntp masterは必須ではありません。ntp masterは、上位の時刻源がない場合に自身のソフトウェアクロックを配信するために用います。

設定の確認

同期状態の確認

Router# show ntp status

Clock is synchronized, stratum 3, reference is 192.168.1.1
nominal freq is 250.0000 Hz, actual freq is 250.0000 Hz, precision is 2**24
reference time is D76513B4.66A4CDA6 (12:40:20.400 UTC Mon Jul 7 2014)
clock offset is -5.5952 msec, root delay is 13.58 msec
...

Clock is synchronizedという表示から、実際に時刻同期が完了していることを確認できます。同期がまだ完了していない場合は、Clock is unsynchronizedと表示されます。

NTPサーバーとの関係(アソシエーション)の確認

Router# show ntp associations

  address         ref clock       st   when   poll   reach   delay   offset    disp
*~192.168.1.1     127.127.1.1     2    29     64     377     4.2     -8.59     1.6
 ~10.0.0.5        192.168.1.1     3    45     64     377     9.1     3.48      2.3

 * sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured

行頭の記号は、そのNTPサーバーとの関係性を示しています。*(sys.peer)が付いているサーバーが、実際に時刻同期に採用されている情報源です。st列がストラタム値を示しています。

クロック自体の同期状態の確認

show ntp statusのClock is synchronizedから、ルータのシステムクロックがNTPに同期済みであることを確認できます。さらに、ルータのクロック自体の時刻源は、show clock detailコマンドでも確認できます。

Router# show clock detail

12:40:25.812 UTC Mon Jul 7 2014
Time source is NTP

Time source is NTPという表示から、現在のクロックの時刻源がNTPであることを確認できます。手動でclock setコマンドを使って時刻を設定した場合などは、ここがTime source is user configurationのように表示され、NTPが時刻源ではないことが分かります。show ntp statusで同期済みであることを確認し、必要に応じてshow clock detailでクロックの時刻源も併せて確認できます。