USN ロールバックの検出方法と回復について

Windows プラットフォーム サポートの関です。

ドメイン コントローラー間でのレプリケーションが行われなくなる原因の 1 つに USN ロールバックと呼ばれる事象があります。
この USN ロールバックは、イメージからのリストアなどのサポートされない方法で復元してしまった場合に発生します。
USN ロールバックが起きると、ドメイン コントローラー間での USN (更新シーケンス番号) の不整合が発生してしまうため、レプリケーションが停止されます。

同様の問題を扱った弊社の公開情報は既に存在しますが、一部分かりづらい箇所もあるため、改めてこの問題について執筆します。
この記事では、USN ロールバックが発生しているかどうかを確認するための方法と、回復の手順をまとめました。

==================================================
** USN ロールバック発生時の特徴 **
==================================================
レプリケーションが停止した場合、下記のような特徴が見られるかどうかで、USN ロールバックによるものかどうかを判断することができます。

< 特徴 1 >
"repadmin /showrepl" コマンドを実行し、DSA オプションの欄を確認します。
現象が発生しているドメイン コントローラーでは、[DISABLE_INBOUND_REPL] および [DISABLE_OUTBOUND_REPL] というオプションが追加されています。
これにより、入出力方向のレプリケーションが停止されていることが分かります。

// 正常なドメイン コントローラー
******************************
DSA オプション: IS_GC
******************************

// 現象が発生しているドメイン コントローラー
******************************
DSA オプション: IS_GC DISABLE_INBOUND_REPL DISABLE_OUTBOUND_REPL
******************************

< 特徴 2 >
Netlogon サービスの [状態] が [一時停止] となる。

< 特徴 3 >
レジストリ値 Dsa Not Writable のデータが 4 となっている。

- 当該レジストリ値
キー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
値の名前: Dsa Not Writable
値の種類: REG_DWORD
値のデータ: 4

< 特徴 4 >
Directory Service のイベント ログに ID: 2095 が記録されている。

==================================================
** USN ロールバックからの回復手順 **
==================================================

概要
-----------------
USN ロールバックが発生すると、不具合が発生しているドメイン コントローラーが保持している AD データベースを破棄し、再構成するために、対象のドメイン コントローラーの強制降格、再昇格を実施する必要があります。
また、対象のドメイン コントローラーが FSMO の役割を保持している場合には、事前に正常なドメイン コントローラーに強制転送しておく必要があります。

なお、本手順は Windows Server 2016 を前提とした表記となっております。

作業手順
-----------------
A. FSMO 役割の確認と転送手順
A-1. FSMO の役割確認
A-2. FSMO の役割転送 (A-1 で降格対象のドメイン コントローラーが FSMO 役割を保持していた場合にのみ実施)

B. ドメイン コントローラーの降格手順
B-1. ドメイン コントローラーの強制降格手順
B-2. Metadata Cleanup 手順

C. 再昇格手順

作業手順詳細
-----------------
A-1. FSMO の役割の確認
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
USN ロールバックが発生しているドメイン コントローラーが、FSMO の機能を持っていないかを確認します。
確認の結果、FSMO の機能を持っていない場合、A-2 の作業は不要です。

作業対象:
USN ロールバックが発生しているドメイン コントローラー

作業手順:
1. 以下のコマンドを実行し、 FSMO の役割をどのサーバーが担っているか確認します。

netdom query fsmo

(出力例)--------------------------------------
スキーマ マスター DC01.test.local
ドメイン名前付けマスター DC01.test.local
PDC DC01.test.local
RID プール マネージャー DC01.test.local
インフラストラクチャ マスター DC01.test.local
コマンドは正しく完了しました。
----------------------------------------------

A-2. FSMO の役割の転送
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
本手順では強制的に正常なドメイン コントローラーに FSMO の役割を転送します。
A-1 で USN ロールバックが発生したドメイン コントローラーが FSMO の役割を保持していた場合にのみ実施します。

作業対象:
FSMO の役割の転送先となる正常なドメイン コントローラー

作業手順:
1. FSMO 転送先ドメイン コントローラーにログオンします。
2. コマンド プロンプトを管理者権限で開きます。
3. ntdsutil と入力します。
4. roles と入力し、Enter キーを押します。
5. connections と入力し、Enter キーを押します。
6. connect to server localhost と入力し、Enter キーを押します。
7. server connections: プロンプトで q と入力し、もう一度 Enter キーを押します。

--- USN ロールバックが発生しているドメイン コントローラーが保持している FSMO の役割に対してのみ実施します ---

8. RID プール マネージャーを転送する場合には、Seize RID master と入力し、実行します。
9. インフラストラクチャ マスターを転送する場合には、Seize infrastructure master と入力し、実行します。
10. PDC エミュレーターを転送する場合は、Seize PDC と入力し、実行します。
11. ドメイン名前付けマスターを転送する場合は、Seize naming master と入力し、実行します。
12. スキーマ マスターを転送する場合には、Seize schema master と入力し、実行します。
13. q を 2 回実行し、コマンド プロンプトを閉じます。
14. 転送が正常に行われた確認する場合には、A-1 の手順を実施します。

B-1. ドメイン コントローラーの強制降格手順
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
本手順では USN ロールバックが発生したドメイン コントローラーを強制的に降格します。

作業対象:
USN ロールバックが発生しているドメイン コントローラー

作業手順:
1. 降格対象のドメイン コントローラーに管理者権限のユーザーでログオンします。
2. [サーバー マネージャー] を起動します。
3. ウィンドウ上部のツールバーより [管理] - [役割と機能の削除] をクリックし "役割と機能の追加ウィザード" を開きます。
4. "役割と機能の削除ウィザード (対象サーバーの選択)" 画面にて、[サーバー プールからサーバーを選択] を選択した上で [サーバー プール] 内の自ホストを選択し、[次へ] をクリックします。
5. "役割と機能の削除ウィザード (サーバーの役割の選択)" 画面にて、役割項目内から下記のチェックを外し、[次へ] をクリックします。

- Active Directory ドメイン サービス
# 各役割のチェックを外すと "{サービス名} を必要とする機能を削除しますか?" と表示されます。
既定の状態で [機能の削除] をクリックします。

6. "検証結果" のダイアログが表示されたら、[このドメイン コントローラーを降格する] をクリックします。
7. "資格情報" 画面にて、以下を指定し、[次へ] をクリックします。

[この操作を実行するには資格情報を指定してください] : 管理者権限を持つユーザーの資格情報を指定します。
[このドメイン コントローラーの削除を強制] : チェック ボックスを "オン" にします。
[ドメイン内の最後のドメイン コントローラー] : チェック ボックスを "オフ" にします。

8. "警告" 画面にて、対象のドメイン コントローラーの役割の確認が表示されます。内容を確認した上で [削除の続行] のチェック ボックスをオンにし、[次へ] をクリックします。
9. "新しい Administrator パスワード" 画面にて、降格後の作業対象のサーバーの Administrator パスワードを入力し、[次へ] をクリックします。
10. "オプションの確認" 画面にて、内容を確認し、[降格] をクリックします。
11. 降格処理が完了したら "サインオフしようとしています" というメッセージが表示され、自動で再起動が行われます。

B-2. Metadata Cleanup 手順
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
B-1 の手順で強制降格した場合には、以下の手順で降格したドメイン コントローラーの情報を手動で削除する必要があります。

作業対象:
正常に稼働しているドメイン コントローラーのうち、任意の 1 台

作業手順:
1. 管理者権限を持つユーザーで正常なドメイン コントローラーにログオンします。
2. [サーバーマネージャー] を起動します。
3. ウィンドウ上部のツールバーより [ツール] - [Active Directory ユーザーとコンピューター] をクリックします。
4. [Active Directory ユーザーとコンピューター] 画面左ペインにて以下まで展開します。

Active Directory ユーザーとコンピューター
- <ドメイン名>
- Domain Controllers

5. 右ペインにて <削除対象のドメイン コントローラー> を右クリックし、[削除] をクリックします。
6. "'<削除対象のドメイン コントローラー>' という名前の コンピューター を削除しますか?" と表示されたら、[はい] をクリックします。
7. 警告メッセージが表示されるので、下記チェック ボックスをオンにし、[削除] をクリックします。

[完全オフラインで、削除ウィザードを使用して削除できないこのドメイン コントローラーを削除する]

# ドメイン コントローラーがグローバル カタログである場合、"この Active Directory ドメイン コントローラーはグローバル カタログです。削除を実行しますか?"と表示されます。
# FSMO の機能を保持している場合には、警告のダイアログが表示されます。
正しく動作しているドメイン コントローラーに FSMO の役割が転送されます。
内容を確認し、[OK] をクリックします。"

8. [サーバー マネージャー] の画面に戻り、[ツール] - [Active Directory サイトとサービス] をクリックします。
9. 左ペインの [Sites] - [<サイト名>] - [Servers] - [<ドメイン コントローラー名>] - [NTDS Settings] を選択します。
10. 右ペインに [レプリケート元サーバー] が削除対象のドメイン コントローラーとなっているオブジェクトが存在していれば、左ペインの [NTDS Settings] を右クリックし、[すべてのタスク] - [レプリケーション トポロジの確認] をクリックします。
11. 右ペインにて [最新の情報に更新] し、削除対象のドメイン コントローラーとのオブジェクトが削除されることを確認します。
12. 9 から 11 までの手順を [Sites] - [<サイト名>] - [Servers] の削除対象のドメイン コントローラーを除く、すべてのドメイン コントローラーについて実行します。
13. 左ペインにて [Sites] - [<削除対象のドメイン コントローラーのサイト名>] - [Servers] - [<削除対象のドメイン コントローラー名>] を選択した状態で右クリックし、表示されるメニューで [削除] をクリックします。

C. 再昇格手順
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
降格作業を実施後に再度昇格を行う手順です。

作業対象:
降格を実施し、再昇格を行うドメイン コントローラー

作業手順:
1. 降格対象のドメイン コントローラーに管理者権限のユーザーでログオンします。
2. [サーバー マネージャー] を起動します。
3. ウィンドウ上部のツールバーより [通知] をクリックし、[このサーバーをドメイン コントローラーに昇格する] をクリックします。
4. "配置構成" 画面にて、以下を選択、入力し、[次へ] をクリックします。

配置操作を選択してください : 既存のドメインにドメイン コントローラーを追加する
この操作のドメイン情報を指定してください : <既存ドメイン名>
この操作を実行するには資格情報を指定してください : <ドメイン管理者ユーザー アカウント / パスワード>

5. "ドメイン コントローラー オプション" 画面にて、要件に合わせてドメイン コントローラー オプションや DSRM のパスワードを選択、入力し、[次へ] をクリックします。
6. "DNS オプション" 画面にて、[次へ] をクリックします。

# 権限のある親ゾーンが見つからないことを示すダイアログが表示された場合は、そのまま次に進みます。

7. "追加オプション" 画面にて、以下を選択し、[次へ] をクリックします。

レプリケート元 : [任意のドメイン コントローラー]

8. "パス" 画面にて、以下を確認し、[次へ] をクリックします。

データベースのフォルダー : C:\Windows\NTDS
ログ ファイルのフォルダー : C:\Windows\NTDS
SYSVOL フォルダー : C:\Windows\SYSVOL

9. "オプションの確認" 画面にて、[次へ] をクリックします。
10. "前提条件のチェック" 画面にて、内容を確認し、[インストール] をクリックします。
11. インストールが完了すると自動的に OS が再起動されます。