Active DirectoryのNTP設定について

NTPとはコンピューターの時刻を正しい時刻にするための時刻同期用のプロトコルです。


コンピューターを起動し続けていると徐々に時刻がずれていきます。

そのため、NTPを利用して定期的に他のコンピューターから時刻情報を受け取り、自分の時刻を修正する必要があります。


ADで利用されているKerberos認証では、発行される認証用のチケットに時刻情報が含まれています。

そのため、ドメインコントローラーとクライアント間の時刻が 5分以上ずれていると認証に失敗してしまいます。

AD環境ではドメインコントローラーとクライアントの時刻が同期されていることが重要です。


今回はAD環境におけるNTPについて紹介します。


1.ADドメイン環境の時刻同期について

ドメインコントローラーの FSMO には「PDCエミュレータ」という時刻同期を司る役割があります。

ドメイン環境では上図のように FSMO (PDCエミュレータ)を起点に時刻同期がされます。

  • クライアントPC:ドメインコントローラーのどれかを参照
  • ドメインコントローラー(FSMO以外):ドメインコントローラー(FSMO)を参照
  • ドメインコントローラー(FSMO):自分自身もしくは他NTPサーバーを参照


なお、本記事では分かりやすくするため、FSMOがPDCエミュレータを含む全ての役割を持っていると仮定しています。



2.NTPクライアントについて

ドメインコントローラー(FSMO以外)とクライアントは既定で時刻同期先が設定されているため、構成を変更しない限りは追加設定は不要です。

ドメインコントローラー(FSMO)は外部NTPサーバーを参照させることも出来ます。

ドメインコントローラーがインターネットに接続できる場合、正確な時刻をアドバタイズするために外部NTPサーバーを参照させることが一般的です。

よく使われるのは下記の「ntp.nict.jp」です。
http://jjy.nict.go.jp/tsp/PubNtp/index.html


2.1.NTPクライアント設定方法

ドメインコントローラー(FSMO)にNTPクライアントを設定するためには、コマンドプロンプトで下記のコマンドを実行します。

w32tm /config /update /manualpeerlist:”ntp.nict.jp,0x8” /syncfromflags:manual /reliable:yes



各オプションについて下記に記載します。

/update

Windows Time サービスを再起動せずに変更したレジストリを読み込むことが出来ます。

しかし、後述する同期確認コマンドの結果に反映されないことがあるため、手動でのサービスの再起動を推奨します。


/manualpeerlist

参照するNTPサーバーをIPアドレスもしくはFQDNで指定します。例として「ntp.nict.jp」を指定しています。

「0x8」は同期間隔をRFC1305に準拠した間隔に設定します。「0x9」にすることでWindowsで設定されている一定間隔にすることも可能です。


/manualpeerlistの値は下記のレジストリに格納されています。

項目内容
キーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpClient
値の名前NtpServer
REG_SZ
NTPサーバー名, 同期モードのパラメーター


「0x9」に設定した場合、下記の「SpecialPollInterval」の値を使用します。

項目内容
キーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services¥W32Time¥Parameters
値の名前SpecialPollInterval
REG_DWORD
秒数



/syncfromflags

時刻同期のタイプを設定します。


「manual」は上述のNtpServerレジストリ値で指定したサーバーから同期を行う設定です。


/syncfromflagsの値は下記のレジストリに格納されています。

「manual」を指定した場合、レジストリには「NTP」が設定されます。

項目内容
キーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Parameters
値の名前Type
REG_SZ
NTP



/reliable

自分自身をNTPサーバーとして公開するかどうかを設定します。


「yes」を設定した場合、権限のあるNTPサーバーとして公開します。

「No」を設定した場合、他サーバーの設定により、権限のあるNTPサーバーとして公開するかどうか決定します。


/reliableの値は下記のレジストリに格納されています。

「yes」を指定した場合、レジストリには「0x5」が設定されます。

項目内容
キーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config
値の名前AnnounceFlags
REG_DWORD
0x5



「0x5」という値は下記の「1」と「4」を組み合わせた設定になります。

また、「No」を指定した場合はレジストリに「0xa」が設定され、「2」と「8」を組み合わせた設定になります。

内容
0NTPサーバーとして公開しない
1NTPサーバーとして公開する
2他サーバーの設定により、NTPサーバーとして公開するか決定する
4権限があるNTPサーバーとして公開する
8他サーバーの設定により、権限があるNTPサーバーとして公開するか決定する




3.NTPサーバーについて

ドメインコントローラーはデフォルトでNTPサーバー機能が有効になっています。

そのため、追加設定無しで他ドメインコントローラーやクライアントへ時刻情報を渡すことが出来ます。


NTPサーバーの有効化は下記のレジストリに設定されています。

項目内容
キーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer
値の名前Enabled
REG_DWORD
0x1



3.1.Linuxから時刻を参照される場合

Linuxサーバーから時刻を参照される場合、デフォルトの設定だと正常に時刻同期されません。


Kerberos認証は時刻の差異が5分まで許容されているので、Windows環境の時刻情報は信頼性が低いです。

一方、Linux環境では正確な時刻情報を必要とします。

この違いはそれぞれのOSがNTPを利用する目的の歴史的背景によるものです。


NTPは時刻情報を取得した後、その時刻情報が正しいかどうか判断をします。

そのため、Linuxが時刻情報を受け取ってもその情報が正しくないと判断して破棄してしまいます。


下記のレジストリで「LocalClockDispersion」を「0」に設定することでルート分散の値を小さくし、時刻情報の信頼性を高める必要があります。

項目内容
キーHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config
値の名前LocalClockDispersion
REG_DWORD
0x0




4.NTP同期確認

時刻同期の設定した後は設定を正しく反映させるために Windows Time サービスを再起動します。

net stop w32time
net start w32time


サービス再起動後、下記のコマンドで手動で時刻を同期します。

w32tm /resync


正常に時刻同期が出来ていることを確認します。

w32tm /query /status
w32tm /query /status /verbose



AD環境のNTP設定については以上です。

コメント

  1. yjws より:

    > manualpeerlist:”ntp.nict.jp,0x8″
    このダブルクォーテーションがどちらも誤っています。(正しくは「”」)
    ここの記事は検索上位でよく参照されていると存じますので修正いただけると幸いです・・・

    • liglog より:

      ご指摘いただきありがとうございます。
      該当部分を修正いたしました。

      今後もお気付きの点がございましたらお知らせいただけますと幸いです。

タイトルとURLをコピーしました