【AD DS】Windows の NTP サーバーの設定や基本動作について

時刻同期とは、ネットワーク上にあるコンピューター端末のシステム時刻を正確にあわせる仕組みのことです。ネットワーク上にある各コンピューター同士で、正確な時刻を共有することはシステムの運用/管理において重要です。

時刻同期の代表的なプロトコルとして、NTP(Network Time Protocol)があります。Windows OS でもシステムの時刻の時間をあわせるために、NTP を利用して時刻同期を行っています。特に Active Directory ドメインを導入している環境では、主な認証方式に Kerberos 認証が利用されているため、ドメイン内の端末間で時刻ずれがおきないように NTP で時刻同期を行い、同じシステム時刻を共有しています。NTP の基礎知識やドメイン環境での時刻同期の仕組みについては、以下の記事にて紹介しております。

関連記事

時刻同期とは、ネットワーク上にあるコンピューター端末のシステム時刻を正確にあわせる仕組みのことを指します。ネットワーク上にある各コンピューター端末にて、正確な時刻を共有することはシステムの運用/管理において重要です。 時刻同期の代表的なプ[…]

今回は、NTP サーバーの各種設定や内部動作について紹介します。

 

レジストリ設定

Windows Time サービス(W32Time サービス)とは、Windows コンピューターにて NTP 時刻同期を行うための機能です。W32Time サービスの動作に関する設定は、以下のパスにある全てレジストリの設定によって決まります。NTP サーバーの設定、また NTP クライアントの設定も以下のレジストリとなります。

HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥W32Time

NTP サーバーの設定に関するレジストリ設定を紹介します。

 

Enabled

W32Time サービス内には NTP サーバーとしての役割が含まれており、W32Time サービス起動時に以下のレジストリ値を読み取って、NTP サーバーとして動作するかどうかが決定されます。

キー:HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥W32Time\TimeProviders\NtpServer
値:Enabled
型:REG_DWORD
設定値: 1 (有効)、0(無効)
Active Directory ドメイン環境では、既定でドメイン コントローラーのみが NTP サーバーとして動作しています。ドメイン環境で管理されているメンバー サーバーやクライアント端末では、NTP サーバーとしての動作は無効化(Enabled の設定値が 0)されています。
Enabled の設定値が 1 に設定されており、NTP サーバーとしても動作する場合とそうでない場合の基本的な動作の違いとしては、以下の2点となります。
  • NTP クライアントからの時刻同期要求に応答
  • NTP クライアントとしての同期の動作モードが “Symmetric Active モード”

NTP サーバーとして構成されていない場合には、NTP クライアントから時刻同期要求を受信しても無視します。また、NTP クライアントとして動作するとき、Enabled の設定値が 0 となっている端末においては、同期の動作モードは “Client モード” となります。

 

AnnounceFlags

Active Directory ドメイン環境では、NTP クライアントが NTP サーバーを探索する際に、NTP サーバーの AnnounceFlags の値を考慮します。AnnounceFlags のレジストリは、基本的にはドメイン コントローラーが自身をタイム サーバーとして公開(アドバタイズ)するかどうかや、信頼できるタイム サーバーとして公開するかどうかを制御するためのものです。

キー:HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥W32Time\Config
値:AnnounceFlags
型:REG_DWORD
AnnounceFlags として設定する値の各フラグは以下の通りです。
フラグ 意味
0x00 自分自身をタイムサーバーとして公開しない
0x01 自分をタイム サーバーとして公開する
0x02 自動的にタイム サーバーとして公開するかどうか決定する
0x04 自分を信頼できるタイム サーバーとして公開する
0x08 自動的に信頼できるタイム サーバーとして公開するかどうか決定する

AnnounceFlags の設定値は、有効にしたいフラグの合計値を設定します。例えば、このレジストリの既定値は 0xa (10進数では 10)であり、これは 0x2+0x8 の合計値となります。

レジストリ AnnounceFlags は、通常、ドメイン環境のみで使用されるものとなりますが、0x4 のフラグのみ、ワークグループの NTP サーバーの動作へ影響を及ぼします。この詳細については、後述する “ワークグループ環境の NTP サーバー” にて説明します。

 

Active Directory ドメイン環境の NTP サーバー

Active Directory ドメイン環境では、Kerberos 認証を利用できるように NTP による時刻同期を行っています。

Active Directory のドメイン環境では、ユーザーやコンピューターなどのリソースを一元管理できますが、その際の認証方式の基盤は Kerberos 認証で実現されています。Kerberos 認証の仕組みにより、シングル サインオン(SSO)が実現でき、一度の認証でドメイン内にある様々なリソースにアクセスできるようになります。Kerberos 認証の基本知識については、以下の記事にて紹介しております。

関連記事

Kerberos 認証とは、ネットワーク認証方式の一つです。 Active Directory のドメイン環境では、ユーザーやコンピューターなどのリソースを一元管理できますが、その際の認証方式の基盤は Kerberos 認証で実現されていま[…]

Kerberos 認証では、Kerberos チケットの盗聴による「なりすまし」を防ぐために、チケットにタイムスタンプ(送信時間)が記録されています。チケットを受信したコンピューターは、チケットのタイムスタンプと端末のシステム時刻に5分以上のずれがあるとチケットを無効と判断して認証に失敗します。

そのため、ドメイン環境下では管理対象となるコンピューターが5分以上の時刻ずれが発生しないように、NTP 同期する動作となっています。ドメイン環境の NTP ネットワークでは、既定では全てのドメイン コントローラーが NTP サーバーとして動作し、ドメイン内で管理している各端末に時刻を提供しています。Windows Server OS をドメイン コントローラーへ昇格すると、レジストリ Enabled が 1 に自動で変更され、自動でタイムサーバーとなります。また、Windows OS の端末をドメインに参加させると、レジストリ Type が NT5DS もしくは AllSync に自動で変更され、基本的にはログオン先のドメイン コントローラーから時刻同期を行う動作となります。

NTP ネットワークにある NTP サーバーは階層構造となっており、上位のサーバーから時刻の情報を受けて同期を行う構造となっています。この階層構造のレベルのことを、ストラタム(Stratum)として表現されます。ドメイン環境の NTP ネットワークの範囲は「フォレスト」単位であり、フォレストのルートドメインにある PDC エミュレーターの役割をもつドメイン コントローラーが、最上位の NTP サーバー(ストラタム1)となります。

フォレスト内にある各ドメイン コントローラーの NTP 階層構造は自動で決まります。ドメイン コントローラーの同期先は、以下の表のスコア付けアルゴリズムに従って各ドメイン コントローラーに点数をつけ、点数が最も高いドメイン コントローラーを同期先として選出して時刻同期を行います。各ドメイン コントローラーのストラタムは、同期先となるドメイン コントローラー(NTP サーバー)のストラタムの数値に+1とした数値となります。

順番 条件1 条件2 条件3 点数
同一サイト 親ドメインの DC   GTIMESRV:14点
そのほか:10点
同一サイト 同一ドメインの DC GTIMESRV 12点
同一サイト 同一ドメインの PDC   9点
別サイト 親ドメインの DC   GTIMESRV:6点
そのほか:2点
別サイト 同一ドメインの DC GTIMESRV 4点
別サイト 同一ドメインの PDC   1点
 
上記の表は、ドメイン コントローラーが同期先となるドメイン コントローラー(NTP サーバー)を選択するアルゴリズムです。
表の順番で、NTP サーバーとなるドメイン コントローラーを探し、見つけたドメイン コントローラーに点数をつけます。見つけた全てのドメイン コントローラーの中から点数が一番高いドメイン コントローラーが選定されます。
 
Active Directory ドメイン環境では、NTP クライアントが NTP サーバーを探索する際に、NTP サーバーの AnnounceFlags の値を考慮します。Windows OS では、AnnounceFlags の既定値は 0xa となっており、タイムサーバーとして公開するかどうかや、さらに信頼できるタイム サーバーとして公開するかどうかは、ドメイン環境におけるサーバーの役割に応じて次のように自動で決定します。
  • フォレスト ルート ドメインの PDC エミュレーター
    ⇒信頼できるタイム サーバーとして公開
  • フォレスト ルート ドメインの PDC エミュレーター以外の全てのドメイン コントローラー
    ⇒通常のタイムサーバーとして公開
  • メンバー サーバーやクライアント端末
    ⇒タイム サーバーとして公開しない
各ドメイン コントローラーが「信頼できるタイム サーバー」、「通常のタイム サーバー」として公開されているかどうかは、nltest コマンドで確認することができます。
nltest /dsgetdc: /server:<ドメイン コントローラー名>
実行例

C:\>nltest /dsgetdc: /server:TEST01DC01
DC: \\TEST01DC01.test01.local
アドレス: \\192.168.1.1
ドメイン GUID: 0596e81a-e7b2-4ad0-992a-45fb3b3f4dfa
ドメイン名: test01.local
フォレスト名: test01.local
DC サイト名: Default-First-Site-Name
本サイト名: Default-First-Site-Name
フラグ: PDC GC DS LDAP KDC TIMESERV GTIMESERV WRITABLE DNS_DC DNS_DOMAIN DNS_FOREST CLOSE_SITE FULL_SECRET WS
コマンドは正常に完了しました

C:\>

フラグに TIMESERV のみが含まれている場合は、ドメイン コントローラーが「通常のタイム サーバー」として公開されていることを示しています。また、GTIMESERV も含まれている場合は、そのドメイン コントローラーが「信頼できるタイム サーバー」として公開されていることを示します。

 

NTP サーバーとして動作しているサーバー(ドメイン コントローラー)が、より上位の NTP サーバーとの時刻同期に失敗した場合、NTP サーバーとしてのアドバタイズを停止します。ただし、「信頼できるタイム サーバー」については、時刻同期が行えなかったとしても、例外的にアドバイスを続けます。

 

ワークグループ環境の NTP サーバー

ワークグループでの環境では、1週間に1度、NTP サーバーと同期するように既定で設定されています。Windows Server 2008 R2 以降の OS では、W32Time サービスはワークグループ環境では通常は停止状態となるような構成となっています。ワークグループ環境の NTP クライアントの動作としては、タスク スケジューラーに登録されたタスク「Time Synchronization」により W32Time サービスを開始して時刻同期を行い、同期が成功すれば W32Time サービスは終了します。

ワークグループ環境では、 W32Time サービスが停止状態となってしまうため、ワークグループの Windows サーバーを NTP サーバーとして動作させるには W32Time サービス を常時稼働させた状態にする必要があります。ワークグループの Windows サーバーを NTP サーバーとするために、必要な作業手順は以下の通りです。

  1. レジストリを設定
  2. W32Time サービスを常時稼働する状態に設定
  3. UDP ポート 123 の通信を許可

各手順の詳細は以下の通りです。

① レジストリを設定

ワークグループ環境では、既定で NTP サーバーとしての機能は無効化されています。そのため、NTP サーバーとして動作させたい場合には、レジストリ Enabled の設定値を1に設定する必要があります。

キー:HKEY_LOCAL_MACHINE¥SYSTEM¥CurrentControlSet¥Services¥W32Time\TimeProviders\NtpServer
値:Enabled
型:REG_DWORD
設定値: 1 
 

② W32Time サービスを常時稼働する状態に設定

W32Time サービスはワークグループ環境では、通常は停止状態となるような構成となっているため、NTP サーバーとして常時動作させたい場合には、以下の2つの設定を行う必要があります。

① W32Time サービスのスタートアップの種類を “自動” 
[サービス] を起動し、サービス名が Windows Time (W32Time) となっているサービスの [スタートアップの種類] を “自動” に変更して、[OK] をクリックします。

 

② W32Time サービスの自動停止タスクのトリガーの削除
ワークグループ端末では1週間に1度、NTP サーバーと同期するように既定で設定されています。時刻同期を行う際には、タスク スケジューラーに登録されているタスク「Time Synchronization」により、W32Time サービスを開始して時刻同期を行い、同期に成功すれば W32Time サービスは終了するという操作を行います。そのため、タスク「Time Synchronization」を起動するトリガーを削除し、W32Time サービスを自動で開始/停止する操作が行われないように構成します。

タスク「Time Synchronization」のトリガーを削除するには、以下のコマンドを実行します。(コマンドは管理者権限で実行してください)

sc triggerinfo w32time delete
 

③ UDP ポート 123 の通信を許可

W32Time サービスにおける NTP パケットのやり取りは、UDP ポート 123 を用いて通信します。クライアントからの NTP Request を受信するために、Windows ファイアウォールにより UDP ポート 123 の受信を許可する設定を行う必要があります。