はじめに
こんにちは。ネットワークエンジニアの「だいまる」です。
今回は、CCNPの勉強のアウトプットとして、NTPについてまとめていきたいと思います。
NTPとは
NTPについて、①概要、②設定モードとアクセス制御、③仕組みの3点から説明していきたいと思います。
概要
NTPとは「コンピュータに内蔵されているシステムクロックやネットワークを介して時刻を同期する」プロトコルとなります。
コンピュータ間の時刻を同期することで、システム等のセキュリティや信頼性の担保をしている一面もあります。
このプロトコルではUDPかつポート番号123を利用します。
また、時刻同期の信頼性を階層構造で定義し、各階層にStratum(ストラタム)という単位を用いています。
階層は0~16で定義され、最上位(原始時計)をStratum 0とし、原始時計を除く最も信頼性の高い階層はStratum 1となります。
また、Stratum 16は同期のみとなり時刻の提供は行わず、Cisco IOSのルータはデフォルトでStratum 8と決まっています。
設定モード
NTPには、「Server」と「Client」の2つのモードが存在します。
「Server」は時刻を提供し、「Client」は時刻をもらう側のモードとなります。
項目 | 詳細 |
Server | 時刻を提供するモード |
Client | 時刻を同期するモード |
Symmetric Server | 同一階層群からサーバ・クライアントを動的に決めるモード |
Symmetric Client | 同一階層群からサーバ・クライアントを動的に決めるモード |
各モードごとのアクセス制御
アクセス制御は、ACLを利用し合致したサブネットやホストのみ、各モードを動作させるための制御となります。
詳細は基本設定とステータス確認の章で説明しますが、各モードでACLを適用した場合、以下の表の通りの動作となります。
項目 | 時刻同期 | 時刻要求 | 制御クエリ |
peer | ◯ | ◯ | ◯ |
serve | ✖️ | ◯ | ◯ |
peer-only | ✖️ | ◯ | ✖️ |
serve-only | ✖️ | ✖️ | ◯ |
サーバ・クライアントのやり取り
NTPサーバとクライアント間では、2つのフローでやり取りが行われています。
クライアントがサーバにクエリを送信し、サーバ側でクエリを受信すると応答メッセージをクライアントに返答します。
この2つのフローで時刻の同期がおこわれているのです。
上記のフローで時刻同期が行われる際、RTTとクライアント・サーバ間の時刻差を求める必要があります。
その計算式は以下の通りとなります。
RTTは、処理時間を除くクライアント・サーバ間で発生した通信時間を求めているので理解は容易だと思います。
時刻差は、少し理解が厄介ですが、こちらのサイトがわかりやすいかと思います。
Cisco IOSの基本設定と実機確認
この章では、Cisco IOSの NTPの設定方法と実機確認についてまとめていきます。
今回用いた構成は、Stratum値3のルータ(NTPサーバ模擬)を2台、Stratum値4のルータ(NTPクライアント模擬)を1台の三角形構成としました。
基本設定(コマンド)と実機確認
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関連の勉強をしたらまとめていきたいと思います。
- 【データセンタネットワーク】手を動かしてEVPN-VXLANを理解しよう!
- 一軒家でストレスのない安定した無線Wifiを構築した話
- 【ネットワーク】BGP Unnumbered(RFC5549・8950)について
- 【イベント参加】Janog54に参加して学んだことや感じたことのまとめ
- 【ネットワーク応用】EVPN-VXLANとは?(EVPN/VXLAN概要編)
- 【ネットワーク入門】BGP拡張コミュニティ(RFC4360)
- 自宅のインターネット回線にJCOM 5G on auひかりを導入してみた
- 【BGP経路設計】Network文による自己生成経路とAggregate経路の罠
- 【ネットワーク入門】CCNA/CCNPによく出てくるSD-ACCESSとは?