第2回 Active Directoryおよびワークグループ環境での時刻同期:Windowsネットワーク時刻同期の基礎とノウハウ(改訂版)(2/5 ページ)
Windows Server 2008 R2を使ったNTPサーバのセットアップ方法や動作確認、注意点について、Active Directoryドメイン編とワークグループ編に分けて詳しく解説する。
Active Directory環境で、PDCエミュレータを権威ある時刻サーバに設定する
Windows Server 2003 R2以前のWindows OSと同じく、Active Directoryでは「フォレスト・ルート・ドメインのPDCエミュレータ」が権威ある時刻サーバとして設定されていさえすれば、Active Directory全体の時刻同期機能は正常に動作する。そのため、PDCエミュレータ(における時刻同期)の設定状態は必ず確認しなければならない。
●外部NTPサーバから時刻を同期する方法
PDCエミュレータが外部NTPサーバから時刻を同期するには、例えば以下のコマンドを実行すればよいだろう(「ntp.nict.jp」と同期したい場合)。w32tm /configコマンドはWindows Timeサービスの設定変更を行うオプションであり、/updateオプションを付ければ、Windows Timeサービスを再起動しなくてもレジストリ情報が読み込まれる。ただし、この後紹介する、時刻が同期できているかを確認するw32tm /queryコマンドに正常に反映されないことがあるため、Windows Timeサービスを再起動してリフレッシュすることをお勧めする。なお、以前のWindows OSで利用できたnet time /setsntpコマンドは、Windows Server 2008 R2では利用できない点には注意してほしい。
w32tm /config /update /manualpeerlist:ntp.nict.jp,0x9 /syncfromflags:manual /reliable:YES
先ほど紹介した、マイクロソフトのサポート技術情報「Windows Server で権限のあるタイム サーバーを構成する方法」では、レジストリ値を直接変更する方法が紹介されているが、この方法に添って、w32tm /configコマンドとの関係を絡めて説明してみよう。
●時刻サーバとしてアドバタイズするかの設定
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINEの SYSTEM\CurrentControlSet\services\W32Time\Config |
値の名前 | AnnounceFlags |
型 | REG_DWORD |
値 | 0x5 |
時刻サーバとしてアドバタイズするかどうかなどを設定するレジストリ |
これは「時刻サーバとしてアドバタイズ(公開)するかどうか」「時刻サーバとして権限があるかどうか」を決定するレジストリ値であり、w32tm /config /reliableオプションでは「YESは0x5」「NOは0xa」と設定される。4bitで構成され、bitごとに以下のような意味を持っているが、0x5であれば「(状況に関係なく)権限のある*1時刻サーバとして公開する」ことを意味する。
*1 「権限のある」とは「authoritative」の訳であり、本来ならば「権威のある」とすべきものであるが、サポート技術情報などの訳語に合わせてここでは「権限のある」と表記している。
値 | 意味 |
---|---|
全bitが0(0) | 時刻サーバとして公開しない |
1bit目が1(1) | 時刻サーバとして公開する |
2bit目が1(2) | 他のマシンとの兼ね合いで、時刻サーバとなるか決定される |
3bit目が1(4) | 権限があるサーバとして公開される |
4bit目が1(8) | 他のマシンとの兼ね合いで、権限があるサーバとなるか決定される |
AnnounceFlagsレジストリ値の意味 bit位置は、最下位bitが1bit目、その隣が2bit目、……、と数える。 |
●NTPの同期をどこから行うかの設定
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINEの SYSTEM\CurrentControlSet\services\W32Time\Parameters |
値の名前 | Type |
型 | REG_SZ |
値 | NTP |
NTPの同期ソースを設定するレジストリ |
これは「NTPの同期をどのマシンから行うか」を決定するレジストリ値であり、w32tm /config /syncfromflagsオプションで設定される。次の4つの種類がある。
値 | 意味 |
---|---|
NoSync | 同期を行わない(/syncfromflags:no) |
NTP | NtpServerレジストリ値(次の表参照)で指定したサーバから同期を行う(/syncfromflags:manual) |
NT5DS | ドメイン階層により決定されたサーバから同期を行う(/syncfromflags:domhier) |
AllSync | ドメイン階層と外部NTPサーバの両方から同期を行う(/syncfromflags:all) |
Typeレジストリ値の意味 |
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINEの SYSTEM\CurrentControlSet\services\W32Time\Parameters |
値の名前 | NtpServer |
型 | REG_SZ |
値 | <NTPサーバ名>,<同期モードのパラメータ> |
参照先サーバと同期モードを設定するレジストリ |
「参照先のNTPサーバ」を指定する第1パラメータと、「同期モードと同期の間隔」を指定する第2パラメータの2つで構成され、w32 /config /manualpeerlistコマンドで設定される。複数のサーバを記載する場合は、半角スペースで区切ったうえ、全体を「" "」(ダブル・クォーテーション)で囲む必要がある。
このレジストリ値の第2パラメータでは、同期モードと同期間隔を同時に設定できる。以下のような意味を持っており、組み合わせて使うことができる。例えば0x9の場合、「Clientモードで、かつ一定の間隔で同期する」ことを意味する。ちなみに0x0または値なしの場合は0x4と同様の動作をする。
値 | 意味 |
---|---|
0x1 | Symmetric Activeモードで同期/Windowsで実装した一定間隔での同期 |
0x2 | Symmetric Activeモードで同期/フォールバック時に利用するNTPサーバを指定 |
0x4 | Symmetric Activeモードで同期/RFC1305に準拠した間隔での同期 |
0x8 | Clientモードで同期/RFC1305に準拠した間隔での同期 |
同期モードのパラメータの意味 4bitの値を組み合わせて(加算、もしくはORして)指定する。 |
●同期間隔の設定
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINEの SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpClient |
値の名前 | SpecialPollInterval |
型 | REG_DWORD |
値 | <秒数> |
同期間隔を設定するレジストリ |
SpecialPollIntervalには、「Windowsで実装した一定間隔での同期」を行う際の同期間隔を設定する(NtpServerレジストリ値の第2パラメータを0x1か0x9にした場合)。w32tmコマンドでは設定できないので、レジストリ・エディタで直接設定する必要がある。ドメイン環境では(10進法で)3600秒(=1時間)が設定されているのでそのままでも問題はないが、必要があれば変更したうえ、Windows Timeサービスを再起動する。ワークグループの場合は、デフォルトの間隔が長すぎるので、適切な設定が必要である(詳細は後述)。
なお、「RFC1305に準拠した間隔での同期」を利用(NtpServerレジストリ値の第2パラメータを0x1か0x9以外に)する場合は、上述したように64秒→128秒→256秒→512秒→……、というふうに、徐々に同期間隔が延びていくが、最小間隔と最大間隔をレジストリ値で調整できる。
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINEの SYSTEM\CurrentControlSet\services\W32Time\Config |
値の名前 | MinPollInterval(最小間隔) |
型 | REG_DWORD |
値 | <秒数の2の対数> *例えば64秒の場合、64=2^6(2の6乗)なので、6を指定する *4(16秒)未満の値は指定できない |
値の名前 | MaxPollInterval(最大間隔) |
型 | REG_DWORD |
値 | <秒数の2の対数> *例えば1024秒の場合、1024=2^10(2の10乗)なので、10(0xa)を指定する *15(32768秒)を超える大きな値は指定できない |
同期の最小と最大間隔を設定するレジストリ |
上記以外の注意点として、同期モードは、外部NTPサーバに対しては「Clientモード」が適切であり「Symmetric Activeモード」はあまり適切でない(不要なPeer同期に関する情報が送られてしまうため)といったこともあり、利用するパラメータ値は「0x9」(一定間隔の同期)か「0x8」(RFC1305に準拠した同期)のどちらかを使うとよいだろう。
●NTPサーバの有効/無効の設定
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINEの SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer |
値の名前 | Enabled |
型 | REG_DWORD |
値 | 0x1 (有効) |
NTPサーバの有効/無効を設定するレジストリ |
これは「NTPサーバ機能が有効かどうか」を決定するレジストリ値だか、ドメイン・コントローラではすでに有効になっているため、基本的に気にする必要はない。ただしワークグループ環境の場合、このレジストリ値が有効になっていないとNTPサーバとして機能しない。
●内部クロックに同期させる方法
外部NTPサーバに参照できない環境の場合、PDCエミュレータのCMOSクロックに同期させることで、自分自身をStratum 1のNTPサーバとして構成することができる。この場合、w32tm /config /updateコマンドを以下のように実行すればいいだろう。その後、Windows Timeサービスを再起動させる。
w32tm /config /update /manualpeerlist:"" /syncfromflags:manual /reliable:YES /localclockdispersion:0
外部のNTPサーバに同期する際の設定と違う点は、以下の2点だ。
- NtpServerレジストリ値(/manualpeerlistオプション)では、サーバ名を指定しない。自分自身を同期先に指定することは、RFC1305で許されていないので注意する。
- LocalClockDispersionレジストリ値(/localclockdispersionオプション)に“0”を設定する。Stratum 1として設定する場合、この値が0になっていないとほかのNTPサーバから参照されたとき、ルート分散の値が大きくなりすぎて、不正確なNTPサーバと認識されてしまう。UNIX系のNTPサーバが存在する場合には注意する必要がある。ちなみにレジストリに関する情報は次の通りである。
項目 | 内容 |
---|---|
キー | HKEY_LOCAL_MACHINEの SYSTEM\CurrentControlSet\services\W32Time\Config |
値の名前 | LocalClockDispersion |
型 | REG_DWORD |
値 | 0x0 (デフォルト値は0xa) |
内部クロックに同期させるためのレジストリ設定 |
●Active Directory環境で時刻同期ができているか確認する方法
Windows Server 2008 R2ドメイン・コントローラやメンバ・サーバ、Windows 7クライアントが時刻同期できているか、を確認する簡単な方法は、w32tm /query /statusコマンドを実行することだ。以下のように実行することで、参照先NTPサーバはどれかや、いつ同期できたか、同期間隔はどれくらいか、などの情報が取得できる。
w32tm /query /status
結果の各フィールドの意味は次の通りである。
項目 | 説明 |
---|---|
閏インジケーター | Leap Indicator(うるう秒があるかどうか/同期状態)を表す。0は正常、3は未同期 |
階層 | 自身のNTP階層を指す |
参照ID | Reference (Clock) IDを指す。参照先NTPサーバの情報 |
最終正常同期時刻 | 最後に同期が成功した時刻を表す |
ソース | 参照先NTPサーバの名前を表す |
ポーリング間隔 | 時刻同期の間隔(2のべき乗で表した秒数)を表す(例:10→2の10乗=1024秒) |
w32tm /query /statusの結果の項目と説明(一部のみ) |
最終正常同期時刻とポーリング間隔を突き合わせれば、「直近で正常に同期できているか」が確認できるが、はっきりと直近の時刻同期の成功失敗を知りたい場合は、/verboseオプションを付けて実行すると「最終同期エラー」項目で確認できる。
また/computer:<コンピュータ名>オプションを付けると、別マシン上でw32tm /queryコマンドをリモート実行できる。
もちろん、イベント・ログのシステム・ログに記録されるTime-Service ID 35/37から、正常に同期できているかどうかを確認することも可能である。Time-Service ID 37は「NTPサーバをポーリングしていること」を示し、Time-Service ID 35は「ポーリングした時刻情報を内部的に同期していること」を示している。ただし、このイベントは同期のたびに記録されるものではないので、w32tm /queryコマンドを使う方が直近の確認はしやすいだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.