【Windowsインフラの闇】ADドメインコントローラー間で同期ができない

先日WindowsServerのActiveDirectory移行作業の際に再びWindowsの闇にハマり、苦しんだので記事に残します。本トラブルについて、先に結論を書きますが<font color="DeepPink"> 「ドメインコントローラの強制降格」 </font> でしか復旧できませんでした。Microsoftの有償サポートも活用し、トラブルシューティングしました原因不明で、正攻法での解決方法は迷宮入りとなりました。

# 何が起きたか
WindowsServer更新の際にActiveDirectory(以下AD)環境の更新を行いました。ADはメイン(DomainController#1)/サブ(DomainController#2)で２台あり、それぞれ更新しましたが、更新後にメインとサブで同期が取れない状態になってしまいました。ややこしいことにDomainController（以下DC）のメインからサブは同期が取れないが、サブからメインには同期が取れるという状態になりました。

図に書くとこんな感じです。

![ADDC＿同期不具合(同期図).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/2031ca39-7e55-429a-be08-1ce813a84192.png)

ちなみにサブ側で「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が登録されていませんでした。

![ADDC＿DFSR不具合.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/06cd7d5d-30ec-4fe1-835d-cb87d84ea2f7.png)

上記状態のためDFSRでDC#2へデータ同期ができなくなっていると思われます。一方でDC#2側にはDFSR同期先としてDC#1があるため、DC#2からDC#1へは[repadmin /showrepl]などのコマンドは正常実行できるものと思われます。


:::note info
DFSRの同期先の確認は「サーバの役割と機能」で「DFSの管理」をインストールすることでGUI上から確認できます。正常な場合は下記のような感じでDCの数だけレプリケートフォルダが表示されます。
:::

![DFS管理_通常.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/7040de44-25b1-4e10-a132-9b9d9778027c.png)













### ADSIトポロジーの構成
通常DFSRで同期する相手はADSIのDFSRのトポロジーで表示されます。DC#1側のトポロジーにはDC#2の情報がないため、DFSRの同期先として登録されていないものと思われます。

![ADDC＿トポロジー不具合.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/790cdb6b-9a90-4948-b787-30e5e2a860cc.png)


ADSIとは?
>Active Directory サービス インターフェイス (ADSI) は、さまざまなネットワーク プロバイダーからディレクトリ サービスの機能にアクセスするために使用される一連の COM インターフェイスです。

<参考>https://learn.microsoft.com/ja-jp/windows/win32/adsi/active-directory-service-interfaces-adsi

ちなみに正常な場合はこんな感じでDCの数だけCN=Totologyのところにサーバが登録されいます。

![トポロジー_通常.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/b3f473ad-ae5b-4b8a-9b44-9f53e65c5c8e.png)



ここまでの情報で、なんとなく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  


```

:::note alert
 原因は「RPCサーバを利用できません」なのですが、<font color="Blue">なぜ 「RPCサーバを利用できない」</font> のかが特定できず、迷宮入りとなりました...
:::





# 最終的にやったこと
先に書きましたがドメインコントローラー(DC#2)の強制降格をしました。DC#2からDC#1への同期はできているので”強制”ではなくとも通常降格できそうなものですが、通常降格処理だと「RPCサーバを利用できません」と表示され、降格処理すらさせてもらえませんでした。強制降格の操作詳細は割愛しますが、強制降格後、MetaData CleanUpを行い、何とかDC#1およびDC#2で各種コマンドが通るようになりました。

# おわりに
もし同じ状況になってしまって解決できた方があればコメントなどで教えて頂けると幸いです。本当に闇が深い...