VMware ESXi サーバの HDD 死亡後、同期の取れなくなった Windows Server 2008 Active Directory ドメインコントローラについての情報を、生き残っているドメインコントローラのスキーマから完全に削除する方法について。また、ドメインベースの DFS 名前空間情報を削除する方法についてです。
VMware ESXi サーバの HDD が物理的に死亡した話を書きましたが、こういう時は基本的に、バックアップしてあった仮想マシンのファイル群を、Converter Standalone Client で復元してやれば、仮想マシンは瞬間冷凍から復活した金魚のように活動再開しますが、Windows Server 2008 ベースで複数稼働している Active Directory のドメインコントローラとなると、少々勝手が違います。
Kerberos エラーが示す Active Directory 同期の崩れ
同一ドメイン example.com のドメインコントローラ (以下 DC) A, B が合計 2台、お互いに同期を取りながら稼働していたとします。DC-B が死んで VMware 仮想マシンとしてのバックアップから書き戻しても、再び同期が取れるようになるとは限りません。
同期が取れなくなったときに、イベントビューアに Kerberos に関する超絶長いエラーメッセージが残ります。
Kerberos クライアントはサーバー (相手 Active Directory サーバ名)$ から KRB_AP_ERR_MODIFIED エラーを受信しました。使用したターゲット名は xxxxxxxxxxxxxxx でした。これは、ターゲット サーバーがクライアントにより提供されたチケットの暗号化に失敗したことを示します。これは、ターゲット サーバーのプリンシパル名 (SPN) が、ターゲット サービスにより使用されているアカウントとは別のアカウントで登録されている場合に発生します。ターゲット SPN をサーバーにより使用されているアカウントで登録したうえで、その他のアカウントでは登録しないようにしてください。このエラーは、ターゲット サービスが使用しているターゲット サービス アカウントのパスワードが、Kerberos キー配布センター (KDC) の持っているターゲット サービス アカウントのパスワードと異なる場合にも発生します。サーバー上のサービスと KDC の両方が最新のパスワードを使用するように更新されていることを確認してください。ターゲット ドメイン (example.com) がクライアント ドメイン (example.com) と異なっており、サーバー名が完全修飾名になっていない場合は、これら 2 つのドメイン内に同じ名前を与えられたサーバー アカウントがないかをチェックするか、またはサーバーの指定に完全修飾名を使用してください
どちらのドメインコントローラにも同じようなエラーメッセージが残ります。
こうなると、ドメインコントローラは個別に稼働し続けていても、すでにお互いの同期関係は論理的に失われた状態にあります。
ドメインコントローラ 2台を活かし続けたままで、強制再同期させる方法を探しましたが、結局見つからず。そりゃ、そう簡単に再同期できるんだったら、悪意あるドメインコントローラをメンバーとして潜り込ませ、誤ったドメインポリシーを流し込んだりするのも簡単にできてしまいそうな気がしますね。
しょうがないので、VMware でバックアップした古いドメインコントローラのイメージは廃棄して、Windows Server 2008 をイチからインストールし直し、全く新しい DC-C を構築したうえで、DC-A と同期させる方針に切り替えます。
失われたドメインコントローラのデータを削除
問題は DC-A が、今でも DC-B がオフラインでどこかに存在し続けていると思っていることにあります。DC-A 上で確認すると、実際、DC-A, DC-B が仲良くリストされています。
これをこのまま放置して、DC-C を無理矢理追加するのは良くありません。まず幽霊になってしまった DC-B に関する情報を DC-A からキレイに抹消する必要があります。
探しにくいですが、MSDN 上にやり方は載っています。
ドメイン コントローラーの降格に失敗した後、Active Directory のデータを削除する方法
これ、忘れた頃に定期的にやる必要が出てくるので、手順をここにもメモしておくと、
- DC-A 上で ntdsutil.exe を起動
- metadata cleanup
- connections
- (別の資格情報を使用する場合のみ)
set creds DomainNameUserNamePassword
- connect to server servername
- quit
- select operation target
- list domains
- select domain number
- list sites
- select site number
- list servers in site
- select server number
- quit
- remove selected server
- quit
- DNS の _msdcs.root domain of forest ゾーンにある cname レコードを削除
- DNS の A レコードを削除
- 「Active Directory サイトとサービス」を起動、ドメイン コントローラーを削除
ここまでやって、ようやくドメインコントローラ DC-B は無かったことになります。
この後、改めて DC-C をドメイン example.com に参加させます。
古い DFS 名前空間情報を削除する
さらに問題はこれだけでは収まりませんでした。
ドメインベースの分散ファイルシステム (DFS) を構築してあったのですが、名前空間サーバーとしても使用していた DC-B が死んだため、DC-C 上で再度名前空間サーバー ((Windows Server 2003 では「ルート複製物」とかそんな名前だった気がします。)) を構築し直す必要があります。
ところが、Active Directory スキーマ内に古い DFS サーバ情報が残っていて、「新しい名前空間…」で名前空間を再度作り直そうとしても、同じ名前では作ることができません。
これも探しにくいのですが、以下の MSDN に対応方法が書いてあります。
DFS 名前空間のサービスと Windows Server 2003 または Windows Server 2008 を実行しているコンピューターで構成データについて
ここに書いてあることを色々やってみましたが、決め手としては
Dfsutil /Clean /Server:RootTargetServer /Share:DFS share name
で名前空間情報の削除ができ、同じ名前で名前空間を作り直すことができるようになりました。
主様と同じ状態にではまってしまい。
こちらを見つけました。
非常に参考になります。
ありがとうございます。