春望録

国破れて山河あり

Windows Server 2016(ドメインコントローラ) の時刻同期ができない

NTPクライアントの設定をしていたつもりが、できていませんでした。

TL;DR

ドメインコントローラは、Windows NTPクライアントの構成にて、Typeを「NTP」にしてあげる必要がある。

やったこと

  • Windows NTPクライアントの構成」にて、NICTのアドレスを設定 (グループポリシーエディター)
  • Windows NTPクライアントを有効にする」 を適用 (グループポリシーエディター)
  • Windows Time」サービスの再起動

現象

コマンドで同期をしようとすると、以下のようなメッセージが表示される。

時刻データが利用できなかったため、コンピューターは同期をとり直しませんでした。

f:id:etupirka_h:20181223024003p:plain

よく見るとソース名がNICTではなくて、"LOCL"(=ローカル?)となっています。ここに問題がありそう。

f:id:etupirka_h:20181223025020p:plain

C:\Windows\system32>w32tm /query /source
Local CMOS Clock

やっぱり、ローカルを参照している。

試したみたこと(結果的に効果がなかったこと)

1. w32tmコマンドで設定の確認

Windowsで時刻同期が正常に出来てるか確認する方法。w32tmコマンド | puti se blog

2. 設定のやり直し(w32tmコマンドベースで)

ドメインの時刻をNICTのNTPと同期させる

3. レジストリの確認

Windows TImeがCMOS Clockになって困った話 - Qiita

レジストリ HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient InputProviderの値が0(無効)になっている

Enabled=1かつInputProvider=1じゃなきゃいけない、という話。こんな項目がある日突然変わるのこわい…。

結論

ドメインコントローラの挙動を理解していませんでした。 以下に似たようなQ&Aを発見。

ドメインコントローラが外部NTPサーバと時刻同期できない

まず、グループポリシーの設定を拝見しましたが、 結果的には間違いなく「[Default Domain Controllers Policy]でNT5DS設定を強制している」ということが、 PDCでw32tmコマンドが使えない原因です。 また、この設定では外部NTPサーバに同期することはありません。 Typeレジストリ値に「NT5DS」を設定した場合、クライアントとドメインコントローラでは挙動が異なります。

・クライアント:ログオンしたドメインコントローラから時刻同期を行う(動的に内部決定)

ドメインコントローラ:PDCエミュレータに対して時刻同期を行う

な、なるほど・・! Typeの項目、設定時にちょっと考えた記憶があったのですが、ドメイン参加ならデフォルトのまま、WORKGROUPならNTPに変更、くらいの浅い認識でした。

「Type」のフィールドはドメイン外コンピュータであれば「NTP」に変更します。 ドメイン参加コンピュータであれば、デフォルトの「NT5DS」のままで OK です。 Windows Server 2016 : NTPクライアントの設定 : Server World

TypeをNT5DS→「TYPE」に変更して、無事解決。 以下のコマンドで、徐々に時計が正しい時間に近づいて入っていることを確認。

w32tm /stripchart /computer:ntp.nict.jp

f:id:etupirka_h:20181223031121p:plain

Windows Serverに触った知識がなかったので、勉強のためWindows Serverをご家庭に導入してみていたのですが、まさに想定通りの間違い&学びの経験が得られました。