読者です 読者をやめる 読者になる 読者になる

なんでもシステム管理者(IT大好き?)

なんでもシステム管理者(日本酒大好き)が実質的日本酒のブログになったのでIT関連を分離しました。

ActiveDirectory環境でクライアントの時刻がずれる!! (コマンドw32tm sc)

<(日本酒大好き)>からの転載です。元の日付は2014-05-23です。

------------------------------------------------------------------------------------------------------------

私はブログのタイトル通り、システム管理者をやっています。社内のパソコンはテスト用など一部を除いてActiveDirectory(ドメイン)に参加させて管理しています。

ActiveDirectoryというかドメインの機能として、配下のクライアントはドメインコントローラの時刻に自動的に同期する機能があるため、一つのドメイン環境下では、基本的に全コンピュータの時計は同じ時刻を指すはずなんです。

と ころがある日、女子社員の一人が「私のパソコンの時計5分ぐらい遅れてる~!」というと、他の女子社員も「私も~」という声が上がりました。でも、全員で は無かったのです。「私のは大丈夫!」という子もいました。全部が全部狂っているのならば、話は早くドメインコントローラの時計が来るっているだけなの で、それを直せばいいのですが、そうではなく物によって違う「???」という感じです。

取りあえずドメインコントローラにログインしてイベントビューアを見たりしますが、特に異常は見当たらず、時刻もあっている。

そこで、次にクライアント側からの調査です。

ク ライアントからの調査は「w32tm」というコマンドを使用しました。まずはコマンドプロンプトを開きます。そこで何もオプション、パラメータを付けずに  w32tm とだけ入力し「Enter」を打鍵するとヘルプが表示されますので、そのヘルプを見ながら作業をします。ただ、このヘルプには説明もあるの ですが、万全ではなくVista以降「ユーザーアカウント制御」のため管理者権限でログインしているにも関わらずコマンドプロンプトを「管理者として実 行」しなければならなかったり、コマンドの結果は表示的にはOKなのに再起動しないと、その変更が有効にならない等ありました。ですので、その辺りの内容 を自分自身の備忘録として、また同様のトラブルで困っている誰かのお役に立つことを願い記しておきます。(前置きが長い(^_^;)

 

ここから本題

まずは自分のPCで時刻同期の状態を調べます。

w32tm /query /status

と すると、数行の各種情報が表示されるのですが、下から2行目に「ソース」という項目があります。このソースがドメインコントローラにちゃんとなっているか どうか確認。同期がおかしいPCで見ると、「おや?おかしい」ソースが以前プライマリードメインコントローラとして使用していた古いサーバの名前になって います。なぜ、そうなっているか?ふと思い当たる節がありました。ドメインを運用されている方ならばご存知かと思いますが、ドメインコントローラはDNS サーバとしても運用しています。古いドメインコントローラから新しいドメインコントローラにプライマリを移した際に、社内にはDNSの設定を変更するよう 周知したのですが、すぐにはやらない人もいるだろうと、取りあえず古いドメインコントローラを残しておいたのがアダとなったのかも?

取りあえず、時刻同期のおかしいPCのDNS設定を変更し、再度

w32tm /query /status

としてみたが、相変わらずNTPサーバとしては古い(不調の)サーバを見ているようです。

そこでソースをコマンドで変更できないかオプションを探ると

 w32tm /config /syncfromflags:<ソース>

という物がありました。ただ<ソース>にはサーバ名が記述できる訳ではないようで、ヘルプに記述されているのは

ーーーーーーーーーーーーーーーーーーーーーーーーーーー

MANUAL    - 手動ピアの一覧にあるピアから同期をとる
DOMHIER   - ドメイン階層にある AD DC から同期をとる
NO        - どこからも同期をとらない
ALL       - 手動ピアとドメイン ピアの両方から同期をとる

ーーーーーーーーーーーーーーーーーーーーーーーーーーー

の4種類のみ、取りあえずAD DCから同期を取りたいのに違いないので

w32tm /config /syncfromflags:DOMHIER

とすると、なんと

「次のエラーが発生しました。 アクセスが拒否されました。 (0x80070005)」

というエラーメッセージが出ました。そこであわててはいけません。「ハハーン、これは『管理者で実行』やな」と目星をつけ、コマンドプロンプトを右クリックメニューから『管理者で実行』し、再度

w32tm /config /syncfromflags:domhier

とすると。今回は

「コマンドは正しく完了しました。」となりました。
こういったところがマイクロソフトも不親切というか意地悪ですよね!エラーメッセージではなく、素直に「このオプションでの実行は管理者モードで実行してください。」と言ってくれれば分かりやすいのにネ!!

ちなみに、このコマンドは正しく完了しても、再起動しないと変更結果が有効にならないようです。今回色々触っている間に自分のPCの同期先がCMOS Clockとなってしまったので、ドメインコントローラに戻そうと上記のコマンドを実行し正しく完了?したのですが

w32tm /query /status

と するも、相変わらずCMOS Clockのままだったので再起動するとソースがドメインコントローラにちゃんとなりました。ここでもメッセージとして「コマンドは正しく完了しました。 変更内容を有効にするには再起動が必要です。」としてくれれば分かりやすいのにねぇ・・・。

色々試したのですが、設定としてソースを特定のサーバを指定するのは無理そうでした。DNSを正しく設定しても起動時の何らかのファクターで古いドメインコントローラになることがありました。

で あれば、古いドメインコントローラを止めてしまえば??という声もあろうかと思いますが、社員の中には古いDNS設定を相変わらず使用していたり、古いド メインコントローラで共有しているプリンタを相変わらず使用していたりと、変更を周知していても聞いていない人がままいるのです。

で、完全に古いドメインコントローラを止めれないので次に考えたのが、古いドメインコントローラで動いているNTPサーバのみとめるという事です。通常なら管理ツールの「サービス」でチョイチョイと止めればいいのですが、このサーバは分け合ってGUIが使えません。

GUIがだめならCLI!!です。MS-DOSの時代からパソコンを使用してきた世代はコマンドには抵抗感があまりありません(人によるかな?)。

ここで使用するのは sc というコマンドです。

サービスを司るコマンドでネットワーク越しに設定したり、状態を確認することが可能です。

WindowsのNTPサービスはw32timeという名称なので以下のようなコマンドでまず状態を確認します。

------------------------------------------------------------------------------------------

C:\Windows\system32>sc  \\<サーバのIPアドレス> query w32time

SERVICE_NAME: w32time
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 4  RUNNING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

---------------------------------------------------------------------------------------------

これで、STATEの部分がRUNNINGと動作中であることが分かります。

これを以下のコマンドで止めます。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

C:\Windows\system32>sc \\<サーバのIPアドレス> stop w32time

SERVICE_NAME: w32time
        TYPE               : 20  WIN32_SHARE_PROCESS
        STATE              : 3  STOP_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x1
        WAIT_HINT          : 0x3e8

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

これでSTATEがSTOP_PENDINGになり止まったことが分かります。

ちなみにまたサービスを開始したい場合はSTOPの部分をSTARTにすればOKです。

 

この状況で2、3日様子を見たところ、端末による時刻のばらつきはなくなり

w32tm /query /status

とすると、新しいドメインコントローラをソースとしている事が確認できました。

PS.シス管やってると、いろいろあります(ふぅ~っ)