Windows TIPS
[Management]
  Windows TIPS TOPへ
Windows TIPS全リストへ
内容別分類一覧へ

NTPでネットワーク全体のマシンの時刻を合わせる(1)

解説をスキップして操作方法を読む (Windows 9x/Me/NT編)
解説をスキップして操作方法を読む (Windows 2000編)
解説をスキップして操作方法を読む (Windows XP編)


デジタルアドバンテージ
2000/03/04
2001/12/22更新
 
対象OS
Windows 2000 Professional
Windows XP Professional
Windows XP Home Edition
Windows 2000 Server
Windows 2000 Advanced Server
ネットワークで接続された複数のマシン間で共同作業を行うなら、各マシンが内蔵しているシステム・クロックを同期させておくことは重要である。更新日時をベースにしてファイルを操作したりする場合に、各マシン間で不整合が生じたりする可能性があるからだ。
Windowsシステムでは、net timeコマンドを使って他のマシンと時刻を同期させることができる。
Windows 2000/Windows XPでは、net time /setsntpコマンドを使って、SNTPサーバに同期させることができる。
Windows XPでは、さらにGUIのインターフェイスを使ってSNTPサーバを指定することができる。
  解説

 ネットワーク上に多数のマシンが存在していて、それらの間で共同作業を行う場合、各マシンが内蔵しているシステム・クロック(リアルタイム・クロック、RTC)をすべて同じになるように揃えておくのは非常に重要なことである。ファイルのタイム・スタンプがずれていれば、更新日時順にソートしたり、ファイルの新旧を区別して動作するようなユーティリティ、例えばバックアップ・プログラムや、プログラムの開発過程で使われるmakeコマンド(ファイルの修正時刻を調べて、新しいものだけ再コンパイルするためなどに使われる)が正しく機能しなくなったりする。またWindows 2000/Windows XPではKerberosを使ったログオン認証システムを採用しているが、これはサーバとログオンするクライアントの時間がある範囲内で一致していないと、正しく動作できないという仕組みになっている。このような問題を避けるため、Windowsシステムでは、ネットワーク全体で各マシンに内蔵されているシステム・クロック(時刻情報)を同期させるためのメカニズムが提供されている。ここでは、その利用法について見てみる。

Windows XP/Windows Server 2003環境におけるWindowsネットワーク時刻同期の基礎とノウハウ

 Windowsネットワークにおいてお互いのシステム・クロックを同期させるには、以下のような2つの方法がある。

●「net time」コマンドを使った同期
 Windows系のOSでは、「net time」というコマンドを使えば、簡単に他のWindowsシステムとクロックを同期させることができる(これはWindowsネットワーク独自の同期用プロトコルを使っている)。この方法は、Windows 9x/Me/NTといった、比較的古いOSでも利用可能という特徴があるが、同期させる相手がWindows系(もしくはSambaサービスを実行しているPC UNIXなど)のマシンに限られる。主にLAN内でのみ利用可能な方法だ。

●NTP(SNTP)プロトコルを使った同期
 NTP(Network Time Protocol)プロトコルは、インターネットで広く使われているクロックの同期用のプロトコルであり、Windowsマシンに限らず、さまざまなシステムで利用できるという特徴がある(NTPサービスを簡略化して、時刻同期の機能だけに限定した「SNTP(Simple Network Time Protocol)」というプロトコルも普及している)。

 NTPでは、階層的に構築された時刻サーバによるネットワークを使って、多数のマシンに効率よく、正確な時刻情報を提供することができる。しかも、ネットワークの特性によるパケットの遅延時間のばらつきやゆらぎなどの影響を極力排除して、正確な時刻情報をやりとりすることができる。通常NTPを使ったシステムでは、最上位には非常に正確な時刻情報源(原子時計やGPSなどを使った基準となる時計)を(複数)用意し、その下に階層的にNTPサーバを構築していく。同じ階層同士でも相互に時刻情報をやりとりして、その揺らぎの影響などを統計的に処理することにより、インターネットを経由した場合でも数msec以下の誤差でクロックを同期させることができる(ただしSNTPでは、パケットの往復時間を平均して遅延時間を算出しているので、統計的なゆらぎまで考慮するNTPに比べるとやや精度は低い)。

 一般的には、組織内に1台のマスターとなるNTPサーバを用意する。そして、インターネット上のどこかに置かれているNTPサーバと同期させ、それを組織内の基準クロックとする。組織内の全クライアントは、それを基準にして動作するようにネットワークを設定しておく(階層構成にすれば、マスターとなる1台だけに負荷が集中するのを防ぐことができる)。

 このように、NTPサービスを使うためには、(当然であるが)時刻の基準となるNTPサーバがどこかに1台必要となる。インターネット・プロバイダによっては、ユーザーのためにNTPサーバを用意しているところもあるし、GPSや標準電波を使ったNTPサーバ・システムなども市販されているので、これらを使って正確な基準時刻源を作ればよいだろう。

 また2002年3月末までの期間限定であるが(注:その後、終了期限の延長が発表されている)、通信総合研究所(現 情報通信研究機構)NTTインターネットイニシアティブインターネットマルチフィードの共同研究プロジェクトとして、インターネット上での日本標準時提供実験が行なわれているので(プレスリリースはこちら)、ここで提供されているNTPサーバを利用するという方法もある。

 このプロジェクトでは合計3台のNTPサーバ(ntp1.jst.mfeed.ad.jp、ntp2.jst.mfeed.ad.jp、ntp3.jst.mfeed.ad.jp)が提供されているので、いずれかのサーバと同期を取るようにすればよい。

 Windows 2000/Windows XPでは、このNTP(SNTP)を使ったWindows Timeサービス(開発当初の呼び名に基づいて、「W32Time」サービスとも呼ばれることがあり、イベント・ログにはこの名前でログが出力される)という時刻同期のためのメカニズムが実装されている。そのため、ある1台のマスタとなるNTP(SNTP)サーバ・マシンを使って、ドメイン内のすべてのWindowsクライアントの時刻をNTP(SNTP)プロトコルを使って同期させることができる。クライアントがWindows 9xやMe、Windows NTの場合は、net timeコマンドを使って同期を行えばよい。

 Windows Timeサービスを使って自動的なクロックの同期を行うには、2つの方法がある。1つはActive Directoryを導入して、時刻情報を同期させたいクライアントをすべてドメインに参加させておくという方法である。Windows 2000/Windows XPでは、Active Directoryドメインに参加しているマシンはすべて自動的にドメイン・コントローラの持つクロックに同期するようになっている。Active Directoryで利用されているKerberos認証では、参加しているコンピュータ間でクロックが(ほぼ)一致していることが必要だからだ。

 もう1つは、各クライアントのSNTP設定を手動で行うという方法である。net timeコマンドのオプションでSNTPサーバのアドレスをセットしておくと、以後は自動的にそのSNTPサーバを参照して、マシンのクロックが同期するようになる。クライアントはドメインに参加している必要はないし、ワークグループ形式や、非Windowsマシンが混在していても利用できる。

 NTPサービスを簡略化して、時刻同期の機能だけに限定した「SNTP(Simple Network Time Protocol)」というプロトコルがあるが、Windows 2000ではSNTPサーバと同期させるための機能が用意されている。ドメインのFSMOのPDC(Flexible Single Master OperationのPrimary Domain Controllerエミューレータの役割を果たすサーバ。一般的にはActive Directory内で一番最初に作成したドメイン・コントローラが担当する)に対して、以下のようなコマンドを実行する。

  操作方法(Windows 9x/Me/NT編)

 Windows 9xやMe、NTでは、NTP(SNTP)プロトコルを直接扱うことができないので、以下のようにnet timeコマンドを使うのが一般的である。例えばコマンド・プロンプト上で、

net time \\timeserver /set /yes

を実行することにより、ローカル・マシンのシステム・クロックを、timeservertimeserverは、適切なアクセス権があるWindows 9xやWindows NT/2000/XPマシン)が持つ時刻情報と同期させることができる。これをタスク・スケジューラなどで1日に1回程度実行すれば、常にほぼ正確な時刻を維持することができる。この方法は、すべてのWindowsクライアント(Windows 9x/Me/NT/2000/XP)で利用することができる。/set(と/yes)を省略すると、指定されたサーバの時刻情報を参照して表示するだけで、ローカル・マシンのクロックは更新されない。

  操作方法(Windows 2000編)

サーバ側のSNTPサーバの準備

 Windows 2000(Professional、Server)では、上記のnet timeコマンドによる同期のほかに、新しくSNTPプロトコルを使ったクロックの同期方法も用意されている。インターネットに常時接続されている環境があるならば、これを使って常にサーバのクロックを正確に維持するようにすればよいだろう。

 Windows 2000でSNTPプロトコルを利用するためには、まず基準となるSNTPサーバをドメイン内に(最低でも)1台用意する必要がある。一般的には、ドメインのFSMOのPDC(Flexible Single Master OperationのPrimary Domain Controllerエミューレータの役割を果たすサーバ。一般的にはActive Directory内で一番最初に作成したドメイン・コントローラが担当する)で以下のようなコマンドを実行し、外部のSNTPサーバに同期させる。

net time /setsntp:SNTPserver

 SNTPserverには、SNTPサーバの名前かIPアドレスを指定する(プロバイダの提供するNTPサーバや、先にあげたようなNTPサーバを指定する)。現在のSNTPサーバの設定状態を調べるには、

net time /querysntp

いうコマンドを実行する。/setsntpで設定したSNTPサーバ名が表示されるはずである。

 以上の設定がすめば、自分自身のクロックは外部のSNTPサーバと同期しているはずである。またドメイン内の各クライアント(他のドメイン・コントローラやメンバ・サーバ、およびWindows 2000 Professional、Windows XPなど)の時刻も自動的にドメイン・コントローラに同期するようになっているはずである。階層的なドメインを構築している場合は、ルートにあるドメイン・コントローラが唯一の基準となって、自動的に下位のドメイン・コントローラにまで時刻情報が伝達される。もし、何らかの理由で各クライアント側のWindows Timeサービスが起動していないようであれば、以下のようにして[スタート]メニュー−[プログラム]−[管理ツール]−[サービス]で、Windows Timeサービスの[スタートアップの種類]を「自動」にしておく。

Windows Timeサービス
NTP(SNTP)プロトコルを使った、自動的な時刻同期のためのサービス。イベント・ログには、「W32Time」というサービス名でログが出力される。
  起動時に自動的に開始するようにセットしておく。

 各クライアントにおいて、Windows Timeサービスが起動すると、Windows Timeサービス(SNTPサービス)を実行しているドメイン・コントローラを自動的に検索して、SNTPプロトコルで現在の時刻を問い合わせ、ずれがあればローカルのシステム時刻情報が修正される。この場合、ローカルの時刻が正確な時刻よりも遅れているか、3分以上進んでいる場合は直ちにローカルのシステム時刻の修正が行われる。3分以内の進みならば、ローカルのシステム・クロックの進み方を遅らせて、数分かけて徐々に正確な時刻に近づける(すぐに修正すると、時刻情報に基づいて動作しているプログラムなどに支障が出る可能性があるため)。さらに、その後は数十分〜数時間ごとに基準時刻とのずれを調べ、必要ならば修正が行われる。

クライアント側のSNTP設定

 以上のようなWindows Timeサービスによる時刻の同期作業は、ドメインのメンバであれば各クライアントごとに何もしなくても自動的に行われるようになっているが(Windows Timeサービスが自動的に起動するように設定される)、そうでない場合(ドメイン・メンバではなく、ワークグループ形態で動作しているWindows 2000 ServerやProfessionalなど)は、手動で設定を行う必要がある。具体的には、net time /setsntpコマンドでSNTPサーバを指定し、さらに上記のようにWindows Timeサービスを起動時に開始するように設定しておけばよい。

■レジストリの設定
 Windows Timeサービスでは、デフォルトでは、8時間に1回しかSNTPサーバと同期を行わない(サービス起動直後はもっと頻度が高いが、安定してくるにつれて同期回数はこの頻度に下がってくる)。だが、場合によってはこれでは不十分かもしれない(例えばシステム・クロックに使われている水晶の精度が低いと、8時間で数秒ずれてしまうかもしれない)。このような場合は、レジストリを調整して、より高い頻度で同期を行うように指定することができる。詳細についてはサポート技術情報の「W32Time サービスのレジストリ エントリ(223184)」を参照していただきたい。

 
   
 INDEX
   NTPでネットワーク全体のマシンの時刻を合わせる(1)
     NTPでネットワーク全体のマシンの時刻を合わせる(2)

更新履歴
【2005/02/01】ニュースリリースのリンク先情報を更新しました。

「Windows TIPS」

@IT Special

- PR -

TechTargetジャパン

Windows Server Insider フォーラム 新着記事
  • 第507話 見苦しいぞ、キミ (2016/5/24)
     おいキミ! イスに座ったままキャスターで移動するもんじゃないゾ! まったく見苦しい! 最近の若いもんの教育はどうなっとるんだ!
  • 64bit版Windows 10で、4GBのメモリを使い切る (2016/5/23)
     32bit版WindowsをWindows 10にアップグレードしても64bit版にはならない。4GB以上のメモリがあるなら、64bit版Windows 10をクリーンインストールしてみよう
  • Win7 KB3125574ロールアップの適用方法と注意点 (2016/5/20)
     Windows 7/Server 2008 R2向けに、SP1以降のパッチ集(ロールアップ)が新たにリリースされた。どんな状況で役立つのか? どうやって使えばいいのか?
  • iPhoneの3D Touch機能でカーソルを移動する (2016/5/19)
     iPhoneで文章中の誤字を修正する際、カーソルが思った位置に移動できず、イライラした経験はないだろうか。実は、3D Touch機能で簡単にカーソルができるのだ
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間
ソリューションFLASH