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」を組み合わせた設定になります。
値 | 内容 |
0 | NTPサーバーとして公開しない |
1 | NTPサーバーとして公開する |
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設定については以上です。
コメント
> manualpeerlist:”ntp.nict.jp,0x8″
このダブルクォーテーションがどちらも誤っています。(正しくは「”」)
ここの記事は検索上位でよく参照されていると存じますので修正いただけると幸いです・・・
ご指摘いただきありがとうございます。
該当部分を修正いたしました。
今後もお気付きの点がございましたらお知らせいただけますと幸いです。