連載
» 2005年11月22日 00時00分 公開

Windowsネットワーク時刻同期の基礎とノウハウ:第3回 UNIXベースのNTPサーバとWindows Timeサービス (2/3)

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

 Active Directory環境では、フォレスト・ルート・ドメインのPDCエミュレータ以外は、すべて自動的に最適な時刻同期環境が設定されているため、基本的に特別な調整や制御は不要である。しかし、この恩恵が受けられるコンピュータはドメインに参加しているWindows 2000以降のOSのみであり、ワークグループ構成のWindowsやLinuxコンピュータは、手動で設定を行わなければならない。

 またドメインに参加しているコンピュータ間においても、例えば複数サイトが存在する環境で、サイト間の通信を明示的に制限する必要がある場合など(セキュアなルータや、DMZを介した環境で各サイトのゲートウェイに要さいホストを設置するなど)、手動で制限を行う必要があるケースは考えられる。以下、順を追って見ていこう。

ドメインに参加していないコンピュータの時刻同期を行う

 Active Directory上の時刻同期はNTP階層のそれとは異なる、と第1回で述べたが、実際のところは、NTPプロトコルに則した時刻同期は行われているため、ワークグループのWindowsやLinuxコンピュータは、Active Directory環境の任意のNTPサーバ(=ドメイン・コントローラ)から時刻を同期させることができる。

 Active Directory環境であっても、Windows Timeサービスは(ntpdとは異なり)時刻同期のため接続してくるほかのコンピュータを拒否することはできない。よって、簡便な方法であればネットワーク的に直近のドメイン・コントローラを参照先に指定するか、正確性を求めるのであれば(Active Directory環境で基準となっている)フォレスト・ルート・ドメインPDCエミュレータに同期を行えばよい。

 ただし、PDCエミュレータが信頼に足る時刻を保持していないと、それ以外のドメイン・コントローラも含めて時刻同期が行えないため、基本的にはPDCエミュレータが外部のNTPサーバから時刻同期を行っている必要がある。閉じたネットワーク環境で利用している場合、以下のマイクロソフトの資料にある「内部のハードウェア クロックを使用するように Windows タイム サービスを構成する」方法に基づいて、権威あるサーバとして設定しておく。ntpdで同期させたいのであれば、併せて前述したLocalClockDispersionレジストリ値を0に設定しておく必要があるだろう。

サイト間の時刻同期を特定のドメイン・コントローラでのみ実施させたい

 Active Directory環境では、通常は、サイト内ドメイン・コントローラ間の時刻同期は、親ドメインのドメイン・コントローラが参照先NTPサーバとなって行われるが(詳細は第1回を参照)、フォレスト・ルート・ドメイン(シングル・ドメイン含む)では親ドメインがないため、ドメイン内のすべてのドメイン・コントローラはPDCエミュレータに対して、同期を行おうとする。

 サイト間での、このNTPパケットのトラフィックを最小限に抑え、かつ特定のサーバ間だけでやりとりさせたい場合は、各サイト内に権威ある時刻サーバを明示的に設定すればよい。すると、サイト内のドメイン・コントローラは、サイト内の権威ある時刻サーバに対して時刻同期を行うようになる(ほかのドメイン・コントローラにレジストリ設定を加える必要はないが、w32tm /resync /rediscover コマンドでの同期情報の初期化が必要)。そして各サイトの権威ある時刻サーバについて、明示的にPDCエミュレータを時刻同期先として設定し、PDCエミュレータが外部NTPと同期を取るようにすればよいだろう。

サイトごとに権威ある時刻サーバを設定した例
Active Directory環境で時刻同期の参照先を制御するためには、各サイト内にそれぞれ権威ある時刻サーバを設定し、サイト内の各コンピュータはその時刻サーバを頂点として階層を形成するようにする。権威ある時刻サーバはPDCエミュレータに対して、明示的に時刻同期を行うように設定すれば、権威ある時刻サーバ以外は(ほかのサイト上の)PDCエミュレータに時刻同期を行わないようになる。

 サイト内での権威ある時刻サーバを指定するためには、以下のレジストリ値を、権威を与えたいドメイン・コントローラにそれぞれ設定する。

項目 内容
キー HKEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\W32Time\Config
値の名前 AnnounceFlags
DWORD
値の内容 0x5
 
項目 内容
キー HKEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\W32Time\Parameters
値の名前 Type
REG_SZ
値の内容 NTP
値の名前 NTPServer
REG_SZ
値の内容 <PDCエミュレータのIPアドレス>
サイト内での権威ある時刻サーバを指定するための設定

 AnnounceFlagsレジストリ値の意味であるが、マイクロソフトの資料および筆者が検証した限りでは、値の内容は4bit相当の構成となっていると考えられる。それぞれのbitはフラグとして機能し、時刻サーバとしての機能の公開と時刻サーバとしての権威の有無について、以下のような意味を持っている。

意味
0(全bitが0) 自身を時刻サーバとして公開しない
1(1bit目が1) 明示的に、自身を時刻サーバとして公開する
2(2bit目が1) (Windows Timeサービスの設定に応じて)自動的に、自身を時刻サーバとして公開するかどうか決定する
4(3bit目が1) 明示的に、自身の時刻サーバに権威があると公開する
8(4bit目が1) (Windows Timeサービスの設定に応じて)自動的に、自身の時刻サーバに権威があると公開するかどうか決定する
AnnounceFlagsレジストリ値の意味
bit位置は、最下位bitが1bit目、その隣が2bit目、……と数える。

 例えば明示的に権威を保持し、かつ明示的に時刻サーバとして動作させる必要があるコンピュータは、AnnounceFlagsレジストリ値を“0x5(16進数)=0101(2進数)”と設定することになる。上記 AnnounceFlags値の設定の詳細については、マイクロソフトの以下の資料を参照していただきたい。

 ちなみに、上記の設定を行った状態でw32tm /monitor /domainコマンドを実行すると、“RefID”項目より、それぞれのNTPサーバの実際の参照先が確認できる。

※これは、ドメイン・コントローラchabvssv10をPDCエミュレータとする3サイトの構成となっており、chabvssv12およびchabvssv14が各サイトの権威あるNTPサーバとなり、chabvssv11、chabvssv13、cahbvssv15が各サイト内の権威ある NTP サーバから時刻同期を行う設定となっている。

C:\>w32tm /monitor /domain:chabcorp
※サイト1:chabvssv10…PDCエミュレータ
chabvssv10.chabcorp.local *** PDC *** [192.168.10.40]:
    ICMP: 12ms delay.
    NTP: +0.0000000s offset from chabvssv10.chabcorp.local
        RefID: ntp1.jst.mfeed.ad.jp [210.173.160.27]
※サイト1:chabvssv11chabvssv10に同期
chabvssv11.chabcorp.local [192.168.10.41]:
    ICMP: 13ms delay.
    NTP: +0.1412353s offset from chabvssv10.chabcorp.local
        RefID: chabvssv10.chabcorp.local [192.168.10.40]
※サイト2:chabvssv12権威あるNTPサーバ
chabvssv12.chabcorp.local [192.168.10.67]:
    ICMP: 15ms delay.
    NTP: -9.8110144s offset from chabvssv10.chabcorp.local
        RefID: chabvssv10.chabcorp.local [192.168.10.40]
※サイト2:chabvssv13…chabvssv12に同期
chabvssv13.chabcorp.local [192.168.10.68]:
    ICMP: 11ms delay.
    NTP: -0.6986206s offset from chabvssv10.chabcorp.local
        RefID: chabvssv12.chabcorp.local [192.168.10.67]
※サイト3:chabvssv14…権威あるNTPサーバ
chabvssv14.chabcorp.local [192.168.10.99]:
    ICMP: 4ms delay.
    NTP: -0.7682548s offset from chabvssv10.chabcorp.local
        RefID: chabvssv10.chabcorp.local [192.168.10.40]
※サイト3:chabvssv15chabvssv14に同期
chabvssv15.chabcorp.local [192.168.10.100]:
    ICMP: 5ms delay.
    NTP: -12.5348394s offset from chabvssv10.chabcorp.local
        RefID: chabvssv14.chabcorp.local [192.168.10.99]

 また、上記の応用例として、NTPServerレジストリ値に、(PDCエミュレータの代わりに)同一の外部NTPサーバ名を参照先として設定することで、サイト間のNTPパケットのやり取りを行わせず、サイト単位でそれぞれ、外部NTPサーバにある時刻を取り込むこともできる。さらに以下の設定を併用すれば、サイト間のNTPパケットを完全に抑止することもできるだろう。

 Active Directory環境では、通常自身が属するサイト内の(接続するコンピュータにとって)権威あるドメイン・コントローラから時刻同期を行おうとする(詳細は第1回を参照)。これが仮に失敗した場合、デフォルトではサイト外の任意の(参照が可能な)ドメイン・コントローラから時刻同期を行うが、これを行わせない運用も可能だ。

項目 内容
キー HKEY_LOCAL_MACHINEのSYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient
値の名前 CrossSiteSyncFlags
DWORD
値の内容 0x0 (デフォルト値は0x2:任意のドメイン・コントローラに対して時刻同期を行う)
サイト外のドメイン・コントローラに同期させないための設定

 ちなみに、上記の値の内容を0x1とした場合、(サイト外にある)PDCエミュレータに対して明示的に時刻同期が行われる。

 なお、Windows Timeサービスに関するレジストリの設定は、ほかの項目と同じくグループ・ポリシーを利用して設定することもできる。

 グループ・ポリシー・エディタを使って、[コンピュータの構成]−[管理用テンプレート]−[システム]−[Windows タイム サービス]項目を編集すれば、コンピュータ・オブジェクトに対して各種の設定ができる(詳細は連載第1回の「3.Active Directory 環境における時刻同期―Windows Timeサービスでの時刻同期間隔について」や連載第2回の「3.Windows Timeサービスのさまざまな設定」を参照)。例えば、ドメイン環境下でのすべてのコンピュータの時刻同期間隔を変更したければ、[グローバル構成設定]にあるMinPollIntervalおよびMaxPollIntervalレジストリ値を設定したポリシーを“ドメイン”コンテナに直接リンクすれば、一括で再設定させることができるだろう。

Windows Timeサービス関連のグループ・ポリシー・オブジェクト
これらの項目を設定することにより、Windows Timeサービスに関する設定を行うことができる。
 (1)このカテゴリのポリシーを設定する。
 (2)これらの項目から詳細を設定できる。
 (3)例えば[グローバル構成設定]では、このような内容を含む、各種ポリシーの設定を行うことができる。

 ポリシー設定の詳細については特にここでは列挙しないので、実際のグループ・ポリシーの説明項目を参照いただきたい。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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