ADMT v3.2 を試す

# この記事について

* これは、開発終了しているツールを、サポート外の環境で動作するか試してみた際の記録。
* [AADC](https://www.microsoft.com/en-us/download/details.aspx?id=47594) を使用していて、フォレスト間でユーザーオブジェクトを移行したときにどうなるかを試してみようと思い、移行のツールとして [ADMT v3.2](https://www.microsoft.com/ja-jp/download/details.aspx?id=56570) を使ってみた
* せっかくやってみたので、備忘録として、うまくいかなかったことも含め、 ADMT を使うところまで手順をまとめてみた。
 * PES は意図したように機能してくれなかったので、今回パスワードは移行せず、強力なパスワードを生成するオプションを指定した。時間あるときにリトライしたい。


# ADMT について

* [Active Directory 移行ツール バージョン 3.2](https://www.microsoft.com/ja-jp/download/details.aspx?id=56570)
* サポートされる環境は、Windows Server 2008, Windows Server 2012 R2, Windows Server 2008 R2, Windows Server 2012
* が、すぐに用意できる環境が Windows Server 2016 Datacenter だったので、サポート外だが動くのか興味あったため、動かしてみた
* ユーザーオブジェクトを数個コピーするくらいであれば、一応きちんとコピーされている様子。
* ググると色々不具合があるようでもあり、検証目的に限った利用がよさそう
* なお、不具合ではなく構成をミスった可能性が高いのだが、今回、ユーザーの移行時にパスワード移行は試せていない


# 環境

* Hyper-V 上に VM を 2 台作成
 * VM : vCPU 4コア , RAM 2GB
* OS
 * エディション Windows Server 2016 Datacenter , 64 bit
 * バージョン 1607
 * ビルド 14393.4169
* ネットワーク : それぞれ別セグメントとしている。
 * VM#1 : 192.168.101.1 / 24
 * VM#2 : 192.168.111.1 / 24
* 用意するもの
 * .NET Framework 3.5
 * [SQL server 2008 Express edition SP2](https://www.microsoft.com/ja-jp/download/details.aspx?id=20610)
 * [Password Export Server version 3.1 (x64)](https://www.microsoft.com/en-us/download/details.aspx?id=1838)
 * [ADMT v3.2](https://www.microsoft.com/ja-jp/download/details.aspx?id=56570)


# AD の構成内容

## ドメインコントローラー昇格

* VM#1, VM#2 でそれぞれ Active Directory Domain Service (AD DS) を有効化する
 * VM#1, 2 をそれぞれドメインコントローラー (DC) に昇格する
* フォレスト
 * forest1.local : VM#1 の所属するドメイン。移行前のドメイン
 * forest2.local : VM#2 の所属するドメイン。移行後のドメイン

## OU , ユーザーオブジェクト作成

* OU
 * forest1.local : 移行前のドメインにおいて OU の構成は任意だが、移行前の OU をどれか 1 つ決めておく。その配下に移行対象のユーザーオブジェクトを用意。複数でもよい
 * forest2.local : 移行後のドメインでは、移行後の OU として 1 つ OU を用意。配下のオブジェクトは無し


## ネットワーク

* VMがそれぞれ別セグメントなので、各 VM でルーティングを追加し、DC で使っている DNS の条件付きフォワーダーで互いのドメインの名前解決をできるように構成する
* 疎通できない場合、ルーティングが正しいか、Windows Firewall やウィルス対策ソフトなどで特定のプロトコルがブロックされていないかあたりを確認する
 * DC では DNS や LDAP の利用が必須なので各プロトコルでお互い疎通できるか確認する
 * ネットワーク探索が有効化できない場合は、サービスで Function Discovery Resource Publication , SSDP Discovery , UPnP Device Host が起動しているか確認する


### ルーティング追加

* 複数 NIC ある場合、route print でインターフェイスの番号を調べて route -p add 192.168.111.1 mask 255.255.255.0  192.168.101.1 if 7 のように指定してもよい
 * インターフェイスを指定の場合、番号がずれていないか必ず確認する

```
VM#1
PS C:\Users\Administrator> route -p add 192.168.111.1 mask 255.255.255.0  192.168.101.1

VM#2
PS C:\Users\Administrator> route -p add 192.168.101.1 mask 255.255.255.0  192.168.111.1
```

### 名前解決

* VM#1 , VM#2 の DNS サーバーの条件付きフォワーダーで互いのドメインの名前解決をできるように構成する

![fwd00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/6b7c5047-b2c2-aaf2-1e81-611e62bfddde.png)

![fwd01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/ae8f67bc-0e91-e897-10cb-9a610106d6a1.png)


## フォレストの信頼

* ルーティングと名前解決が構成できたら、別ドメインのリソースを使用できるよう「Active Directory ドメインと信頼関係」でフォレスト間の信頼関係を構成する

![menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/963c001b-846d-c4c9-8bde-a9c0679cba22.png)

![prop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/548ee741-1b9b-47c1-43b1-a96d0b00a4c6.png)

![prop2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/f69d4db7-7272-28bf-5b60-b0d5581b72cf.png)

* 「新しい信頼」ボタンから構成する。今回は以下のようにした
 * 相手のフォレストの DNS 名 : forest2.local
 * 「フォレストの信頼」を選択　（「外部の信頼」ではない）
 * 方向は「双方向」で、信頼を作成するのは「このドメインと指定されたドメインの両方」
 * 指定したドメインの管理者権限アカウントでの認証を実施
 * 「フォレスト全体の認証」を選択（「認証の選択」によるカスタマイズはしない）


# .NET Framework 3.5 インストール

## 機能の有効化

* SQL server 2008 Express edition の動作に必要。
* 移行後のドメインコントローラー (つまり VM#2) にインストールする
* Windows Server 2016 Datacenter において既定では有効化されていないため、サーバー マネジャーの「管理」 > 「役割と機能の追加」から機能を有効化する。

![svm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/8dd066ed-05cf-c0f3-bd4b-b330bebf366b.png)

## エラーについて

* 事前に調べたところ、環境により「役割と機能の追加」を実施の際にエラーが出て、有効化できないことがあるようだ。有効化できなかった場合に備えて、OS (今回は Windows Server 2016 Datacenter) の ISO ファイルは用意しておいたほうがよい
 * インストール メディアの \sources\SxS フォルダーを指定して有効化みたいなことをする必要があるらしい。
 * 自分の環境ではエラーが出たようだがそのまま再起動されて起動後に使えるようになっており、ADMT の実行に支障がなかった。そのため、ここでは深追いしていない。


# SQL server 2008 Express edition SP2 インストール

## インストール

* ADMT v3.2 の動作に必要。
* 移行後のドメインコントローラー (つまり VM#2) にインストールする
* ADMT v3.2 では、SQL server 2008 Express edition SP1 以降が必要。
* ADMT v3.2 のインストール時に要件を満たしていないとインストールできないが、SQL server 2008 Express edition SP2 であればインストールはできた。
* [SQL server 2008 Express edition SP2](https://www.microsoft.com/ja-jp/download/details.aspx?id=20610)
* SQLEXPR_x64_JPN.exe をダウンロードし、ウィザードにしたがってインストールする

## 構成

* サービス アカウント
 * サービス : SQL Server Database Engine
 * アカウント名 : AUTHORITY\SYSTEM
* アカウントの準備
 * 認証モード : Windows 認証モード
 * SQL Server 管理者の指定 : forest2\Administrator を追加
* SQL Server インポートおよびエクスポート ウィザードなどでサーバー名の確認
 * サーバー名が VM#2\SQLEXPRESS のようになっていることを確認(サーバー名の VM#2 の箇所は適宜読み替える)
 * インスタンス ID は、SQLExpress
 * このあと ADMT のインストール時は、データベース (サーバー\インスタンス) として VM#2\SQLEXPRESS を指定できる

## エラーについて

* このあと ADMT のインストール時に、SQL Server のバージョンがチェックされる。ここでバージョンが要件を満たせていないと「指定されたインスタンスは、サポートされていない SQL Server のバージョンでホストされています。」というエラーメッセージが表示される。
* そのため、SQL server 2008 Express edition をインストール時に、Service Pack が 1 またはそれ以降であることを必ず確認すること。


# Password Export Server (PES) version 3.1 インストール

* 移行前のドメインコントローラー (つまり VM#1) にインストールする
* [Password Export Server version 3.1 (x64)](https://www.microsoft.com/en-us/download/details.aspx?id=1838)
* ★★ちなみに、今回はうまく動かなかった。パスワード移行の検証は、優先度低かったため、ここではインストールだけしており、ADMT で「強力なパスワードを生成する」のオプションを指定して（パスワード移行なしで）ユーザーオブジェクトのコピーを実施している。★★

## インストール

### 移行後ドメインでの暗号化キー準備

* インストール前に、移行後のドメイン内の ADMT を実行しているコンピューターで、あらかじめ暗号化キーを作成してから、移行前のドメインに暗号化キーのファイルを送って PES サービスをインストールする
* 暗号化キー作成 (移行後ドメイン内の ADMT を実行しているコンピューター)
 * VM#2 でコマンド実行 → admt key /option:create /sourcedomain:forest1.local /keyfile:C:\Users\Administrator\Desktop\keyfile.txt /keypassword:password
 * keyfile.txt.pes というファイルが VM#2 のデスクトップに作成された
* 暗号化キーのファイルを移行前ドメインのドメインコントローラーにコピー
 * keyfile.txt.pes を移行前ドメインの DC である VM#1 にコピー


### 移行後ドメインでのアクセス権限準備

* VM#2 で PES インストール前のアクセス権限の準備
 * ローカル システム アカウントで PES サービスを実行する場合は、移行後ドメインの Pre–Windows 2000 Compatible Access グループに Everyone グループと Anonymous Logon グループが含まれている必要がある
 * VM#2 の「Active Directory ユーザーとコンピューター」で、移行後ドメインの Builtin にいる Pre–Windows 2000 Compatible Access を探す。プロパティの「セキュリティ」タブから「追加」ボタンによりこれら 2 グループを追加。
 * Anonymous Logon グループでは、アクセスの範囲が「このオブジェクトのみ」になっている。子オブジェクトも参照できるようにする必要があるようなので、「セキュリティ」タブで ANONYMOUS LOGON グループを選択して「詳細設定」ボタンからこれを構成する

![prew.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/7001e0bc-e0fc-c104-14dc-792edd5c8d08.png)

![anon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/4c36675f-54be-87da-ab31-7a9b7e7d0817.png)


### 移行前ドメインでの PES インストール

* VM#1 で PES インストール
 * ウィザードにしたがってインストール。
 * サービスの起動まで問題ないが、以後、サービス起動させた状態で ADMT でユーザー移行する時に「パスワード エクスポート サーバーでセッションを確立できません。アクセスが拒否されました」というエラーが出て、パスワード移行ができなかった。そのため今回は PES の動作検証はできていない。


# ADMT v3.2 インストール

## インストール

* 移行後のドメインコントローラー (つまり VM#2) にインストールする
* [ADMT v3.2](https://www.microsoft.com/ja-jp/download/details.aspx?id=56570)
* ウィザードにしたがってインストールする

## 構成

今回は以下の構成で Active Directory 移行ツールをインストールした

* 使用するデータベース (サーバー\インスタンス) : VM#2\SQLEXPRESS
* 既存データベースからのインポートなし


# ADMT によるユーザー移行実施

## ウィザードの実行

* メニューから「Active Directory 移行ツール」起動

![menu02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/2baac26e-19db-81f6-2ac2-5b7264b72a48.png)

* ユーザーアカウントの移行ウィザードを実行

![admt1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/318326/a3d7235b-4d99-bae3-fff8-4bb0a5887e4d.png)

## 構成

今回は以下のように構成。ホスト名は適宜読み替える

* ドメインの選択
 * 移行元ドメイン : forest1.local
 * 移行元ドメインコントローラー : \\VM#1.forest1.local
 * 移行先ドメイン : forest2.local
 * 移行先ドメインコントローラー : \\VM#2.forest2.local
 * ※ここで名前解決、ドメイン間通信に失敗すると意図した DC が表示されない
* ユーザーの選択オプション
 * ユーザーの選択 : ユーザーをドメインから選択 (インクルードファイルは使用しなかった)
 * forest1.local で移行対象のユーザーオブジェクトを検索し指定する
 * 指定後、移行元のユーザーアカウントの名前、SAM名の一覧が表示される。確認し「次へ」。不足していたら適宜「追加」
* 組織単位の選択
 * 移行先の OU を GUI で指定する
 * GUI で指定すると、テキストフィールドに以下のような文字列が自動入力される
 * LDAP://forest2.local/OU=after,OU=Domain Controllers,DC=forest2,DC=local
* パスワードオプション
 * 既存のユーザーのパスワードの移行をする場合は、ここで移行元 DC を指定するが、今回うまくいかなかったため、「複雑なパスワードを生成する」を指定
 * エラーメッセージは「パスワードエクスポートサーバーでセッションを確立できません。アクセスが拒否されました。」だったので構成をミスっている(何か手順不足)可能性大
* アカウントの切り替えオプション
 * 移行先アカウントの状態：移行先を移行元と同じ状態にする
 * 移行元アカウントは無効にもできるようだがこれは指定していない。（チェックなし）
 * また「ユーザー SID を移行先ドメインへ移行」も指定していない（チェックなし）
* ユーザーオプション
 * 移動プロファイルを変換 : チェックなし
 * ユーザー権利を更新 : チェックあり
 * 関連付けられたユーザーグループを移行 : チェックあり
 * 以前に移行したオブジェクトを更新 : チェックあり
 * ユーザーのグループメンバーシップを修正 : チェックあり
* オブジェクトのプロパティの除外
 * 除外するプロパティなし
* 競合の管理
 * 移行先ドメインで競合が検出された場合、移行元オブジェクトを移行しない

## 移行結果

* 上記の指定で、指定した 2 ユーザーを無事、コピー。
* 最後にログを表示できるので、ログファイルの内容を確認する

以上