TechNote

事務屋のおぼえがき

システム管理者でなくても知っとくべき! Windowsサーバ/クライアントの時刻同期設定まとめ

コンピュータの内臓時計はズレやすいため、「時刻同期」について検討することはとても重要なことと思われますが、その重要性はあまり認識されていない気がします。

私も先日、社内サーバ群の時刻を調査する機会があったのですが、各サーバが連携を取り合っている大規模システムであるにも関わらず、同期がとられていないものが散見され、時刻同期が重要視されていないことを痛感させられたということがありました。

そこで、あらためてググったりしてみると、Windowsの時刻同期に関する「まとめ記事」と呼べるようなものを見つけることができなかったので、忘備録を兼ねてまとめておきます。

以下に紹介している各要素はさまざまな組み合わせて使用できると思いますが、ここでは大きく「ドメインに参加している/していない」の括りに分けて紹介していきます。

1.ドメインに参加していない場合

(1)GUI的に設定する方法

手動操作での単発的なやり方となりますが、「インターネット時刻」タブで時刻同期が可能です。
時刻同期がきちんと行われたかどうかの確認も同画面からできます。

ちなみにドメインに参加した状態ではこの「インターネット時刻」タブは表示されません。



(2)コマンドプロンプトで設定する方法

こちらも単発的なやり方となりますが、下記のコマンドをたたけばタイムサーバとの時刻同期が実行されます。

net time \\[サーバのipアドレス | サーバname] /set /yes

管理者権限の問題で、そのままやると下図のようなエラーが出るはずです。


管理者権限でコマンドプロンプトを起動するには、「cmd」と入力した状態で、Shift+Enterで起動します。

管理者としてコマンドプロンプトを起動した状態で、あたらめて上記コマンドを打ってみると成功します。


(3)バッチをスケジュールに組み込み、定期的に時刻同期する方法

上記コマンドを記述したテキストファイルを「nettime.bat」などで保存し、タスクスケジューラへ登録することで、人手いらずで定期的に時刻同期が実行されます。

ただし、そのままだと(2)と同様に管理者権限の問題でエラーとなります。

このため、作成した「nettime.bat」のショートカットを作成し、そのショートカットのプロパティにて「管理者として実行」にチェックを入れ、タスクスケジューラにこのショートカットの方を登録するという手法をとります。


(4)フリーソフトを使って外部ntpサーバから時刻を取得する方法


nictの時刻サーバにアクセスして時刻を補正します。インストール不要タイプのため、ダウンロード&解答後、exeファイルをダブルクリックするだけで実行されます。

下記からダウンロード可能です。
vector


実行すると以下のようにログが表示されますが、LogHideバージョンを使用するとこのような実行ログが出ないので、バックグラウンドで処理を実行したいだけならLogHideバージョンを使用すべきでしょう。

2で紹介するようなドメインコントローラなどでは、このようなソフトをタスクスケジューラに組み込んで、定期的に実行し、時刻の正確性を保つ必要があるでしょう。






2.ドメインに参加している場合


通常、ドメイン環境ではクライアントの時刻はサーバ(ドメインコントローラ)に同期します。(その代わりドメインに参加すると「インターネット時刻」タブが表示されなくなります。)

このため、特に時刻同期を行うための設定というのは必要ありませんが、注意点などを残しておきます。

(1)ドメインコントローラの確認方法

ドメインコントローラというのは、Windowsネットワークで、コンピュータやユーザのログオン認証を行うためのアカウント情報(ドメイン情報)を一括管理するサーバのことです。ドメインコントローラを置くことでネットワーク内のユーザ情報を一元的に管理できます。

ドメインコントローラはクライアントの時刻の取得元となるので、上記1-(4)で紹介したようなソフトを使用するなどして、正確なシステム時刻を保持しておく必要があるでしょう。


ドメインコントローラを確認するコマンドは下記です。

echo %logonserver%


また、下記のように打つとドメイン内の全ドメインコントローラについて、上位ntpサーバ名や上位ntpサーバとの時刻差を表示できます。

w32tm /monitor /domain:

(2)時刻同期成功の確認方法


システムログで、以下のイベントIDを確認します。

35:時刻の同期
37:参照先NTPサーバからの時刻データ受信

正確に言うと、37は参照先ntpサーバから時刻情報を受け取ったことを示し、35は受け取った時刻情報でシステム時刻を更新したことを示します。このため、37のみ実行されて35が実行されてなかった場合は同期に失敗したと考えられるので注意が必要です。

あわせて読みたい

kojikoji75.hatenablog.com
kojikoji75.hatenablog.com
kojikoji75.hatenablog.com