連載
» 2005年08月12日 00時00分 UPDATE

Windowsネットワーク時刻同期の基礎とノウハウ:第1回 Windows OSにおける時刻同期サービスとNTP (3/4)

[小鮒通成,マイクロソフトMVP]

Active Directory 環境での時刻同期のための階層構造

 Windows Server 2003のActive Directory環境では、各クライアントおよびドメイン・コントローラは時刻同期のためのプロトコルとしてNTPを利用している。しかし、その階層構造は独自のものとなっているため、SNTPに似た挙動で時刻の同期が行われる(問い合わせはSymmetric Active Modeで行われるが、応答はSever Modeにて行われる)。

 Active Directoryでは、その頂点をFSMOの役割の1つであるPDCエミュレータが受け持ち、それ以外のドメイン・コントローラはPDCエミュレータあるいはほかのドメイン・コントローラから、時刻同期を行う。各クライアントは直近のドメイン・コントローラ(つまり自身がログオンするドメイン・コントローラ)から、時刻同期を行うようになっている。

 サイトに分割されたActive Directory環境では、基本的には各サイト内の「信頼に足る時刻」を持つドメイン・コントローラから時刻同期を行うが、該当するドメイン・コントローラが存在しない場合、別のサイトにあるドメイン・コントローラあるいはPDCエミュレータから時刻同期を行う。

 マイクロソフトの資料によると、フォレスト・ルート・ドメインのPDCエミュレータ以外のドメイン・コントローラが時刻同期を行う場合、以下の優先順序で時刻同期を行おうとする。筆者の検証でも、資料どおりの挙動がある程度は確認できた。

  1. サイト内の親ドメイン・コントローラ
  2. サイト内のローカル・ドメイン・コントローラ
  3. サイト内のローカルPDCエミュレータ
  4. サイト外の親ドメイン・コントローラ
  5. サイト外のローカル・ドメイン・コントローラ
  6. サイト外のローカルPDCエミュレータ

 細かい話となるが、実際の挙動は資料と異なっている場合がある(特定の状況下で同期を行わない)ので、非常に詳細な制御が必要な場合は注意を要する。

 Active Directory 環境下の時刻同期についての詳細は、以下のマイクロソフトの資料の“Domain Hierarchy-Based Synchronization”の項目を参照いただきたい。

 なおNTPプロトコルの実装では、NTPサーバが自分自身を時刻同期の参照先とすることを認めていないため、例えばPDCエミュレータが時刻を同期する場合、3や6の手順は実行されない。「NTPサーバが自分自身を時刻同期の参照先とすることを認めない」は、ワークグループ環境などでも当てはまるため、覚えておくといいだろう(*)。

◆color=red◇* Windows 2000では、同期先NTP/SNTPサーバを自分自身に設定し、自身を標準時刻を保持している時刻サーバとしたり、w32timeエラー・メッセージなどを回避する方法が一般化していたが、Windows XP以降ではこのような設定を行うことはできない。ただし別の設定を行うことで、自身を標準時刻とすることができる(詳細については第3回参照)。


 ただし、フォレスト・ルート・ドメインのPDCエミュレータは、ドメイン環境での時刻同期ツリーの頂点であり、外部NTPサーバと時刻を同期させる必要があるので、ほかのドメイン・コントローラと挙動が異なる。

PDCエミュレータ上での時刻同期の設定方法

 Active Directory環境で、Windowsのみでマシンが構成されている場合、フォレスト・ルート・ドメインのPDCエミュレータ以外のすべてのマシンは、上記の構成に基づいて自動的に最適な形で時刻同期のためのネットワークが設定されるため、特に管理者が注意することはない。しかし、フォレスト・ルート・ドメインのPDCエミュレータの時刻同期は自動設定されないため、これに対してのみ、外部のNTPサーバから時刻同期するよう設定すればよいだろう。

 ドメイン・コントローラ上では、時刻同期のための[インターネット時刻]タブ(詳細は前ページ参照)は存在しない。よって、コマンドで時刻同期のための設定を行う必要がある。

 コマンドを利用してPDCエミュレータが時刻同期を行う方法は、ワークグループ環境で時刻同期するためのコマンド設定と要領は同じである。なお、以下の設定では[インターネット時刻]タブでの設定と内容的には同じになる。

■方法1:w32tmコマンドで設定する

w32tm /config /manualpeerlist:<NTPサーバのIPアドレス>,0x1 /syncfromflags:manual
w32tm /config /update

■方法2:net timeコマンドでSNTPサーバを指定する

net time /setsntp:<NTPサーバのIPアドレス>,0x1
net stop w32time & net start w32time

 即時に時刻同期させるには「w32tm /resync」コマンドを実行すればよい。前ページで説明したAssociation ModeをClient Modeに設定する方法と比べると、パラメータの一部が「0x8」が「0x1」となっているところだけが異なっている。このパラメータ値には以下の意味がある。

パラメータ 意味
0x0あるいはパラメータ値なし Windows端末同士を含む標準的なNTP時刻同期方法(Symmetric Active/Passive Mode)
0x1 Windows 上のみ実装された定間隔での同期方法
0x2 ドメインおよび外部の両方から時刻を同期する(利用方法は後述する)
0x4 明示的なSymmetric Active/Passive Modeによる同期方法
0x8 明示的なClient/Server Modeによる同期方法(詳細は前ページ参照)
/manualpeerlistの第2パラメータ

 このパラメータ値を変更することで、同期の仕方や同期間隔に影響を与えることができる。上位となる外部NTPサーバの実装に応じて使い分けるとよいだろう。ちなみに上記の値は以下のレジストリ値に記録される。

項目 内容
キー HKEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\W32Time\Parameters
値の名前 NtpServer
REG_SZ
値の内容 time.windows.com,0x1 (初期値)
NTPサーバとの同期方法を指定するレジストリ設定

Windows Timeサービスでの時刻同期間隔について

 Windows Timeサービスでの時刻同期間隔は基本的にはNTPプロトコルの時刻同期間隔に準拠している。標準的なNTPの時刻同期間隔は可変的なものであり、通常は最小同期間隔から同期の状態を確認しながら徐々に間隔が空く形で最終的には最大同期間隔で同期される。この同期間隔は以下のレジストリ値で設定されているため、値を変更することで間隔を変更することが可能だ。

項目 内容
キー HKEY_LOCAL_MACHINEの\SYSTEM\CurrentControlSet\Services\W32Time\Config
値の名前 MinPollInterval
REG_DWORD
値の内容 0xa(ワークグループ環境での初期値。10進では10。2の10乗=1,024秒)
0x6(ドメイン環境での初期値。10進では6。2の6乗=64秒)
最小同期間隔のレジストリ設定

項目 内容
キー HKEY_LOCAL_MACHINEの\SYSTEM\CurrentControlSet\Services\W32Time\Config
値の名前 MaxPollInterval
REG_DWORD
値の内容 0xf(初期値。10進では15。2の15乗=32,768秒)
最大同期間隔のレジストリ設定

 上記の0xaや0x6、0xfという数値は、NTPプロトコルの実装に基づき、2のべき乗を表すことに注意してほしい。例えば上記MinPollInterval値(ドメイン)は、2の6乗=64なので、64秒ごとの同期間隔となる。

 上記のMinPollInterval値およびMaxPollInterval値による同期間隔の実装は、Active Directory環境でもワークグループ環境でも変わることはなく、同じように動作する。

 ただし、NTPServerレジストリ値のパラメータが「0x1」となっている場合は、例外的に定間隔な同期間隔で同期が行われる。この設定はワークグループ環境での初期状態および [インターネット時刻]タブから設定したときには無条件で有効となる。この状態では、(一度も時刻同期したことがない場合)最初に時刻同期した後に、以下のレジストリ値で定められた間隔で時刻同期が実施される。必要に応じて設定の変更が可能だ。

項目 内容
キー HKEY_LOCAL_MACHINEの\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
値の名前 SpecialPollInterval
REG_DWORD
値の内容 0x93a80(10進数では604,800秒)(ワークグループ環境での初期値)
0xe10(10進数では3,600秒)(ドメイン環境での初期値)
同期間隔のレジストリ設定

 上記の値は単に秒数で設定されるため、例えばワークグループ環境であれば10進数換算で604,800秒(=7日)ごとに時刻が同期される。ドメイン環境では3,600秒、つまり1時間間隔となる。またSpecialPollInterval値で同期される場合、レジストリに前回の同期時刻が記録されるため、Windows Timeサービスの起動時ごとに同期されるわけではなく、前回同期時からカウントされる。SpecialPollInterval値による同期記録は同じキーにあるSpecialPollTimeRemaining値に記録されるため、この内容を空にしておけば記録情報を初期化できる。なお、SpecialPollInterval値は通常フォレスト・ルート・ドメイン内における、PDCエミュレータでないドメイン・コントローラや、ドメインに参加しているクライアントでは利用されないため、初期値にあるように(10進数換算で)3,600秒(=1時間)ごとに時刻を更新することはない。

 SpecialPollInterval値を使った一定時間間隔での同期設定はNTPプロトコルに基づく実装ではない。だが明示的な間隔での時刻同期が設定できるため、Windows 2000でのWindows時刻同期の実装に慣れ親しんだ管理者には理解しやすいだろう。また、時刻同期を頻繁には行わせたくない場合に便利な設定であろう。

【更新履歴】

【2005/08/12】■方法1:w32tmコマンドで設定する」において、w32コマンドのオプション・パラメータを「/syncformflags:manual」としておりましたが、正しくは「/syncfromflags:manual」でした。お詫びして訂正させていただきます。


Copyright© 1999-2017 Digital Advantage Corp. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。