【ネットワーク入門】時刻同期に必須のプロトコルNTPについて

  • URLをコピーしました!
目次

はじめに

こんにちは。ネットワークエンジニアの「だいまる」です。

今回は、CCNPの勉強のアウトプットとして、NTPについてまとめていきたいと思います。

NTPとは

NTPについて、①概要、②設定モードとアクセス制御、③仕組みの3点から説明していきたいと思います。

概要

NTPとは「コンピュータに内蔵されているシステムクロックやネットワークを介して時刻を同期する」プロトコルとなります。

コンピュータ間の時刻を同期することで、システム等のセキュリティや信頼性の担保をしている一面もあります。

このプロトコルではUDPかつポート番号123を利用します。

NTP
サーバ
NTP…
NTP
クライアント
NTP…
UDP 123 時刻同期
UDP 123 時刻同期
Text is not SVG – cannot display

また、時刻同期の信頼性を階層構造で定義し、各階層にStratum(ストラタム)という単位を用いています。

階層は0~16で定義され、最上位(原始時計)をStratum 0とし、原始時計を除く最も信頼性の高い階層はStratum 1となります。

また、Stratum 16は同期のみとなり時刻の提供は行わずCisco IOSのルータはデフォルトでStratum 8と決まっています。

原始時計
原始時計
ストラタム 0
ストラタム 0
コンピュータ
コンピュータ
コンピュータ
コンピュータ
ストラタム 1
ストラタム 1
ストラタム 15
ストラタム 15
ストラタム 16
ストラタム 16
コンピュータ
コンピュータ
コンピュータ
コンピュータ
コンピュータ
コンピュータ
コンピュータ
コンピュータ
同期のみ
同期のみ
Text is not SVG – cannot display

設定モード

NTPには、「Server」と「Client」の2つのモードが存在します。

「Server」は時刻を提供し、「Client」は時刻をもらう側のモードとなります。

項目詳細
Server時刻を提供するモード
Client時刻を同期するモード
Symmetric Server同一階層群からサーバ・クライアントを動的に決めるモード
Symmetric Client同一階層群からサーバ・クライアントを動的に決めるモード

各モードごとのアクセス制御

アクセス制御は、ACLを利用し合致したサブネットやホストのみ、各モードを動作させるための制御となります。

詳細は基本設定とステータス確認の章で説明しますが、各モードでACLを適用した場合、以下の表の通りの動作となります。

項目時刻同期時刻要求制御クエリ
peer
serve✖️
peer-only✖️✖️
serve-only✖️✖️

サーバ・クライアントのやり取り

NTPサーバとクライアント間では、2つのフローでやり取りが行われています。

クライアントがサーバにクエリを送信し、サーバ側でクエリを受信すると応答メッセージをクライアントに返答します。

この2つのフローで時刻の同期がおこわれているのです。

クライアント
クライアント
サーバ
サーバ
T1:クエリ送信
T1:クエリ送信
T4:応答受信
T4:応答受信
T2:クエリ受信
T2:クエリ受信
T3:応答送信
T3:応答送信
Text is not SVG – cannot display

上記のフローで時刻同期が行われる際、RTTとクライアント・サーバ間の時刻差を求める必要があります。

その計算式は以下の通りとなります。

RTT:
RTT:
時刻差:
時刻差:
(T4-T1)-(T3-T2)
(T4-T1)-(T3-T2)
(T3+T2)-(T1+T4)
(T3+T2)-(T1+T4)
2
2
Text is not SVG – cannot display

RTTは、処理時間を除くクライアント・サーバ間で発生した通信時間を求めているので理解は容易だと思います。

時刻差は、少し理解が厄介ですが、こちらのサイトがわかりやすいかと思います。

Cisco IOSの基本設定と実機確認

この章では、Cisco IOSの NTPの設定方法と実機確認についてまとめていきます。

今回用いた構成は、Stratum値3のルータ(NTPサーバ模擬)を2台、Stratum値4のルータ(NTPクライアント模擬)を1台の三角形構成としました。

Router1
Router1
Router2
Router2
Router3
Router3
Stratum 4
Stratum 4
NTPクライアント
NTPクライアント
NTPサーバ
NTPサーバ
Lo 0:10.0.1.1
Gi0/1:192.168.1.1/29
Gi0/2:192.168.3.1/30
Lo 0:10.0.1.1…
Gi0/1
Gi0/1
Gi0/2
Gi0/2
Gi0/1
Gi0/1
Gi0/2
Gi0/2
Stratum 3
Stratum 3
Gi0/3
Gi0/3
Gi0/3
Gi0/3
Lo 0:10.0.1.2
Gi0/1:192.168.1.2/29
Gi0/3:192.168.2.1/30
Lo 0:10.0.1.2…
Lo 0:10.0.1.3
Gi0/2:192.168.3.2/30
Gi0/3:192.168.2.2/30
Lo 0:10.0.1.3…
NTPサーバ
NTPサーバ
Text is not SVG – cannot display

基本設定(コマンド)と実機確認

NTPサーバの定義

以下コマンドでNTPサーバの指定を行います。

(config)# ntp master <ストラタム値>

NTPクライアントとサーバの指定

NTPクライアントによるサーバの指定は、基本的に以下コマンドで行います。

(config)# ntp server [ サーバ IPアドレス | サーバ ホスト名 ] 

上記コマンドはサーバの階層が上位の場合に利用し、同一階層のサーバ同士で同期したい場合は以下コマンドでを利用します。

(config)# ntp peer [サーバ IPアドレス]

実機確認

NTPサーバとクライアントの設定

NTPサーバとクライアントの設定前に各ルータのClockの状況を見ていきましょう。

Router1#show clock
.23:10:30.777 UTC Thu Jan 11 2024
Router1#show clock
.23:10:37.323 UTC Thu Jan 11 2024
Router1#show clock
.23:10:38.225 UTC Thu Jan 11 2024


Router2#show clock
.23:10:31.129 UTC Thu Jan 11 2024
Router2#show clock
.23:10:37.728 UTC Thu Jan 11 2024
Router2#show clock
.23:10:38.633 UTC Thu Jan 11 2024

上記は同じタイミングでコマンドを打った結果ですが、0.4秒ぐらいズレていることがわかります。

NTPサーバの設定「ntp master <ストラタム値>」(今回はストラタム値3)を実施します。

Router1#show ntp status
%NTP is not enabled.
Router1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router1(config)#ntp master 3
Router1(config)#end
Router1#show ntp status
Clock is synchronized, stratum 3, reference is 127.127.1.1
nominal freq is 1000.0003 Hz, actual freq is 1000.0003 Hz, precision is 2**17
ntp uptime is 600 (1/100 of seconds), resolution is 1000
reference time is E94AF3FB.FB5EA79A (23:10:51.981 UTC Thu Jan 11 2024)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 7937.58 msec, peer dispersion is 7937.50 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is 0.000000000 s/s
system poll interval is 16, last update was 6 sec ago.
Router1#show ntp associations

  address         ref clock       st   when   poll reach  delay  offset   disp
*~127.127.1.1     .LOCL.           2      9     16     1  0.000   0.000 7937.5
 * sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured

設定を投入することで内部のClockと同期されていることがわかります。

次にクライアントの設定を投入します。

Router2#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router2(config)#ntp ser
Router2(config)#ntp server 10.0.1.1
Router2(config)#end
Router2#
Router2#
Router2#show ntp status
Router2#show ntp status
Clock is unsynchronized, stratum 16, no reference clock
nominal freq is 1000.0003 Hz, actual freq is 1000.0003 Hz, precision is 2**17
ntp uptime is 300 (1/100 of seconds), resolution is 1000
reference time is 00000000.00000000 (00:00:00.000 UTC Mon Jan 1 1900)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 0.00 msec, peer dispersion is 0.00 msec
loopfilter state is 'FREQ' (Drift being measured), drift is 0.000000000 s/s
system poll interval is 64, never updated.

〜15分後に再度コマンド実施〜
Router2#show ntp status
Clock is synchronized, stratum 4, reference is 10.0.1.1
nominal freq is 1000.0003 Hz, actual freq is 999.5003 Hz, precision is 2**17
ntp uptime is 110600 (1/100 of seconds), resolution is 1001
reference time is E94AF838.382E5A0F (23:28:56.219 UTC Thu Jan 11 2024)
clock offset is -15.5406 msec, root delay is 0.52 msec
root dispersion is 131.29 msec, peer dispersion is 62.68 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is 0.000499908 s/s
system poll interval is 64, last update was 53 sec ago.

Router2#show ntp associations

  address         ref clock       st   when   poll reach  delay  offset   disp
*~10.0.1.1        127.127.1.1      3     61     64     3  0.522 -15.540 62.685
 * sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured

設定直後はRouter1「10.0.1.1」に対するピアは「unsynchronized」でしたが、15分後に再度コマンドを実施すると「synchronized」に変わっていました。

これはNTPの時刻同期には少し時間がかかる場合があるためです。

最後にサーバとクライアントのClockを確認すると時刻差がほとんどなくなっていました。

Router1#show clock
23:32:06.270 UTC Thu Jan 11 2024
Router1#show clock
23:32:11.660 UTC Thu Jan 11 2024
Router1#show clock
23:32:12.731 UTC Thu Jan 11 2024

Router2#show clock
23:32:06.060 UTC Thu Jan 11 2024
Router2#show clock
23:32:11.411 UTC Thu Jan 11 2024
Router2#show clock
23:32:12.504 UTC Thu Jan 11 2024

アクセス制御と実機確認

アクセス制御では前章に述べた通り、ACLを定義し、「ntp access-group」コマンドを使って制御を行います。

(config)# ntp access-group { serve | peer | serve-only | peer-only } { ACL番号 }

実機確認では、Router3をClientモードで動作させ、「10.0.1.2」からの要求は受け付け、「10.0.1.3」からの要求は破棄する形で動作確認していきたいと思います。

Router1#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router1(config)#ip access-list standard 10
Router1(config-std-nacl)#10 permit 10.0.1.2 ?
Router1(config-std-nacl)#10 permit 10.0.1.2 0.0.0.0
Router1(config)#ntp  access-group serve 10
Router1(config)#end
Router1#
Router1#
Router1#
Router1#show ntp status
Clock is synchronized, stratum 3, reference is 127.127.1.1
nominal freq is 1000.0003 Hz, actual freq is 1000.0003 Hz, precision is 2**17
ntp uptime is 16900 (1/100 of seconds), resolution is 1000
reference time is E94B8535.84E2EF70 (09:30:29.519 UTC Fri Jan 12 2024)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 0.36 msec, peer dispersion is 0.23 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is 0.000000000 s/s
system poll interval is 16, last update was 9 sec ago.

上記設定でサーバ側の制御は完了です。

次にRouter3側で動作を確認したいと思います。

Router3#show ntp status
Clock is synchronized, stratum 4, reference is 10.0.1.1
nominal freq is 1000.0003 Hz, actual freq is 1000.0003 Hz, precision is 2**1
ntp uptime is 12700 (1/100 of seconds), resolution is 1000
reference time is E94B84D0.D6E9A150 (09:28:48.839 UTC Fri Jan 12 2024)
clock offset is -119.1604 msec, root delay is 1.37 msec
root dispersion is 5029.87 msec, peer dispersion is 63.47 msec
loopfilter state is 'CTRL' (Normal Controlled Loop), drift is 0.000000000 s/s
system poll interval is 64, last update was 125 sec ago.
Router3#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router3(config)#no ntp server 10.0.1.1
Router3#show ntp status
%NTP is not enabled.
Router3#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
Router3(config)#ntp server 10.0.1.1
Router3(config)#end
Router3#show ntp status
Clock is unsynchronized, stratum 16, no reference clock
nominal freq is 1000.0003 Hz, actual freq is 1000.0003 Hz, precision is 2**17
ntp uptime is 600 (1/100 of seconds), resolution is 1000
reference time is 00000000.00000000 (00:00:00.000 UTC Mon Jan 1 1900)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 0.08 msec, peer dispersion is 0.00 msec
loopfilter state is 'FSET' (Drift set from file), drift is 0.000000000 s/s
system poll interval is 8, never updated.
############15分以上経った後に実行###############
Router3#show ntp status
Clock is unsynchronized, stratum 16, no reference clock
nominal freq is 1000.0003 Hz, actual freq is 1000.0003 Hz, precision is 2**17
ntp uptime is 34900 (1/100 of seconds), resolution is 1000
reference time is 00000000.00000000 (00:00:00.000 UTC Mon Jan 1 1900)
clock offset is 0.0000 msec, root delay is 0.00 msec
root dispersion is 5.23 msec, peer dispersion is 0.00 msec
loopfilter state is 'FSET' (Drift set from file), drift is 0.000000000 s/s
system poll interval is 8, never updated.
Router3#show ntp asso
Router3#show ntp associations

  address         ref clock       st   when   poll reach  delay  offset   disp
 ~10.0.1.1        .INIT.          16      -     64     0  0.000   0.000 15937.
 * sys.peer, # selected, + candidate, - outlyer, x falseticker, ~ configured

上記の通り、Router1のNTPサーバ「10.0.1.1」とは同期できてないことがわかります。

ACL制御をすることで意図しないサーバやルータとの同期を防ぐことができます。

最後に

今回は、ネットワークの基本となる時刻同期プロトコルである「NTP」についてちょこっとまとめてみました。

以外とわかっていたつもりになっていたことも多々あるんだなと最近つくづく感じています。

次回もCCNP関連の勉強をしたらまとめていきたいと思います。

  • URLをコピーしました!

この記事を書いた人

目次