先日WindowsServerのActiveDirectory移行作業の際に再びWindowsの闇にハマり、苦しんだので記事に残します。本トラブルについて、先に結論を書きますが 「ドメインコントローラの強制降格」 でしか復旧できませんでした。Microsoftの有償サポートも活用し、トラブルシューティングしました原因不明で、正攻法での解決方法は迷宮入りとなりました。
何が起きたか
WindowsServer更新の際にActiveDirectory(以下AD)環境の更新を行いました。ADはメイン(DomainController#1)/サブ(DomainController#2)で2台あり、それぞれ更新しましたが、更新後にメインとサブで同期が取れない状態になってしまいました。ややこしいことにDomainController(以下DC)のメインからサブは同期が取れないが、サブからメインには同期が取れるという状態になりました。
図に書くとこんな感じです。
ちなみにサブ側で「repadmin /showrepl」と「repadmin /syncall」を実行すると正常に終了します。
その他は下記の状態確認はできていました。
- ActiveDirectory-ユーザとコンピュータの[DomainControllers]のOUにはDC#1とDC#2は存在している。
- DNSの前方参照ゾーンの[_msdcs.xxxxx]にもDC#1とDC#2のレコードは登録されている。
- DC#1とDC#2の名前解決(相互にホスト名でPing疎通できる)できる。
ここまでの情報で、何らかの原因でDC#1の同期先としてDC#2が認識されていないことが疑われます。
エラーログ(EventViewr)の内容
DC#1のEventViewer項目のdfsrで以下のようなログが定期的に上がっていました。
AXXXXXXX-XXXX-XXXXXXXX
{同期先DC#2}
Domain System Volume
{Hostname}.{DomainName}
{同期先DC#2}
{{同期先DC#2}のIPアドレス}
1722
RPC サーバーを利用できません。
AXXXXXXX-XXXX-XXXXXXXX
不具合の被疑箇所
DFSRのレプリケーション構成
DC間はデータの同期をDFSレプリケーション(DFSR)で行います。通常であればDC#1とDC#2がお互いを同期先と識別しているはずですがDC#1側は同期先として、DC#2が登録されていませんでした。
上記状態のためDFSRでDC#2へデータ同期ができなくなっていると思われます。一方でDC#2側にはDFSR同期先としてDC#1があるため、DC#2からDC#1へは[repadmin /showrepl]などのコマンドは正常実行できるものと思われます。
DFSRの同期先の確認は「サーバの役割と機能」で「DFSの管理」をインストールすることでGUI上から確認できます。正常な場合は下記のような感じでDCの数だけレプリケートフォルダが表示されます。
ADSIトポロジーの構成
通常DFSRで同期する相手はADSIのDFSRのトポロジーで表示されます。DC#1側のトポロジーにはDC#2の情報がないため、DFSRの同期先として登録されていないものと思われます。
ADSIとは?
Active Directory サービス インターフェイス (ADSI) は、さまざまなネットワーク プロバイダーからディレクトリ サービスの機能にアクセスするために使用される一連の COM インターフェイスです。
<参考>https://learn.microsoft.com/ja-jp/windows/win32/adsi/active-directory-service-interfaces-adsi
ちなみに正常な場合はこんな感じでDCの数だけCN=Totologyのところにサーバが登録されいます。
ここまでの情報で、なんとなくDFSRの構成がおかしいということは見えてきましたがこの時は「原因が分かれば、何とかなる!」とまだ甘い考えでした。
どう足掻いたか(切り分けや解消に向けてのアクション)
- RPCの状態確認および再起動
DC#1のEventViewerで発生しているエラーのメッセージの内容が「RPCサーバを利用できない」というものだったので、DC#1とDC#2のRPCサービスの起動確認および再起動
→作業前からサービスは起動しており、再起動しても変化なし
- ActiveDirectory サイトとサービスの[Default-first-site]のNTD-SSetthingの手動構成
通常はKCCで自動作成されています。
→レプリケーション元がそれぞれDC#1とDC#2になっているNTDS-Settingで「今すぐレプリケーション」を実行したところ、レプリケーション元がDC#1(レプリケーション先がDC#2)の方の構成はエラーになる。NTD-SSetthingを手動で構成・再作成して、「今すぐレプリケーション」実行するもやっぱりエラーになる
- ADSIトポロジーにDC#2の手動追加
下記コマンドをDC#1で実行 ※同期元はDC#2で、同期先がDC#1
repadmin /add "CN=Configuration,DC=xxx,DC=xxxx" {同期元DCのFQDN} {同期先DCのFQDN}
repadmin /add "CN=Schema,CN=Configuration,DC=xxx,DC=xxxx" {同期元DCのFQDN} {同期先DCのFQDN}
repadmin /add "DC=xxx,DC=xxxx" {同期元DCのFQDN} {同期先DCのFQDN}
repadmin /add "DC=ForestDNSZones,DC=xxx,DC=xxxx" {同期元DCのFQDN} {同期先DCのFQDN}
repadmin /add "DC=DomainDNSZones,DC=xxx,DC=xxxx" {同期元DCのFQDN} {同期先DCのFQDN}
→全てのコマンドがエラーになる。
ちなみのエラーメッセージは下記です。
「{DC#2のホスト名}._msdcs.xxx.xxxへのDsBindWithCredに失敗しました。Status: 1722
RPCサーバを利用できません」
何が何でもRPCサーバ(DC#2)への通信をしてくれない...
- DNS設定の確認
DNSの登録がおかしいのかとも思い、DNSの[{DC#1のホスト名}]>前方参照ゾーン>[_msdcs.{DomainName}]内に表示されているDC#1とDC#2のNSレコードにPingしてみる
→正常に名前解決できており、応答が返ってくる。
- DNSサーバの動作確認
以下のコマンドを実行して、DNSサーバの動作正常性を確認
dcdiag /test:dns /E /V
→結果は以下のようにDC#2の挙動がおかしい...
DNS テスト結果の要約:
Auth Basc Forw Del Dyn RReg Ext
_________________________________________________________________
ドメイン: {Domain Name}
DC#2 Fail Fial PASS PASS PASS PASS n/a
DC#1 PASS PASS PASS PASS PASS PASS n/a
原因は「RPCサーバを利用できません」なのですが、なぜ 「RPCサーバを利用できない」 のかが特定できず、迷宮入りとなりました...
最終的にやったこと
先に書きましたがドメインコントローラー(DC#2)の強制降格をしました。DC#2からDC#1への同期はできているので”強制”ではなくとも通常降格できそうなものですが、通常降格処理だと「RPCサーバを利用できません」と表示され、降格処理すらさせてもらえませんでした。強制降格の操作詳細は割愛しますが、強制降格後、MetaData CleanUpを行い、何とかDC#1およびDC#2で各種コマンドが通るようになりました。
おわりに
もし同じ状況になってしまって解決できた方があればコメントなどで教えて頂けると幸いです。本当に闇が深い...