Active Directory ドメイン サービスでは、組織内のユーザーやリソースなどのデータをドメイン コントローラーで管理しています。ドメインには複数のドメイン コントローラーを構築することができ、全てのドメイン コントローラーで同じデータを保持している必要があります。
そのため、ドメイン コントローラー間でAD データベース内のデータを複製し、全てのドメイン コントローラーが同じデータを保持しています。全てのドメイン コントローラーがデータの変更を受け付けることができる「マルチマスター レプリケーション」の仕組みで複製しています。
ドメイン コントローラーの間で AD データベースの複製が行われなくなる原因の1つに「USN ロールバック」と呼ばれる事象があります。USN ロールバックが発生すると、ドメイン コントローラー間で複製に使用されている USN(更新シーケンス番号)に不整合が生じるため、複製が自動で停止されます。USN で更新状態を管理して、AD データベースの複製を行う詳細な仕組みについては、以下の記事で紹介しております。
Active Directory ドメイン サービスでは、組織内のユーザーやリソースなどのデータをドメイン コントローラーで管理しています。ドメインには複数のドメイン コントローラーを構築することができ、全てのドメイン コントローラーで同じ[…]
今回は、USN ロールバックの基本知識と、原因・対処策について紹介します。
USN ロールバックとは?
ドメイン コントローラーでは、ユーザーやグループ、コンピューター アカウントなど、ドメインの管理に必要な各種オブジェクトの情報を AD データベースで管理しています。ドメイン内では複数のドメイン コントローラーを構築することができ、ドメイン コントローラー間でデータを複製して、全てのドメイン コントローラーの AD データベースで同じデータを保持しています。
それぞれのドメイン コントローラーでは USN(更新シーケンス番号)と呼ばれる、AD データベースの更新状態を管理するための内部的な番号を保持しています。USN は各ドメイン コントローラーにて独自に管理しており、USN にて更新状態を管理することにより、ドメイン コントローラー間でデータの複製を行ってもデータに不整合が生じない仕組みとなっています。
Active Directory をサポートしていない方法でリストアを行った場合、ドメイン コントローラーが過去の状態に戻ることで、USN のロールバック(巻き戻し)が発生します。その結果、データの複製により AD データベースの整合性に問題が発生しうる状態となります。USN は更新により番号がインクリメントされ続けることが前提となっています。リストアにより特定のドメイン コントローラーの USN が以前よりも小さい番号に巻き戻った場合、他のドメイン コントローラーは異常が生じたと検知し、AD データベース内のデータの更新情報を保護するために、そのドメイン コントローラーとの複製を停止します。
このように、ドメイン コントローラーのリストアにより USN の番号が巻き戻ることを「USN ロールバック」と呼び、USN ロールバックが発生すると AD データベースの複製が停止した状態となります。USN ロールバックにより AD データベースの複製が停止した場合は、対処策として USN が巻き戻ったドメイン コントローラーを再昇格する必要があります。
一般的な要因
USN ロールバックは、一般的に以下の方法でリストアした場合に発生します。
- Active Directory をサポートしていないバックアップ ツールでバックアップを採取しリストア
- ハイパーバイザーのスナップショットからリストア(※注)
ドメイン コントローラーのバックアップ、リストアを行うには、ツールが Active Directory Domain Service(AD DS)に対応している必要があります。マイクロソフト製品では、”Windows Server バックアップ” が対応しています。
(※注) Windows Server 2012 の OS 標準ツールである Hyper-V 3.0 以降と、ドメイン コントローラーが Windows Server 2012 以降の OS の組み合わせである場合、VM-Generation ID と呼ばれる識別番号によるバックアップの機能がサポートされいます。VM-Generation ID が利用可能な場合は、スナップショットからドメイン コントローラーをリストアしても USN ロールバックの問題は発生しません。
USN ロールバックの内部動作
USN ロールバックは、ドメイン コントローラーがリストアして元の状態に戻り、USN が巻き戻った場合に発生します。AD データベースの内部動作として、Active Directory をサポートしているバックアップ ツールでリストアしたケース、サポートしていないバックアップ ツールでリストアして USN ロールバックが発生するケースの内部動作について紹介します。
今回は、DC01 と DC02 の 2 台のドメイン コントローラーが存在する環境での、リストアのシナリオを紹介します。
AD データベースの複製に関連用語
USN ロールバックの仕組みを紹介するために、AD データベースのデータの管理や複製に関連する用語について紹介します。
Naming Context
Naming Context (名前付きコンテキスト) とは、AD データベースのパーティションのことを意味しています。
AD データベースは「パーティション」と呼ばれる単位で、データの格納領域が区切られています。既定では、「ドメイン パーティション」、「構成パーティション」、「スキーマ パーティション」などのパーティションが存在します。パーティションごとに複製範囲となるドメイン コントローラーが異なるため、各ドメイン コントローラーが複製される対象の Naming Context を把握しておく必要があります。
USN (Update Sequence Number)
USN (Update Sequence Number/更新シーケンス番号) とは、ドメイン コントローラーの AD データベースの更新状態を管理する番号のことです。USN は各ドメイン コントローラーごとに保持しており、64 bit の数字となっています。USN は、AD データベースで管理しているデータが更新されると、数字が繰り上がります。データの更新とは、ドメイン コントローラー独自での更新、また複製による更新のいずれも USN の数字の繰上りの対象となります。
High Watermark
各ドメイン コントローラー上に保持されるテーブルで、複製対象のパーティションごとに High Watermark のテーブルを保持しています。High Watermark のテーブルには、全ての複製パートナーの一覧と、自身が認識している複製パートナーの USN の最大値を管理しています。USN は、独自の複製、更新に関わらず、最新の更新の USN となります。
Up-to-Dateness Vector
各ドメイン コントローラー上に保持されるテーブルで、複製対象のパーティションごとに Up-to-Datenaess Vector のテーブルを保持しています。Up-to-Datenaess Vector のテーブルには、Originating DC と Originating USN の最大値を管理しています。
余分な複製を抑止するために、複製データを送信する際に「どのドメイン コントローラーで更新が行われたか」をふまえて判断します。
DSA GUID
DSA GUID とは、各ドメイン コントローラーを識別する ID です。
Invocation ID
Invocation ID とは、各ドメイン コントローラーの AD データベースに割り当てられている ID です。Invocation ID は DSA 起動 ID や Database GUID とも呼ばれます。Windows Server バックアップなど、Active Directory をサポートしているバックアップ ツールでドメイン コントローラーをリストアした後には、 AD データベースの Invocation ID の値は変更され、他のドメイン コントローラーに通知されます。
Tombstone
Tombstone とは、AD データベースにて廃棄されたデータのことです。AD データベースでは、オブジェクトが削除されると、すぐにオブジェクトのデータが AD データベースから削除されるのではなく、オブジェクトの isDeleted 属性の値が True となって隠しコンテナに移動されます。AD には Tombstone Lifetime という廃棄されたデータの保存期間が設定されており、Tombstone Lifetime が過ぎたら完全にデータが削除されます。
AD 非サポートのツールでリストア(USN ロールバック発生)
Active Directory をサポートしていない方法でリストアを行った場合、ドメイン コントローラーが過去の状態に戻ることで、USN のロールバック(巻き戻し)が発生します。Active Directory をサポートしていない方法でリストアした場合の内部動作は以下の通りです。
①ドメイン コントローラーをリストア
DC01 をリストアによりバックアップ取得時の状態に復元したとします。その際に、DC01 の AD データベースで管理している USN の状態も元に戻ります。
② USN ロールバックを検知
DC01 の複製パートナーである DC02 では、High Watermark の情報により DC01 の最新の USN の情報を把握しています。リストアにより USN が巻き戻った場合、DC02 も USN が巻き戻ったことを検知します。DC01 にて AD データベースの変更が行われた場合、その変更を DC02 に複製すると、AD データベースにてデータの不整合が生じます。複製によるデータの不整合がおきないように、DC01 からの複製は自動的に停止されます。
AD サポートのツールでリストア
Active Directory をサポートしている方法でリストアを行った場合、ドメイン コントローラーの AD データベースの Invocation ID が更新されます。ドメイン コントローラーの Invocation ID が切り替わった場合、他のドメイン コントローラーはリストアされたことを認識でき、リストア後に他のドメイン コントローラーからデータの複製を行います。
①ドメイン コントローラーをリストア
DC01 をリストアによりバックアップ取得時の状態に復元したとします。Active Directory をサポートしているバックアップ ツールでリストアした場合、ドメイン コントローラーの Invocation ID が変更されます。
② AD データベースを複製
DC01 の複製パートナーである DC02 では、AD データベースの識別子である Invocation ID が切り替わったため、DC01 がリストアされたことを認識できます。そのため、DC01 でのバックアップ時の状態から最新の状態までの差分データを、DC02 から複製します。
USN ロールバックの発生時の特徴
ドメイン内にてドメイン コントローラー間の複製が停止している場合、複製の停止の原因が「USN ロールバック」であるかは、以下の特徴の有無により判断できます。
① repadmin /showrepl コマンド
USN ロールバックが発生したドメイン コントローラーでは、AD データベースの複製が自動停止した状態となっています。そのため、AD データベースの複製状態が確認できる “repadmin /showrepl” コマンドにおいて、複製が停止されていることを示すフラグ「DISABLE_INBOUND_REPL」(入力)「DISABLE_OUTBOUND_REPL」(出力)が表示されます。
■正常なドメイン コントローラーでの表示
C:\>repadmin /showrepl
Repadmin: フル DC localhost に対してコマンド /showrepl を実行しています
Default-First-Site-Name\TEST01DC01
DSA オプション: IS_GC
サイト オプション: (none)
DSA オブジェクト GUID: 4da3d19a-6dbd-434c-a5fb-8cf8981eb851
DSA 起動 ID: 394824d5-84b2-444e-a62e-441ae379e26d
==== 入力方向の近隣サーバー======================================
DC=test01,DC=local
Default-First-Site-Name\TEST01DC02 (RPC 経由)
DSA オブジェクト GUID: 607984c7-bd56-48f1-b634-c76df65793a7
2023-05-03 10:51:16 の最後の試行は成功しました。
CN=Configuration,DC=test01,DC=local
Default-First-Site-Name\TEST01DC02 (RPC 経由)
DSA オブジェクト GUID: 607984c7-bd56-48f1-b634-c76df65793a7
2023-05-03 10:51:16 の最後の試行は成功しました。
■複製が停止しているドメイン コントローラー
C:\>repadmin /showrepl
Repadmin: フル DC localhost に対してコマンド /showrepl を実行しています
Default-First-Site-Name\TEST01DC01
DSA オプション: IS_GC DISABLE_INBOUND_REPLDISABLE_OUTBOUND_REPL
サイト オプション: (none)
DSA オブジェクト GUID: 4da3d19a-6dbd-434c-a5fb-8cf8981eb851
DSA 起動 ID: 394824d5-84b2-444e-a62e-441ae379e26d
==== 入力方向の近隣サーバー======================================
DC=test01,DC=local
Default-First-Site-Name\TEST01DC02 (RPC 経由)
DSA オブジェクト GUID: 607984c7-bd56-48f1-b634-c76df65793a7
2023-05-03 13:22:24 の最後の試行は成功しました。
CN=Configuration,DC=test01,DC=local
Default-First-Site-Name\TEST01DC02 (RPC 経由)
DSA オブジェクト GUID: 607984c7-bd56-48f1-b634-c76df65793a7
2023-05-03 13:22:24 の最後の試行は成功しました。
② Netlogon サービス
USN ロールバックが発生したドメイン コントローラーでは、Netlogon サービスが一時停止の状態となっています。対象のドメイン コントローラーにて、[サービス] を開き、Netlogon サービスが “一時停止” の状態となっているか確認します。
③ レジストリ Dsa Not Writeable
USN ロールバックが発生したドメイン コントローラーでは、レジストリ “Dsa Not Writable” の値が 4 となっています。対象のドメイン コントローラーにて、レジストリ エディタを開き、以下のレジストリの設定の値が 4 となっているか確認します。
値の名前: Dsa Not Writable
型:REG_DWORD
設定値: 4
④ イベント ID 2095
USN ロールバックが発生したドメイン コントローラーでは、Directory Service イベント ログにイベント ID 2095 が記録されています。対象のドメイン コントローラーにて、イベント ビューアーを開き、[アプリケーションとサービス ログ] – [Directory Service] を選択して、Directory Service イベント ログにイベント ID 2095 が記録されていないか確認します。
ログ:Directory Service
ソース名:Microsoft-Windows-ActiveDirectory_DomainService
日付: YYYY/MM/DD HH:MM:SS
イベント ID:2095
イベント ソース名:NTDS General
レベル:エラー
タスクのカテゴリ:レプリケーション
オペコード:情報
キーワード:クラシック
メッセージ:Active Directory ドメイン サービスのレプリケーション要求中に、既に認知されている USN 追跡番号を使って ローカル DC からレプリケーション データを受信したリモート DC を、ローカル ドメイン コントローラー (DC) が識別しました。
リモート DC は、ローカル DC より新しい Active Directory ドメイン サービス データベースを持っていると考える ため、リモート DC は今後の変更を Active Directory ドメイン サービス データベースにあるコピーに適用しません。 また、このローカル DC を元とする直接または推移性のレプリケーション パートナーにも変更を レプリケートしません。 この問題が今すぐ解決されない場合、このソース DC の Active Directory ドメイン サービス データベースと直接および推移性の レプリケーション パートナーの 1 つまたはそれ以上に、矛盾が発生することになります。ユーザー、コン ピューターと信頼関係、パスワード、セキュリティ グループ、セキュリティ グループのメンバーシップ、および そのほかの Active Directory ドメイン サービス構成データで矛盾が発生し、ログオン、希望のオブジェクトの検索、および そのほかの重要な操作を実行する能力に影響を及ぼします。 この構成の問題が存在するかどうかを確認するには、http://support.microsoft.com を使ってこのイベント ID を照会するか、Microsoft 製品サポートに問い合わせてください。 この問題の原因として一番に考えられるのは、ローカル ドメイン コントローラーでの Active Directory ドメイン サービスの不適切な復元です。 ユーザー操作: 不適切な、または意図しない復元によってこの問題が発生した場合は、強制的に DC を降格してください。 リモート DC: 286b8f2e-7245-4640-847a-a8c82ad2bc6f (TEST01DC01.nekomaru.local) パーティション: DC=nekomaru,DC=local リモート DC によって報告された USN: 39473 ローカル DC によって報告された USN: 38392
対処策
USN ロールバックが発生したドメイン コントローラーでは、強制降格/メタデータ削除を行った後に、ドメイン コントローラーへ再昇格することにより復旧することができます。作業の流れは以下の通りです。
- USN ロールバックが発生したドメイン コントローラーを強制降格
- メタデータ削除
- ドメイン コントローラーの再昇格
ドメイン コントローラーの強制降格、メタデータ削除の詳細な手順については、以下の記事で紹介しています。
ドメイン コントローラーの降格とは、ドメイン コントローラーから通常のサーバーにすることです。ドメイン コントローラー上で問題が発生して、やむなくドメイン コントローラーを降格することもあります。 他のドメイン コントローラーと通信できない[…]
VM-Generation ID
VM-Generation ID とは、Hyper-V のハイパーバイザーが割り当てる仮想マシンの世代識別子です。仮想マシンでスナップショットを復元したり、コピーを作成したら仮想マシンの世代が上がります。仮想マシンの起動や停止では、仮想マシンの世代は変わりません。
また、仮想マシン上でドメイン コントローラーを構成した場合、AD データベースにて msDS-GenerationID 属性を管理しています。msDS-GenerationID は、ドメイン コントローラーに昇格したときに VM-Generation ID の初期値がセットされます。
通常、仮想マシン上に構築しているドメイン コントローラーをスナップショットで元の状態に戻した場合、AD データベースの状態も元に戻るため、USN ロールバックが発生します。しかし、VM-Generation ID をサポートしている環境においては、仮想マシンが起動したタイミングにおいて、VM-Generation ID と msDS-GenerationID で管理されている ID が一致しているかどうかを確認します。VM-Generation ID と msDS-GenerationID の ID が一致している場合は、そのままドメイン コントローラーとして稼働します。一方、VM-Generation ID と msDS-GenerationID が一致しない場合は、DCCloneConfig.xml ファイルの有無を確認して切り戻しの処理を行います。DCCloneConfig.xml ファイルがある場合はクローニング処理を行い、DCCloneConfig.xml ファイルが存在しない場合は、(1) AD データベースの Invocation ID の再設定、(2) RID プールを破棄して、新たなプールの割り当て、(3) 他のドメイン コントローラーから AD データベースの最新データを複製の処理を行います。
一般的には、スナップショットにて仮想マシンを切り戻すと、AD データベースも元の状態に戻るため、USN ロールバックが発生します。しかしながら、VM-Generation ID がサポートされている環境の場合、ドメイン コントローラーの起動時に切り戻しの処理が行わるため、スナップショットからリストアしても USN ロールバックの問題は発生しません。
VM-Generation ID を利用するには、以下の要件を満たしている必要があります。
- Hyper-V 3.0 以降
- Windows Server 2012 以降