Windows ドメイン環境で時刻の同期を調整してみる

REPORT


Windows の時刻が狂う

Microsoft Virtual Server 2005 を用いて Windows ドメイン環境周りを調整してみたのですけど、そのあたりからなのか、気づくといつもクライアント環境で使用していた Windows XP の時刻が 30 分以上も狂ってしまうようになっていたのでした。

環境は、Virtual Server 2005 上でゲスト OS として動作している Windows Server 2003 へ全ての操作マスタを担当するドメインコントローラを用意して、その複製ドメインコントローラを Virtual Server 2005 が稼動しているホスト OS としての Windows Server 2003 に用意しています。ゲスト OS には Virtual PC 追加機能をインストールしていて、特に何も調整していなかったので、ホスト OS との時刻の同期が有効となっていました。

 

この状態で時間が狂って行く感じだったので、ときどきホスト OS の時刻を調整していたのですけど、それでも気づくとほぼ毎日のように時刻が 30 分ほどずれてしまっているのでした。

Windows ドメインはドメインコントローラとの時刻が自動調整される仕組みになっているので、ややこしい感じの構成になっていることもあるので、時刻調整の改善を目指してそのあたりの状況を確認してみることにしました。

 

現在の環境の同期設定

とりあえず Windows の時刻同期の仕組みは抜きにして、物理的な時刻同期の中枢とも言えるホスト OS 上の NTP 設定をコマンドラインから次のようにして確認してみました。

net time /querysntp

そうしてみたところ "time.windows.com,0x1" という値が設定されていました。

ゲスト OS 上の Windows でも同じ設定がなされていたので、どうやらインターネットにさえ正常に接続できる状態ならば、特に何も設定しなくても自動的にこの time.windows.com というサーバから正しい時刻を取得することが出来るようになっているようでした。

ちなみに設定されているサーバ名の後ろの "0x1" という数値には次のような意味があるとのことでした。

0x0 NTP による標準的な時刻同期 (Symmetric Active/Passive Mode)
0x1 Windows 間での時刻同期
0x2 Windows ドメイン環境および外部 NTP サーバの両方を用いた時刻同期
0x4 Symmetric Active/Passive Mode による時刻同期
0x8 Client/Server Mode による時刻同期

ともあれそんな設定がなされているのに、それでいて時刻が狂ってしまうのはどういうことなのでしょうね。ドメインコントローラの時刻同期と Virtual Server 2005 の時刻同期とが交錯して上手く行かないこともあるのでしょうか…。

とりあえず Windows ドメインの時刻同期がどのような方法で行われているかを調べてみることにしました。

 

すると、基本的には NTP サーバとして指定したサーバへ Symmetric Active/Passive Mode または Client/Server Mode を用いて同期する感じになるようなのですけど、Windows Server 2003 の Active Directory によるドメインコントローラが存在している場合には、少し特殊な感じでドメインコントローラと時刻を同期させるようになる感じのようでした。

Active Directory にドメインコントローラが 1 台しか存在しない場合は簡単なのですけど、複製ドメインコントローラが存在している場合には、操作マスタとして PDC エミュレータを担当しているドメインコントローラを中軸として、その他のドメインコントローラは PDC エミュレータと時刻を同期するとのことです。肝心の PDC エミュレータは、外部の NTP サーバを利用しない限りは時刻同期はなされないそうです。

そしてドメインにログオンする各 PC は、認証に使用する最寄のドメインコントローラから時刻を入手するとのことでした。

 

いろいろと調整してみる

とりあえずホスト OS の時刻を手動で設定して、Virtual Server 2005 の同期機能によってゲスト OS であるドメインコントローラの時刻が一緒になるのを確認しても次の日には 30 分ほどずれてしまいます。

これはもしかするとゲスト OS として稼動しているドメインコントローラの時刻がじわじわとずれてしまうのかなと考えて、時刻同期の中枢となる PDC エミュレータの操作マスタを、ホスト OS 上の複製ドメインコントローラへ移動してみることにしました。

PDC エミュレータを担当させたいホスト OS 上の Windows Server 2003 から管理ツールの "Active Directory ユーザーとコンピュータ" を起動して、該当するドメイン名で右クリックして 「操作マスタ」 を選択します。そして 「PDC」 タブを選択したら、「変更」 ボタンを押して操作マスタを移行します。

 

このとき、非レプリケーションパートナーですが転送しますかというようなメッセージが表示されたりしたのですけど、これはホスト OS 上の Active Directory がグローバルカタログとして設定されていないことが影響していたようでした。

グローバルカタログには Active Directory のよく参照される情報が複製されているそうで、それによってトラフィックの減少やパフォーマンスの向上などが図れるようですので…、細かいことまでは把握しきれていないのですけど、とりあえず単一ドメインで構成された環境の場合は全てのドメインコントローラをグローバルカタログとしておくのが良いとのことでした。

 

ともあれ管理ツールの "Active Directory サイトとサービス" から該当するドメインコントローラの "NTDS Settings" のプロパティでグローバルカタログを設定して PDC エミュレータの役割を転送してみました。

その上でホスト OS である PDC エミュレータの時刻を調整し、同期されるまで待つのもあれなのでゲスト OS 上で "Windows Time" サービスを再起動して同期を促してみましたけど、時刻が同期される様子はありませんでした。

もしかするとグローバルカタログの複製が間に合ってなかったりするのもあるのかも知れないのですけど、とりあえず PDC エミュレータの役割を元に戻して、今度はそもそも Virtual Server 2005 の同期機能を無効にしてみることにしました。

 

Virtual Server 2005 の管理サイトから PDC エミュレータ機能をもった PC の構成を調整して、"バーチャルマシンの追加機能" でホスト OS との時刻同期を行わないようにしました。そしてとりあえずゲスト OS 上の Windows Time サービスを再起動してみたところ、そちらは問題なく time.windows.com から正しい時刻を入手することが出来たのでした。

そしてクライアントとして使用していた Windows XP にて Windows Time サービスを再起動してみたのですけど、そのときは PDC エミュレータではなくホスト OS の方と時刻同期がなされてしまいました。こちらを認証のドメインコントローラとして使用していたのかもしれないですね…。

そんなことを思いつつ、しばらくの間ほかの事をしていたらいつの間にかゲスト OS の方の正しい時刻が採用されていたりして、よくは判らないのですけどとりあえずは、ドメインコントローラからの時刻同期は働いているような感じです。

肝心のホスト OS のドメインコントローラの方も Windows Time サービスを再起動してみると、time.windows.com からなのか PDC エミュレータからなのか、とりあえず問題なく正常な時刻を入手することが出来たようですので、安定するにはしばらく時間がかかるのかもしれないですね。

 

もっともまだ時刻がずれてくるかどうかの確認をしきれてはいませんけど、とりあえず Virtual Server 2005 の同期設定を解除したので Active Directory にとって思いがけない時刻の変化はなくなるでしょうから、なんとなく、安定するんじゃないかなって安易に考えてみたりして。

なんか、あまり参考にもならない記事になってしまったような気もしますけど…、とりあえず履歴という感じで残しておこうと思います。