IBM Cloud(Classic)の仮想サーバーでActive Directory 冗長化構成時の同期エラー対処法

# はじめに
Windows ServerのActive Directoryは有名ですが、こちらをIBM Cloud Classicで構築する方法の情報があまりなさそうだったのでやってみました。

なお、名前解決だけであれば、[IBM Cloud DNS Services](https://cloud.ibm.com/docs/dns-svcs?topic=dns-svcs-getting-started&locale=ja)というサービスを活用する方法もありますので、ご参考ください。

# 準備物
仮想サーバーを立てます。
一般的なスペックを満たす仮想サーバーとして、以下のような構成の仮想サーバー2台で確認しました。

<dl>
  <dt>仮想サーバーのタイプ</dt>
  <dd>パブリック</dd>
  <dt>プロファイル</dt>
  <dd>4vCPU, 4GB Memory(4GBでも動きました。８GBあったほうが安心ですが、数十人規模なら4GBでも動作しそうです）</dd>
  <dt>ストレージ</dt>
  <dd>100GB vSAN(必要に応じて追加しても良い）</dd>
  <dt>OS</dt>
  <dd>Windows Server 2019 Standard Edition (64 bit)(2022でも同様)</dd>
  <dt>ネットワーク</dt>
  <dd>1 Gbps 非レート制限付きパブリックおよびプライベート・ネットワーク・アップリンク</dd>
</dl>

# Active Directory 冗長構成の導入おける同期失敗の問題
Active Directory 自体の導入は大きな手間はありません。ただ、IBM Cloudのインフラを理解していないと、Active Directory間の同期で失敗するケースがあるので注意が必要です。

具体的には、単純に仮想サーバー#1にActive Directoryの役割を追加した後で、仮想サーバー#2にActive Directoryの役割を追加して#1に参加させようとした際に失敗します。

![スクリーンショット 2022-07-30 14.30.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/99131680-aa80-97d8-01b3-b9c05fb29d37.png)


原因は、Windows ServerのNICのネットワークメトリック（優先順位）はパブリックNICを優先的に使おうとする動作に対して、VLANのセキュリティグループallow_outboundによって、AD#2からAD#1へのアクセスをAD#1のセキュリティグループが拒否するためでです。

つまり、Active Directoryを冗長構成で立てようとする際、セキュリティグループのフィルタリングとの関係が理解できていないと、同期に失敗して構築時あるいは、構築後に問題となりますので、Active Directory構築前のセキュリティグループおよびWindowsのNICの設定を忘れずに確認・設定しておくことが必要となります。


## （補足）IBM Cloudの仮想サーバーの前提となる知識について

### IBM Cloudのセキュリティグループとは
IBM Cloudの仮想サーバーは無料で[セキュリティグループ](https://cloud.ibm.com/docs/security-groups/sg_index.html#getting-started-with-security-groups)というIPフィルタリングできる機能が無料で利用できます。
要は、不適切なアクセスを遮断する仕組みとなります。

例えば、セキュリティグループの典型的な設定は以下となります。
<dl>
  <dt>プライベートネットワークのセキュリティグループ</dt>
  <dd>allow_all(プライベートネットワークなので、全てイン・アウトを許可）</dd>
  <dt>パブリックネットワークのセキュリティグループ</dt>
  <dd>allow_outbound（インバウンドは外部からの不正アクセスを拒否するために拒否としつつも、仮想サーバーからのインターネットアクセス（アウトバウンド）は全て許可とするもの）</dd>
</dl>

詳細は[こちらのQiita記事](https://qiita.com/khayama/items/cf0fe00a1351024faad8)が参考になります。

### Windows Serverのネットワークインターフェースのメトリックについて
Windowsのネットワークインターフェースの通信順序はメトリック値によって規定されます。この時、IBM CloudでデプロイしたWindows Serverは自動メトリックとなっています。この初期動作としては、パブリックネットワークが優先されるケースが多い状況となります。

https://docs.microsoft.com/ja-jp/troubleshoot/windows-server/networking/automatic-metric-for-ipv4-routes

# 対策：AD導入前の設定について
原因がわかれば対処はシンプルです。
<dl>
  <dt>1.パブリックネットワークで動機を行う</dt>
  <dd>セキュリティグループにAD間の通信を許可する設定をこなう</dd>
  <dt>2.プライベートネットワークで同期を行う</dt>
  <dd>Windows のネットワークインターフェースのメトリック値を手動で設定する</dd>
</dl>

## 1.パブリックネットワークのセキュリティグループを変更する
以下のようにセキュリティグループの許可対象を増やすことで通信できるようになります。
IPはここでは割愛します。

 ![スクリーンショット 2022-07-30 14.47.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/a06d877a-b095-e9b8-73dc-a78b07761943.png)

## 2.Windowsのメトリック値を手動設定し、プライベートネットワークを優先させる
Windows Serverのにログインし、以下の設定を行なっていきます。
なお、仮想サーバー2台で同期を取るならば、2台とも設定が必要です。

1.設定画面を開く
Windows ロゴ キーを押しながら R キーを押す。[ファイル名を指定して実行] 表示。[ncpa.cpl] と入力、[OK] クリック。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/a74f07a0-1be5-8931-af11-9e3c6f0e1dcf.png)


2.変更するネットワーク アダプタ(イーサネット #)を選択し右クリック。
[プロパティ] クリック。Public用かPrivate用かはプロパティ内のIPv4のIPアドレスで判断。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/bce2098d-b657-529d-404f-a4d1a96f87ba.png)

3.[インターネット プロトコル バージョン 4 (TCP/IPv4)] クリック。[プロパティ] クリックAD1台目の場合は、DNSサーバーとしてローカルホスト(127.0.0.1)が指定されているのを確認。AD2台目の場合は、AD1台目のPrivateのIPアドレスをセット。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/b90d39fe-9f59-edfc-510b-c27ae3da100f.png)

4.[IP 設定] タブで、[自動メトリック] チェック ボックスをオフ。[インターフェイス メトリック] フィールドに数値を入力。Publicは20とする。Privateは1とする。
※自動メトリックで値が設定されていくためか、Publicを20、Privateを10といった設定にすると、想定外の動作を行うケースがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/d793ec08-2359-7bc4-a2f5-8b421b9ffe83.png)

### 必須ではないが、やっておいた方が良いかもしれないTips
1.[DNS] タブ にある [この接続のアドレスを DNS に登録する] の選択を外して、自動的に登録されないようにする（もしPublic NetworkでDNS自動登録を使うときは変更しない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/1bb0e7f7-d01e-5260-da53-966100a450e1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/ea8e93fc-79d4-825b-d830-eed5fe1154fa.png)
対象がドメインコントローラーの場合はDNSの動的更新ができないと必要なSRVレコードが登録されない  （=動的更新できることが望ましい）という問題があるので下記の対応方法を取る。
・ADとして利用しない方のNICの「この接続のアドレスをdnsに登録する」を無効にする


2.静的IPを用いるので、[WINS] タブ にある [NetBIOS over TCP/IPを有効にする] に変更する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3168/98b0fc4a-a1f0-7780-b2de-b02a385b406c.png)


Active Directoryの導入方法は、一般的な書籍で十分情報があると思いますので、ここでは割愛します。リクエストがあれば検討します。