ITよろづや

ITの参考になる情報を備忘録代わりに残していきます

Windows Server 2012 R2のワークグループ環境でのNTPサーバを複数指定する設定

最近は、構築でLinuxを操作することが多くなって、わりとLinuxに慣れてきました。ただ、まだまだ自然にコマンドが使えないので、もっと経験が必要ですね。

 
そして、RedHatLinux7では、時刻同期として新しくchronyが利用できるようになりました。これにより、slewモードの設定が柔軟にできるようになり、時刻同期のトラブルは少しは減りそうですね。chronyはNTPサーバ、NTPクライアントとしても利用でき、slewモードを設定しておくことで、うるう秒対策になります。
 
ちなみに、うるう秒で調整されるのは1秒ですが、サーバーのハードウェアクロックがズレている場合、OS起動時に大幅に時刻がズレた状態でNTPサーバと時刻同期を即座にしてしまい、問題が起こることがある為、slewモードで緩やかに時刻調整をするように設定します。
 
同様にWindowsサーバでもSlewモードで動作させることができます。ちなみに、ワークグループ環境の場合は、1秒未満の時刻のズレを除き、stepモードで動作してしまうので、注意が必要です。
 
今回のテーマはslewモードではなく、Windows Server 2012 R2のワークグループ環境でのNTPサーバを複数指定する設定についてです。
 
実は、この内容をアップしていると思って過去記事をチェックしたら、Windows Server 2008 R2のものでした。意外と更新を忘れいているのにびっくり。ということで、すでに世間ではWindows Server 2016が出ていますが、Windows Server 2012 R2のワークグループ環境下でのNTPサーバ複数設定する方法です。
 
 
まず、ワークグループ環境の場合、ドメイン環境と違う部分がいくつかあるので注意が必要です。そして、Windows Server 2012 R2では、意図しないタイミングで時刻同期することがあります。
 
それは、ワークグループ環境では、既定の状態でタスクスケジューラに登録されているタスク Time Synchronization によって Windows Time サービスが起動され時刻同期を実施し、サービスが停止されるという動作になりからです。公式情報はこちら。
 
■ワークグループ環境においてWindows Timeサービスが自動で起動する。
 
その為、時刻同期を運用で正しく使用する場合は、以下のように設定を変更します。
 
【手順】
①以下のコマンドを実行し、トリガー起動サービスを削除してください。
sc triggerinfo w32time delete
 
Windows Time サービスのスタートアップの種類を [手動] から [自動] に変更します。
 
これにより、Windows Time サービスを自動起動して、タスク Time Synchronization が実行されてもタスクによって時刻同期が実施されないようになります。
 
続いて、GUIではNTPサーバを複数設定できないので、コマンドで設定を行います。
 
# w32tm /config /update /manualpeerlist:"NTPサーバ#1_IPアドレス△NTPサーバ#2_IPアドレス"
 
※△=半角スペース 

これにより、NTPサーバを複数設定することができます。

また、ワークグループ環境で注意が必要なのが、クライアントの動作モードです。

C:\Users\Administrator>w32tm /query /status
閏インジケーター: 0 (警告なし)
階層: 5 (二次参照 - (S)NTP で同期)
精度: -6 (ティックごとに 15.625ms)
ルート遅延: 0.2483213s
ルート分散: 9.0111739s
参照 ID: 0x0D4158A1 (ソース IP:  13.XXX.XXX.XXX)
最終正常同期時刻: 2017/XX/XX 22:12:26
ソース: time.windows.com,0x8
ポーリング間隔: 6 (64s)

上記は、特に設定をしていない状態ですが、ソースのNTPサーバの後ろに「0x8」とあります。この動作については、以下の@ITの記事が参考になります。

■第2回 Active Directoryおよびワークグループ環境での時刻同期 (2/5)
http://www.atmarkit.co.jp/ait/articles/1205/17/news135_2.html

推奨は、「0x8」か「0x9」です。そして、0x9を利用する場合は、Windowsで実装した一定間隔の同期を行うようです。

SpecialPollIntervalには、「Windowsで実装した一定間隔での同期」を行う際の同期間隔を設定する(NtpServerレジストリ値の第2パラメータを0x1か0x9にした場合)。w32tmコマンドでは設定できないので、レジストリ・エディタで直接設定する必要がある。ドメイン環境では(10進法で)3600秒(=1時間)が設定されているのでそのままでも問題はないが、必要があれば変更したうえ、Windows Timeサービスを再起動する。

そして、色々と情報が飛びますが、「0x9」が設定されていると、「SpecialPollInterval
」が使用されるようになるそうです。

■[インターネット時刻] のタブで時刻同期の設定を行うと、SpecialPollInterval を使用する設定に変更される
https://support.microsoft.com/ja-jp/help/2842683

これにより、MinPollInterval、MaxPollInterval のレジストリではなく、SpecialPollInterval のレジストリに基づいた間隔で時刻同期を行うように、動作が変更されます。

そして、SpecialPollIntervalを使うモードは「0x1」だそうです。

■時刻が大きく変更されないように Windows タイム サービスを構成する方法
https://support.microsoft.com/ja-jp/help/884776/how-to-configure-the-windows-time-service-against-a-large-time-offset

ちなみに、0x9は「0x1+0x8」と書かれていることもあり、設定としてはデフォルトの0x8で問題ないかと思います。この辺りは別途、整理してまたアップします。