NTPとは
NTP(Network Time Protocol)は、パソコンやスマホ、ルータなどの時計をネットワーク経由で正しくそろえるための仕組みです。これを使うと次のようなメリットがあります。
- ログ(記録)の時間が正しく残る
- 予約したサービスを正しい時間に動かせる
- 証明書を使った認証が正しく動く
NTPのパケット
NTPではクライアントとサーバが「123番ポート」を使ってやり取りします。使うのは軽い通信方式であるUDPです。
| 通信方向 | 使用するポート番号 |
|---|---|
| クライアントからサーバへ | UDP 123 |
| サーバからクライアントへ | UDP 123 |
NTPの階層(stratum)
NTPサーバは階層的に接続されています。上位から下位へと時刻が伝わっていく仕組みです。
| 階層 | 説明 |
|---|---|
| Stratum 0 | 原子時計やGPSなどの正確な時刻源(NTP自体ではない) |
| Stratum 1 | Stratum 0を直接参照するサーバ(最も上位のNTPサーバ) |
| Stratum 2 | Stratum 1のサーバと同期するサーバ |
| Stratum 3以降 | さらに下位のサーバ。最大でStratum 15まで |
| Stratum 16 | 同期できていない状態を意味する |
NTPの同期モード
NTPにはいくつかの動作モードがあります。
| モード | 説明 |
|---|---|
| Server / Clientモード | 一般的に使われる方式。クライアントがサーバに時刻を合わせる |
| Symmetricモード | 同じ階層にいるサーバ同士が、お互いに時刻を合わせる仕組み |
NTPの仕組み
NTPは単にサーバの時刻をコピーするのではなく、通信にかかる遅れ時間を計算して正確に補正します。やり取りされる時刻情報は次の4つです。
| 時刻情報 | 内容 |
|---|---|
| T1 | クライアントが問い合わせを送った時刻 |
| T2 | サーバがその問い合わせを受け取った時刻 |
| T3 | サーバが返事を送った時刻 |
| T4 | クライアントが返事を受け取った時刻 |
NTPの2036年問題
NTPでは時間を「1900年1月1日からの秒数」で数えています。32ビットで数えているため上限があり、2036年2月6日で限界を迎えます。これを超えると「時計がリセットされた」と誤解してしまう可能性があり、NTPの2036年問題と呼ばれています。
SNTPとは
SNTP(Simple Network Time Protocol)はNTPの簡易版です。サーバにはならず、時刻をもらうだけの仕組みです。小さな機器や単純な環境でよく使われます。
Cisco機器の時刻設定
CiscoルータやCatalystスイッチに正しい時刻を設定しておくことは、ログ管理やセキュリティ監査のために非常に重要です。時刻設定の方法は大きく分けて 手動設定、NTP、SNTP の3種類があります。どの方法でもまず最初に行うのが タイムゾーンの設定 です。
デフォルトでは UTC(協定世界時) になっており、日本で使用する場合は JST(日本標準時)=UTC+9時間 を指定します。
(config)# clock timezone JST 9
※ +9 と指定しても同じ意味になります。show run では clock timezone JST 9 0 のように表示されます。
手動設定:システムクロック
Cisco機器には「システムクロック」と「ハードウェアクロック」の2つの時計があります。
- システムクロック:ソフトウェア的な時計。精度は高いが再起動で初期化される。
- ハードウェアクロック:バッテリ駆動のカレンダー機能。再起動時にシステムクロックの初期値として使われる。
システムクロックは、メモリ上で動作するソフトウェア的な時計です。現在の時刻は次のコマンドで確認できます。
# show clock
時刻を手動で設定するには clock set コマンドを使用します。
# clock set hh:mm:ss DATE MONTH YEAR
例えば、2020年7月24日15時20分に設定する場合は次の通りです。
# clock set 15:20:00 24 Jul 2020
ただし、この設定は再起動すると消えてしまう点に注意が必要です。
手動設定:ハードウェアクロック
ハードウェアクロックは以下で確認できます。
# show calendar
手動設定は次のように行います。
# calendar set hh:mm:ss DATE MONTH YEAR
また、システムクロックが正確な場合、それをハードウェアクロックへ同期させることができます。
# clock update-calendar
このようにして、システムクロックとハードウェアクロックの時刻を一致させます。
サマータイム設定(参考)
日本ではサマータイムを採用していませんが、Cisco機器にはサマータイム設定の機能があります。
(config)# clock summer-time timezone recurring week day month hh:mm week day month hh:mm offset
例えば、2020年8月1日9時から2020年9月31日9時までをサマータイムとする場合は以下の通りです。
(config)# clock summer-time JST date 1 Aug 2020 9:00 31 Sep 2020 9:00
offset はサマータイムで追加される時間(通常60分)を指定します。
NTPの基本設定
CiscoルータやCatalystスイッチは、NTP(Network Time Protocol)を使って外部のNTPサーバと時刻同期を行うことができます。正しい時刻を保つことで、ログの整合性やセキュリティ管理に役立ちます。
NTPクライアントの設定
外部のNTPサーバと同期するには ntp server コマンドを使います。複数のサーバを指定することもでき、その場合は prefer を付けて優先サーバを決められます。
(config)# ntp server [ ip-address | hostname ] [ prefer ]
例:
(config)# ntp server 192.168.1.254
(config)# ntp server ntp.nict.jp prefer
ホスト名を指定する場合は、DNSによる名前解決が必要です。
送信元インターフェースの指定
複数のインターフェースを持つ機器では、NTPパケットを送信するインターフェースを明示的に指定しておくとトラブルシューティングが容易になります。
(config)# ntp source interface
例:
(config)# ntp source GigabitEthernet0/0
NTPサーバとして動作させる(マスタークロック)
クローズド環境で外部にNTPサーバが存在しない場合、Cisco機器自身をNTPサーバとして利用することができます。この場合、内部のハードウェアクロックを基準にします。
(config)# ntp master [ stratum ]
stratumは1~15で指定可能(省略時は8)- 値が小さいほど精度の高いサーバを意味する
例:
(config)# ntp master 5
ハードウェアクロックの同期
デフォルトではNTP同期対象はシステムクロックのみです。ハードウェアクロックも同期させたい場合は以下を設定します。
(config)# ntp update-calendar
NTPのステータス確認
NTPサーバと同期できているかどうかは show ntp associations コマンドで確認します。
- サーバIPアドレスの左に
*が付いていれば同期中
確認項目の意味は次の通りです。
| 項目 | 意味 |
|---|---|
| address | NTPサーバのIPアドレス |
| ref clock | NTPサーバが参照している上位サーバ |
| st | ストラタム値 |
| when | 最後にNTPパケットを受信してからの経過秒数 |
| poll | 次の問い合わせまでの間隔(秒) |
| reach | 到達可能性(8進数) |
| delay | 往復遅延時間(ms) |
| offset | サーバとの差(ms) |
| disp | ゆらぎ(ms) |
さらに show ntp status でも同期状況を確認可能です。
- 正常同期中:
Clock is synchronized, stratum 3, reference is 192.168.1.254 - 同期していない場合:
Clock is unsynchronized, stratum 16, no reference clock.
シスコデバイス:NTPのデフォルト設定
CiscoルータやCatalystスイッチは、特別な設定をしなければ以下のようなNTPのデフォルト状態で動作します。
| 機能 | デフォルト値 |
|---|---|
| NTP認証 | 無効(認証鍵は未設定) |
| NTPピア/アソシエーション | 未設定 |
| NTPブロードキャスト | 無効(どのI/Fも送信しない) |
| NTPアクセス制限 | ACL未指定 |
| NTP送信元IPアドレス | 発信インターフェースのアドレスを使用 |
このため、初期状態では外部と時刻同期できるようにはなっていません。基本設定(ntp server など)を行って初めて動作します。
NTPの3つの同期モード
NTPでは、機器同士の時刻同期を行う方法として以下の3つのモードがあります。実際によく利用されるのは Server / Clientモード です。
| NTPモード | 説明 | 設定コマンド例 |
|---|---|---|
| Server / Client | クライアントがサーバに同期を取る。最も一般的。 | (config)# ntp server 192.168.1.10 |
| Symmetric Active / Passive(対称モード / ピアモード) | 同じ階層に属するNTPサーバ同士で時刻を同期する。 | (config)# ntp peer 192.168.1.20 |
| Broadcast | サーバがブロードキャストで時刻を配信し、クライアントが受信する。 | (config-if)# ntp broadcast(config-if)# ntp broadcast client |
NTPクライアントの設定
NTPサーバと同期するクライアント設定は以下の通りです。
(config)# ntp server [ ip-address | hostname ] [ prefer ]
- ip-address:NTPサーバのIPアドレス
- hostname:NTPサーバのホスト名(DNS解決が必要)
- prefer:複数サーバを指定した場合、優先するサーバを明示
例:
(config)# ntp server 192.168.1.254 prefer
NTPピア(対称モード)の設定
同じ階層のNTPサーバ同士を同期させたい場合は、以下のコマンドを使用します。
(config)# ntp peer ip-address [ version number ] [ key id ] [ source interface ] [ prefer ]
- ip-address:同期対象のピアのアドレス
- version number:NTPのバージョン(1~4、デフォルトは3)
- key id:認証設定がある場合に指定
- source interface:送信元IPアドレスに使うI/F
- prefer:複数ピアを指定した場合の優先ピア指定
NTPブロードキャストの設定
LAN内でサーバが一斉に時刻を配信し、クライアントが受信する方式です。
サーバ側(送信):
(config)# interface GigabitEthernet0/0
(config-if)# ntp broadcast [ version number ] [ key id ] [ destination-address ]
クライアント側(受信):
(config)# interface GigabitEthernet0/0
(config-if)# ntp broadcast client
なお、NTPv3ではブロードキャストを使用しますが、NTPv4ではマルチキャストを利用します。その場合、以下のコマンドに置き換えます。
- サーバ側:
ntp multicast - クライアント側:
ntp multicast client
NTP:認証とセキュリティ設定
Ciscoデバイスでは、NTPを単純に時刻同期の仕組みとして利用するだけでなく、認証やアクセス制御を組み合わせることで、信頼できるデバイスとのみ通信させることができます。これはセキュリティ対策として重要であり、特に外部のNTPサーバと同期する場合には必須の知識です。
NTP認証の設定手順
NTP認証を導入すると、正しいキーを持つ相手とのみNTP通信を許可できます。設定の流れは以下の通りです。
- 認証機能を有効化
(config)# ntp authenticate - 認証キーの定義
(config)# ntp authentication-key number md5 valuenumber:キー番号value:任意の文字列
(config)# ntp authentication-key 1 md5 Cisco123 - 信頼するキーを指定
(config)# ntp trusted-key key-number - クライアント側でサーバ指定時にキーを使用
(config)# ntp server ip-address key key-number
→ この4ステップで、NTPサーバとクライアント間の認証付き同期が実現します。
NTPアクセス制御(ACL)
ACLを組み合わせることで、どの機器がNTPサービスを利用できるかを制御可能です。特に外部サーバと通信する場合には有効です。
(config)# ntp access-group [ query-only | serve-only | serve | peer ] acl-number
- query-only:制御クエリのみ許可
- serve-only:時刻要求のみ許可
- serve:時刻要求と制御クエリは許可するが、同期化は不可
- peer:全て許可(もっとも広い権限)
よく使われるのは serve-only と peer です。
例えば「社内LANからの時刻要求は許可するが、外部からの同期要求は拒否する」といった制御が可能です。
特定インターフェースでのNTPサービス無効化
デフォルトでは、すべてのインターフェースでNTPが有効になっています。不要なインターフェースでNTPを止める場合は以下のように設定します。
(config)# interface GigabitEthernet0/1
(config-if)# ntp disable
アソシエーションの最大数制限
接続できるNTPクライアントやピアの数を制限することで、不正利用やリソースの浪費を防げます。
(config)# ntp max-associations number
NTPバージョン
- NTPv3(デフォルト)
- IPv4対応
- ブロードキャストを利用
- NTPv4(最新IOSで利用可能)
- IPv4とIPv6をサポート
- 公開鍵暗号化やX.509認証に基づく強化セキュリティ
- マルチキャスト対応
- NTPv3との下位互換あり
バージョンを指定する場合は以下のようにします。
(config)# ntp server 192.168.1.254 version 4