かつて山市良と呼ばれたおじさんのブログ
セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.161 仮想化とActive Directoryの考慮点|Windows Server 2016 EOSまであと400日
2025年12月08日配信
執筆者:山内 和朗
Windows Server 2016の製品ライフサイクルとサポート終了日(End of LifeCycle《EOL》、End of Support《EOS》)である2027年1月12日までまだ1年以上ありますが、対策に着手するには遅すぎるくらいです。今回は、仮想環境におけるActive Directoryドメイン環境の一般的な考慮点について説明します。
Windows Server 2012以降、Hyper-VやVMwareの仮想マシン(VM)で実行されるドメインコントローラーのために、更新シーケンス番号(USN)ロールバック問題を防止するためのセーフガード機能と、ドメインコントローラーの複製(クローン)機能がサポートされました。現在、Windows ServerのActive Directoryフォレスト/ドメインを展開するために、VM環境は問題なく利用できます。
Hyper-V によるドメイン コントローラーの仮想化|Windows Server(Microsoft Learn)
Active Directory Domain Services (AD DS) の安全な仮想化|Windows Server(Microsoft Learn)
しかしながら、VM環境でドメインコントローラーを運用する場合は、いくつか考慮するべき点があります。
Active Directoryの認証プロトコル、Kerberos認証は時間に厳格です。許容される時間のずれは5分以内であり、これを超えると認証エラーが発生する可能性があります。
Active Directory環境では、独自の階層的な時刻同期メカニズムにより、ドメイン全体で時刻同期が行われます。ドメインメンバーであるクライアントとサーバーは、ログオン先のドメインコントローラーと時刻同期し、各ドメインはそのドメインのPDCエミュレーターのFSMO役割を持つドメインコントローラーと同期します。そして、最終的にはフォレストルートのPDCエミュレーターであるドメインコントローラーと同期されます。フォレストルートのPDCエミュレーターは、外部の正確なNTPサーバー(日本標準時《JST》グループが更改するntp.nict.jpなど)をソースとして時刻同期するように設定することが推奨されます。
Hyper-Vなどの仮想環境では、ホストがVMに時刻同期サービスを提供します。Hyper-V VMではHyper-Vホストとの時刻同期が既定で有効です。VMで実行されるドメインコントローラーでは、ホストとの時刻同期はオフにして(画面1)、代わりに、Active Directoryの階層的な時刻同期メカニズムに任せるべきです。そして、フォレストルートのPDCエミュレーターになっているドメインコントローラーで、外部NTPサーバーとの同期を構成します。

画面1 ドメインコントローラーでは、Hyper-Vホストとの時刻同期をオフにする
フォレストルートのPDCエミュレーターを確認するには、フォレストの最初のドメインのドメインコントローラーで、以下のコマンドラインをPowerShellまたはコマンドプロンプト(cmd.exe)で実行することで確認できます。なお、1つのフォレストに1つのドメインコントローラーしか存在しない場合、そのドメインコントローラーはフォレストルートのドメインのPDCエミュレーターです。
| Get-ADDomain | Select PDCEmulator netdom query fsmo |
フォレストルートのPDCエミュレーターであるドメインコントローラーは1台です。外部NTPサーバーとの時刻同期は、このドメインコントローラーだけで設定すればよいことになります。コマンドプロンプトで次のコマンドラインを実行することで、現在の設定の確認、ntp.nict.jpとの同期設定を行い、手動で時刻同期を実行できます。「0x8」は、NTPサーバーにClientモードで問い合わせるためのフラグです。
| w32tm /query /status w32tm /config /manualpeerlist:"ntp.nict.jp,0x8" /syncfromflags:manual /reliable:yes /update net stop w32time && net start w32time w32tm /resync w32tm /query /status |
※ /syncfromflags:manual は /mauulalpeerlistに指定したソースからのみ時刻同期を行う設定
最初の「w32tm /query /status」は、Hyper-Vホストと時刻同期が有効な場合は「ソース: VM IC Time Syncronization Provider」、無効な場合は「ソース: Local CMOS Clock」を返します。いずれの場合も、Windowsの時刻の自動設定が有効になっていて、その機能で時刻が調整された場合は、Windowsの既定のNTPサーバー「ソース: time.windows.com,0x9」(0x9は0x8+間隔0x1《1時間ごと》)を返します。外部NTPサーバーを設定し、時刻の同期後に「ソース: ntp.nict.jp,0x8」と返ってくれば成功です(画面2)。

画面2 フォレストルートのPDCエミュレーターで外部NTPサーバーとの時刻同期を設定する
ドメインメンバーのサーバーやクライアントも、VMで実行されている場合は、同様にホストとの時刻同期をオフにすることを推奨します。ドメインメンバーのサーバーやクライアントでは、ホストとの時刻同期をオフにした上で、「w32tm /resync」と「w32tm /query /status」を実行して「ソース: <ドメインコントローラー名>.<DNSドメイン名>」が返ってくることを確認します(画面3)。

画面3 Active Directoryのドメインメンバーであるサーバーやクライアントも、VMの場合はホストとの時刻同期をオフにして、ドメインコントローラーと時刻同期させる
運用環境の場合、仮想環境にあるドメインコントローラーやドメインメンバーではホストとの時刻同期をオフにして、Active Directoryの階層的な時刻同期メカニズムに任せるべきですが、テストや評価のための環境の場合はホストとの時刻同期を使用したほうがよい場合があります。
テストや評価では、VMの状態を保存して停止し、時間がたってから起動(保存された状態から復元)したり、チェックポイントを適用して以前保存した状態に戻したりすることがあります。時間のずれがあまりにも大きくなると*1、時刻同期が行われず、再起動するまで過去の日時のまま動いてしまうことがあります(画面4)。同じHyper-Vホスト上で稼働するVMであれば、Hyper-Vホストとの時刻同期に任せても、Kerberos認証に影響するような時刻のずれは生じないはずです。
*1 Windows Server 2012以降のドメインコントローラーとドメインメンバーは、48時間(既定値)を超えた時刻のずれがある場合、時刻を同期しません。→ 大規模なタイム オフセットに対してWindows タイム サービスを構成する方法|Windows Server(Microsoft Learn)

画面4 状態の保存やチェックポイントを多用するような環境では、ホストとの時刻同期を使用したほうが時刻同期の無用なトラブルを回避できる
参考: 以下の製品コラムでは、弊社製品BOM for Windowsを使用して、ローカルまたはHyper-V上のVMのシステム時刻のずれを監視する方法を紹介しています。
システム時刻の大きなズレを監視したい-BOM for Windows活用例|製品コラム
ドメインコントローラーが物理サーバーとVMのどちらで実行されている場合でも、Active Directoryの書き込みの持続性を確保するために、Active Directoryデータベースファイル(既定はC:¥Windows¥NTDS¥ntds.ditおよびログ)とSYSVOL(既定はC:¥Windows¥SYSVOL)を、OSディスクとは別のディスクに配置することが推奨されています。これらのファイルが配置されるディスクでは、ディスクの書き込みキャッシュ機能を無効にすることが推奨されます。
Hyper-V VMをドメインコントローラーにする場合は、NTDSとSYSVOLの場所を、VMのSCSIコントローラーに接続された仮想ハードディスクファイル(VHDX)上のボリュームに配置します(画面5)。VMのSCSIコントローラーおよびVHDX形式はパフォーマンスが最適化されており、FUA(Forced Unit Access)機能をサポートしているため、ディスクの書き込みキャッシュの設定に関係なく、OSはキャッシュメカニズムをバイパスして読み書きします。*2*3 書き込みキャッシュを明示的に無効にする必要はありません。パフォーマンスを最適化するためには、容量固定サイズのVHDXまたは物理ディスク(パススルーディスク)の使用を推奨します。物理ディスク(パススルーディスク)を使用すると、データ破損の可能性がさらに低下します。
*2 第1世代VMのIDEコントローラーに接続する場合は手動で書き込みキャッシュを無効化する必要があります
*3 FUAが機能するためには、仮想ハードディスクファイル(VHDX)が配置されるHyper-Vホストの物理ディスクがSCSIコマンドを理解できる必要があります。ATA/IDEコントローラー接続のディスクの場合は、ホスト側でそのディスクの書き込みキャッシュを明示的に無効にする必要があります。

画面5 ドメインコントローラーへの昇格時にNTDSとSYSVOLを別ディスク(VMのSCSIコントローラー接続の別VHDX)に配置する
既に既定のパスにNTDSとSYSVOLを配置するようにしてインストールされたWindows Server 2016以降のドメインコントローラーがある場合は、Active Directoryのローリングアップグレードの方法でWindows Server 2025に移行する際に、NTDSとSYSVOLの最適な配置でインストールした物理サーバーやVMのドメインコントローラーと入れ替えるとよいでしょう。以下に、現在のNTDSとSYSVOLの配置を変更する手順が説明されていますが、かなり古いドキュメントであるため、失敗のリスクがあるため、ローリングアップグレードで最適な配置に移行することをお勧めします。
Ntdsutil を使用して Active Directory ファイルを管理する方法|Windows Server(Microsoft Learn)
SYSVOLツリーの再配置|Windows Server(Microsoft Learn)
※どちらも古いドキュメントであり、現在のWindows ServerバージョンのActive Directoryに適用できるかどうか確証はありません。
Windows Server 2016 EOSまであとX日(1)|...|(16)|(17)|(18)|(19)|(20)