ActiveDirectoryをフォレスト間で移行する(その2)

     - OS, 運用管理 ,  


こんにちは。インフラ開発部の福本です。

2015年も残り約半分ですね。ボーっとしていると、あっという間に日々が過ぎていきます。
その中、少しずつ迫るWindowsServer2003のサポート期限。
保守切れとなるサーバOSの移行に忙殺されているサーバ管理者の方も、いらっしゃるのではないでしょうか。

ということで、前回の記事では「ActiveDirectoryをフォレスト間で移行する(その1)」を書きましたので、
今回は「ActiveDirectoryをフォレスト間で移行する(その2)」、移行作業編です。

※環境によってはこの通りに行かないこともあります。本記事を参考にされる際は、その点ご承知おきください。

■環境とツール

振り返りですが、今回の環境は以下の通りです。
事前作業なども必要ですので、詳しくは前回記事をご覧ください。

<移行元>
サーバー名:dc-old-1
OS:WindowsServer2003 SP2
ドメイン名:old.local(NetBIOS名:OLD)
機能レベル: フォレスト→Windows2000混在 ドメイン→Windows2000

<移行先その1(中間サーバ)>
サーバー名:dc-new-0
ドメイン名:new.local(NetBIOS名:NEW)
OS:WindowsServer2008

<移行先その2>
サーバー名:dc-new-1
ドメイン名:new.local(NetBIOS名:NEW)
OS:WindowsServer2012 R2

<ツール>
ActiveDirectoryMigrationTool 3.1
PasswordExportService3.1

<クライアント環境>
OS:Windows7 Professional Edition

■移行作業

1.クライアント側の確認
移行対象のクライアントが当該ネットワーク(ドメイン環境)に接続できることを確認してください。
また、環境に応じて以下の確認・対応を行ってください。
・ウィルス対策ソフトやWindowsのファイアウォールでポート「389」が閉じられていないかどうか確認しておく。
・移行対象のクライアントで、「管理ツール」→「サービス」と選択し、「RemoteRegistory」を「開始」にしておく。

準備ができたら、クライアントをログオフしておきます。

2.初期化・テスト移行
まずは、移行元と移行先で、ADMTを使って移行が行えるかのテストが必要です。
ここでは実際に任意のグループアカウントを、ADMTを使用して移行テストを行います。
① 「管理ツール」→「ActiveDirectory移行ツール」を起動。
② 「操作」→「グループ アカウントの移行ウィザード」を選択。
③ 以下、ウィザードに従って入力していきます。

ドメインの選択 移行元ドメイン / ドメインコントローラ : old.local / dc-old-0
移行先ドメイン / ドメインコントローラ : new.local / dc-new-0
グループの選択 「追加」を選択。ダイアログボックスから、対象のグループアカウントを選択し、「OK」を選択。
元の画面で、一覧に対象アカウントが表示されていることを確認し、「次へ」を選択。
組織単位の選択 「参照」を選択し、ツリーから移行先グループ格納コンテナ(OU)を選択。移行先のOUに下記のように表示されることを確認。
LDAP://new.local/OU=group,DC=new,DC=local
※OU=groupは環境により変わります。
グループ オプション 「グループの SID を移行先ドメインへ移行」チェック ボックスをオンにします。その他すべてのオプションがオフであることを確認し「次へ」を選択。
ユーザー アカウント 移行元ドメイン(old.local)で管理者の権利が与えられているアカウントのユーザー名、パスワード、およびドメインを入力し「次へ」を選択。
オブジェクトのプロパティの除外 特に必要な要件がなければ、何もチェックを入れずに「次へ」を選択。
競合の管理 「移行先ドメインで競合が検出された場合、移行元オブジェクトを移行しない」をクリックし「次へ」を選択。

④ウィザード完了画面で「完了」を選択。移行の進行状況でエラー件数が「0」であることを確認し、「閉じる」を選択。

これで初期化・テスト移行が終わりです。

3.サービスアカウントの移行
もしサービスアカウントとしてドメインアカウントを使用している場合、こちらを最初に移行しておく必要があります。
が、当方の環境ではここは実施していませんので、詳しくは下記ガイドを参照してください。

Active Directory 移行ツール (ADMT) ガイド : Active Directory ドメインの移行と再構築

4.グローバルグループの移行
グローバルグループを移行します。ドメインローカルグループは後で行うのがいいようです。
ADMTを使用して移行していきます。
① 「管理ツール」→「ActiveDirectory移行ツール」を起動。
② 「操作」→「グループ アカウントの移行ウィザード」を選択。
③ 以下、ウィザードに従って入力していきます。

ドメインの選択 移行元ドメイン / ドメインコントローラ : old.local / dc-old-0
移行先ドメイン / ドメインコントローラ : new.local / dc-new-0
グループの選択 「追加」を選択。ダイアログボックスから、対象のグローバルグループアカウントを選択し、「OK」を選択。
元の画面で、一覧に対象アカウントが表示されていることを確認し、「次へ」を選択。
組織単位の選択 「参照」を選択し、ツリーから移行先グループ格納コンテナ(OU)を選択。移行先のOUに下記のように表示されることを確認。
LDAP://new.local/OU=group,DC=new,DC=local
※OU=groupは環境により変わります。
グループ オプション 「グループの SID を移行先ドメインへ移行」チェック ボックスをオンにします。その他すべてのオプションがオフであることを確認し「次へ」を選択。
ユーザー アカウント 移行元ドメイン(old.local)で管理者の権利が与えられているアカウントのユーザー名、パスワード、およびドメインを入力し「次へ」を選択。
オブジェクトのプロパティの除外 特に必要な要件がなければ、何もチェックを入れずに「次へ」を選択。
競合の管理 「移行先ドメインで競合が検出された場合、移行元オブジェクトを移行しない」をクリックし「次へ」を選択。

④ウィザード完了画面で「完了」を選択。移行の進行状況でエラー件数が「0」であることを確認し、「閉じる」を選択。

これは移行テストの作業と同じですね。

ただ、ユーザーアカウントの移行やコンピュータの移行が行われる間に、グループオブジェクトの内容が変わることもあると思います。その差分を新規ドメインに吸収するため、すべての移行完了時に再度グループオブジェクトの移行を行っていきます。

5.ユーザーアカウントの移行
次に、ユーザーアカウントを移行しますが、マニュアルに従うと2回に分けて移行する手順になっています。
① 「管理ツール」→「ActiveDirectory移行ツール」を起動。
② 「操作」→「ユーザー アカウントの移行ウィザード」を選択。
③ 以下、ウィザードに従って入力していきます。

ドメインの選択 移行元ドメイン / ドメインコントローラ : old.local / dc-old-0
移行先ドメイン / ドメインコントローラ : new.local / dc-new-0
ユーザーの選択 「追加」を選択。ダイアログボックスから、対象のユーザーアカウントを選択し、「OK」を選択。
元の画面で、一覧に対象アカウントが表示されていることを確認し、「次へ」を選択。
組織単位の選択 「参照」を選択し、ツリーから移行先ユーザー格納コンテナ(OU)を選択。移行先のOUに下記のように表示されることを確認。
LDAP://new.local/OU=employee,DC=new,DC=local
※OU=employeeは環境により変わります。
パスワードオプション 「既存のユーザーのパスワードを更新しない」をクリック、「複雑なパスワードを生成する」をクリックし、「次へ」を選択。
アカウントの切り替えオプション 「移行先アカウントの状態:」で 「移行先アカウントを無効にする」をクリック。
「移行元アカウントを無効にするオプション:」で 「ソース アカウントの期限が切れるまでの日数:」をクリックして、移行元アカウントを保持する日数を入力します。
「ユーザーの SID を移行先ドメインへ移行」チェック ボックスをオンにし、「次へ」を選択。
ユーザー アカウント 移行元ドメイン(old.local)で管理者の権利が与えられているアカウントのユーザー名、パスワード、およびドメインを入力し「次へ」を選択。
ユーザー オプション 「移動プロファイルを変換」チェック ボックスをオン、「ユーザーのグループ メンバーシップを修正」チェック ボックスをオン、それ以外をオフにして「次へ」を選択。
オブジェクトのプロパティの除外 特に必要な要件がなければ、何もチェックを入れずに「次へ」を選択。
競合の管理 「移行先ドメインで競合が検出された場合、移行元オブジェクトを移行しない」をクリックし「次へ」を選択。

④ウィザード完了画面で「完了」を選択。移行の進行状況でエラー件数が「0」であることを確認し、「閉じる」を選択。

では、次にローカル ユーザー プロファイルの変換です。

6.ローカル ユーザー プロファイルの変換
ドメインが変わると、同じユーザー名でも別扱いとなります。これはSID毎にプロファイルを判断しているためであり、SIDは作成の都度変わる一意の値となります。
「ドメイン移行するとプロファイルは消えます、ごめんなさい」といったことは許されないので、しっかりと移行してあげる必要があります。

① 「管理ツール」→「ActiveDirectory移行ツール」を起動。
② 「操作」→「セキュリティの変換ウィザード」を選択。
③ 以下、ウィザードに従って入力していきます。

セキュリティの選択オプション 「以前、移行したオブジェクト」をクリックし、「次へ」を選択
ドメインの選択 移行元ドメイン / ドメインコントローラ : old.local / dc-old-0
移行先ドメイン / ドメインコントローラ : new.local / dc-new-0
コンピュータの選択 「追加」を選択。ダイアログボックスから、対象のコンピュータアカウントを選択し、「OK」を選択。
元の画面で、一覧に対象アカウントが表示されていることを確認し、「次へ」を選択。
オブジェクトの変換 「ユーザープロファイル」のみ選択し、「次へ」を選択。
セキュリティの変換オプション 「置換」 をクリックし、「次へ」を選択。

 

④ウィザード完了画面で「完了」を選択。
⑤「移行ツールのエージェントダイアログ」が起動するので、「事前確認とエージェントの操作を実行する」と選択し、「開始」を選択。
⑥「移行ツールのエージェントダイアログ」のエージェントの概要にて、「事前確認:合格」「エージェントの操作:成功」 と表示されていることを確認し、「閉じる」を選択。

これでプロファイル変換が完了です。

7.コンピューターの移行
さて、これが最大の山場でもあるクライアントコンピュータのドメイン移行です。
自動的に各クライアントに再起動命令を出してドメイン移行をしてくれるのですが、やはりうまくいかないことも多いです。

① 「管理ツール」→「ActiveDirectory移行ツール」を起動。
② 「操作」→「コンピューター移行ウィザード」を選択。
③ 以下、ウィザードに従って入力していきます。

ドメインの選択 移行元ドメイン / ドメインコントローラ : old.local / dc-old-0
移行先ドメイン / ドメインコントローラ : new.local / dc-new-0
コンピューターの選択 「追加」を選択。ダイアログボックスから、対象のユーザーアカウントを選択し、「OK」を選択。
元の画面で、一覧に対象アカウントが表示されていることを確認し、「次へ」を選択。
組織単位の選択 「参照」を選択し、ツリーから移行先コンピュータ格納コンテナ(OU)を選択。移行先のOUに下記のように表示されることを確認。
LDAP://new.local/OU=computer,DC=new,DC=local
※OU=computerは環境により変わります。
オブジェクトの変換 「ローカルグループ」「ユーザー権利」の2つを選択し、「次へ」を選択。
セキュリティの変換オプション 「追加」 をクリックし、「次へ」を選択。
コンピュータオプション 「再起動するまでの待ち時間」に「1」などの任意の時間を入力し、「次へ」を選択
オブジェクトのプロパティの除外 特に必要な要件がなければ、何もチェックを入れずに「次へ」を選択。
競合の管理 「移行先ドメインで競合が検出された場合、移行元オブジェクトを移行しない」をクリックし「次へ」を選択。

④ウィザード完了画面で「完了」を選択。移行の進行状況でエラー件数が「0」であることを確認し、「閉じる」を選択。
⑤「移行ツールのエージェントダイアログ」が起動するので、「事後確認の再試行の設定」に任意の試行回数・間隔を入力。「事前確認とエージェントの操作を実行する」と選択し、「開始」を選択。
⑥「移行ツールのエージェントダイアログ」のエージェントの概要にて、「事前確認:合格」「エージェントの操作:成功」「事後確認:合格」と表示されていることを確認し、「閉じる」を選択。

ここで各クライアントのドメイン移行が行われます。ADMT経由で一斉に行われるので便利ですが、失敗することもあります。
原因は、ネットワークの問題や負荷もありますが、ケースバイケースの場合が殆どです。ひとつずつ潰していくしかないようですね。

では、ユーザーアカウントの再移行です。

8.ユーザーアカウントの再移行
ここではユーザーアカウントのパスワードやグループ情報などを更新していきます。
① 「管理ツール」→「ActiveDirectory移行ツール」を起動。
② 「操作」→「ユーザー アカウントの移行ウィザード」を選択。
③ 以下、ウィザードに従って入力していきます。

ドメインの選択 移行元ドメイン / ドメインコントローラ : old.local / dc-old-0
移行先ドメイン / ドメインコントローラ : new.local / dc-new-0
ユーザーの選択 「追加」を選択。ダイアログボックスから、対象のユーザーアカウントを選択し、「OK」を選択。
元の画面で、一覧に対象アカウントが表示されていることを確認し、「次へ」を選択。
組織単位の選択 「参照」を選択し、ツリーから移行先ユーザー格納コンテナ(OU)を選択。移行先のOUに下記のように表示されることを確認。
LDAP://new.local/OU=employee,DC=new,DC=local
※OU=employeeは環境により変わります。
パスワードオプション 「パスワードの移行」 をクリック、「「パスワードの移行の移行元 DC」 に、「dc-old-1」を指定し、「次へ」を選択。
アカウントの切り替えオプション 「移行先アカウントの状態」で 「移行先アカウントを有効にする」をクリック。
「移行元アカウントを無効にするオプション:」で 「ソース アカウントの期限が切れるまでの日数」をクリックして、移行元アカウントを保持する日数を入力します。
「ユーザーの SID を移行先ドメインへ移行」チェック ボックスをオンにし、「次へ」を選択。
ユーザー アカウント 移行元ドメイン(old.local)で管理者の権利が与えられているアカウントのユーザー名、パスワード、およびドメインを入力し「次へ」を選択。
ユーザー オプション 「移動プロファイルを変換」チェック ボックスをオン、「ユーザー権利を更新」チェック ボックスをオン、「ユーザーのグループ メンバーシップを修正」チェック ボックスをオン、それ以外をオフにして「次へ」を選択。
オブジェクトのプロパティの除外 特に必要な要件がなければ、何もチェックを入れずに「次へ」を選択。
競合の管理 「競合しているオブジェクトを移行して結合する」チェック ボックスをオン、「結合されたオブジェクトを指定された移行先の組織単位に移動する」チェック ボックスをオンにし、それ以外をオフにして「次へ」を選択。

④ウィザード完了画面で「完了」を選択。移行の進行状況でエラー件数が「0」であることを確認し、「閉じる」を選択。

これでようやくパスワードも移行できました。
ですが、なぜか当方の環境ではActiveDirectory上の「ユーザーは次回ログオン時にパスワード変更が必要」 にチェックが入ってしまっていたので、これをひとつひとつ外していきました。

9.グローバルグループの移行
10.ドメインローカルグループの移行
こちらは上述の手順と同じですので割愛します。
これで旧・新ドメインの状態が同じになりましたね。

11.旧ドメインの削除
新ドメインでの運用で特に問題ないことを確認できたら、旧ドメインを削除していきましょう。
こちらは通常のドメインコントローラの降格手順と同じです。

これで移行は完了です。本当にお疲れ様でした。

※環境によってはこの通りに行かないこともあります。本記事を参考にされる際は、その点ご承知おきください。

■問題点

やはりドメイン移行は一筋縄ではいかない点がいくつかありますので、気づいたところを以下にまとめてみます。

・ローカルプロファイルが正しく作成されていないまま運用されていた
→こうなると、レジストリの情報をいじって直接プロファイルとアカウントを紐づけるしかないですね。
https://support.microsoft.com/ja-jp/kb/947215
・ドメイン参加が失敗する または 移行期間内に作業ができないクライアントPCが残ってしまう
→解決手段は、やはりレジストリでプロファイルとアカウントを紐づけるしかありません。
・DomainUsers・DomainAdminsは移行できない
→結局、このドメイングループを使用して権限を設定している場合、再度権限付与が必要です。
DomainUsersなどはドメイン固有のものなので移行できないんですね。

■まとめ

ドメインコントローラのバージョンアップは非常にクリティカルなイベントですが、今回のようなドメイン切り離しによるバージョンアップは、徐々に移行が行えるため、影響を抑えながら進められるという利点もあります。
ただ、やはり流通している資料が少ないことや、ADMTというツールの複雑さ、そもそもActiveDirectoryという繊細(?)な技術であることを考えると、なかなか工数に見合わないというのが現実でしょうか。

この記事が少しでも誰かのお役に立っていれば幸いです。
長文にお付き合いいただき、ありがとうございました。


DACエンジニア採用情報

  関連記事

image2
自社サービスのDocker化(前編)

こんにちは。 インフラ開発部の上田です。 普段は自社開発システムのインフラ担当として、日々頑張って仕事をしています。 今回は、近年話題になっているDockerについて、取り上げてみようと思います! なぜDockerなのか・・・? そもそもDockerとは何か・・・?   当社では様々なサー …

rshTxXM-
Rundeck&Win32-OpenSSHでWindowsのバッチをリモート実行させてみました

こんにちは。インフラ開発部の福本です。 Webサービスの提供を長く続けていると、どうしても継ぎ接ぎで改修が行われていくことも多く、それにあわせてスケジュール登録されるCronやTaskなども煩雑になってきますよね。 開発メンバーが異動でいなくなってしまうと、そもそもどこで何の処理が動いているのか探す …

Apple-Releases-Safari-10-Developer-Beta-3-for-OS-X-Yosemite-and-El-Capitan
Safari10(iOS10)のインライン動画再生についてまとめてみた

はじめに Safari10からvideoタグを用いたインライン動画再生ができるようになったので、挙動を調べてみました。 Safari 10.0 検証環境 項目 詳細 開発環境 Xcode8.0 検証端末 iPhone7 Simulator ブラウザ iOS Safari / UIWebView / …

forest
ActiveDirectoryをフォレスト間で移行する(その1)

こんにちは。DACインフラ開発部の福本です。 多くの企業のユーザー管理に使われているであろうActiveDirectory(以下、ADと略します)ですが、 もちろん当社でもADを使用してユーザーや各種認証の連携を行っています。 当記事は、ドメインの管理・運用を考慮して、子ドメインを新規フォレストに移 …

smartphone
slack×Nagiosでアラートをプッシュ通知

DACではサーバ・NW機器のリソースの監視に「Nagios」を利用してます。 監視ホストも数百台規模で増え続けており、アラート検知が非常に重要な課題となってきています。 メールの通知では、各MLを通知先に設定して、フィルタ分けして…と何かと面倒ですね。 そこで「slackへアラート内容を …

dockerlogo
自社サービスのDocker化(後編)

こんにちは。 インフラ開発部の上田です。 前回、前編としてDockerについて書き、早半年も経ちました。 前編はこちらです 今回は後編として、以下について書いてみたいと思います。 ■複数プロセス起動 前編で書いた通り、通常のOS起動時とは異なり、コンテナ上で個別にプロセスを起動する必要があります。 …

ie10
modern.IEを使ってMac上でWindows10を動かす

Microsoftが提供している modern.IE というプロジェクトがある。そこで提供されている仮想環境を使って、MacにWindows10をインストールしてみる。ちなみに、このプロジェクトの本来の目的はInternet Explorerの表示確認やデバッグの支援。 VirtualBoxの準備 …

スクリーンショット 2015-05-29 6.49.13
Vagrantの機能を使って開発環境の効率をあげてみた。

プラットフォーム・ワンのシステムの運用・保守担当のエンジニアです。 保守の仕事に関わると、 ユーザからのお問い合わせだったり、監視アラートによる検知から システムを調査することがあります。 ログとソースコードを見て、不具合を特定し改修する。 すぐできればカッコいいですが、 「本番環境に反映して別のエ …