【Active Directory】 操作マスター(FSMO)の移動と動作確認

Active Directory は、複数台のドメインコントローラ(DC)をすべてマスターとして動かし(マルチマスター)、ユーザー情報などをお互いにレプリケーションすることで可用性を保っています。ただし、マルチマスターでは競合が起きると困る操作もあり、そうした操作はフォレストやドメインの中で1台の DC だけが担当します。

この操作を担当する DC の役割を、操作マスターと呼びます。操作マスターは FSMO(Flexible Single Master Operation:フィズモ)とも呼ばれます。この記事では、5つの操作マスターの役割を確認したうえで、PowerShell で操作マスターを別の DC に移動します。

この記事でわかること
  1. 5つの操作マスターの役割と、フォレスト単位・ドメイン単位の違い
  2. netdom query fsmo で、どの DC が操作マスターかを確認する方法
  3. Move-ADDirectoryServerOperationMasterRole で操作マスターを移動する手順と、障害時の注意点

操作マスター(FSMO)

操作マスターには5つの種類があります。スキーママスターとドメイン名前付けマスターはフォレストに1台ずつ、PDC エミュレーター、RID マスター、インフラストラクチャマスターはドメインごとに1台ずつ存在します。

フォレスト(フォレストに1台ずつ) スキーママスタースキーマの変更 ドメイン名前付けマスタードメインの追加・削除 ドメイン(ドメインごとに1台ずつ) PDC エミュレーターパスワード・時刻 RID マスターRID プールの配布 インフラストラクチャマスタードメインをまたぐ参照 ドメインが複数あれば、この3つはドメインの数だけある
図1 5つの操作マスターと、それぞれの範囲

スキーママスター

フォレストに1台存在します。スキーマとは、Active Directory に保存するオブジェクトの種類や属性を定義したものです。たとえば、ユーザーのプロパティに表示される電話番号や電子メールが属性にあたります。

スキーマを変更(拡張)できるのはスキーママスターだけで、変更内容はスキーママスターからフォレスト内のほかの DC にレプリケーションされます。スキーママスターが動いていないと、Exchange Server の導入などで必要になるスキーマの拡張ができません。

ドメイン名前付けマスター

フォレストに1台存在します。フォレストにドメインを追加・削除できるのは、ドメイン名前付けマスターを持つ DC だけです。これによって、フォレスト内のドメイン名が重複しないようにしています。アプリケーションディレクトリパーティション(DNS のゾーンを保存するパーティションなど)の追加にも使われます。

ドメイン名前付けマスターが動いていないと、ドメインの追加・削除ができません。

PDC エミュレーター

ドメインごとに1台存在します。ほかの DC でパスワードが変更されると、その変更は PDC エミュレーターへ優先的にレプリケーションされます。

ある DC でパスワードの誤りによる認証の失敗が起きると、その DC は失敗を返す前に PDC エミュレーターに問い合わせます。パスワードを変更した直後で、新しいパスワードがまだその DC に届いていなくても、PDC エミュレーターで確認できればサインインできます。アカウントロックアウトの処理も PDC エミュレーターが担当します。

また、PDC エミュレーターはドメインの時刻同期の基準になります。フォレストのルートドメインの PDC エミュレーターがフォレスト全体の時刻の基準になるので、ここには外部の NTP サーバなど正確な時刻源を設定しておきます。

PDC エミュレーターが動いていないと、パスワード変更の反映が遅れることがあります。時間がたてば、通常のレプリケーションで DC 間のパスワードはそろいます。長いあいだ PDC エミュレーターがない状態が続くと、ドメイン内の時刻の基準がなくなって時計がずれていき、Kerberos 認証に影響が出るおそれがあります(Kerberos は既定で5分を超える時刻のずれを許容しません)。

RID マスター

ドメインごとに1台存在します。ユーザーやグループを作成すると、SID(セキュリティ ID)が割り当てられ、オブジェクトを一意に識別できるようになります。

SID は、ドメイン内で共通のドメイン SID と、オブジェクトごとに異なる相対識別子(Relative ID:RID)からできています。RID が重複しないよう、RID マスターは各 DC に RID の範囲(RID プール)を割り当てます。RID プールは既定で 500 個ずつ割り当てられます。

RID マスター RID プールを配る RID プール(500 個) RID プール DC-A DC-B SID = ドメイン SID + RID ユーザーやグループの作成時に付与 SID = ドメイン SID + RID DC ごとに別の RID を使う RID の割り当て DC は手持ちのプールが少なくなると、次のプールを RID マスターに要求する
図2 RID マスターによる RID プールの割り当て

DC は、手持ちの RID プールが少なくなると、使い切る前に次のプールを RID マスターに要求します。RID マスターと通信できないまま手持ちのプールを使い切ると、その DC ではユーザーの追加など、新しい SID が必要な操作ができなくなります。

インフラストラクチャマスター

ドメインごとに1台存在します。複数のドメインがある環境で、ドメイン A のユーザーをドメイン B のグループのメンバーにしたあと、ドメイン A でユーザー名を変更したとします。ドメイン B のグループに残っているメンバーの情報は、そのままでは古い名前のままです。

このとき、ドメイン B のインフラストラクチャマスターがグローバルカタログから最新の情報を取得し、ドメインをまたぐ参照(名前や SID)を更新します。

インフラストラクチャマスターの置き場所

インフラストラクチャマスターは、グローバルカタログではない DC に置くのが原則です。グローバルカタログに置くと、更新すべき差分を見つけられず、ドメインをまたぐ参照が更新されなくなります。ただし、ドメイン内のすべての DC がグローバルカタログの場合や、Active Directory のごみ箱を有効にしている場合は、どの DC に置いてもかまいません。

5つの役割をまとめると、次のようになります。

役割範囲主な仕事止まると困ること
スキーママスターフォレストスキーマの変更スキーマの拡張ができない
ドメイン名前付け
マスター
フォレストドメインの追加・削除ドメインの追加・削除ができない
PDC エミュレータードメインパスワード変更の優先受付、アカウントロックアウト、時刻同期の基準パスワード変更の反映が遅れる、時刻がずれる
RID マスタードメインDC への RID プールの割り当てプールを使い切った DC でオブジェクトを作成できない
インフラストラクチャ
マスター
ドメインドメインをまたぐ参照の更新他ドメインのオブジェクトの名前変更などが反映されない

操作マスターの確認

現在の操作マスターを確認するには、任意の DC で、コマンドプロンプトを管理者として実行し、netdom query fsmo を実行します。

次は、すべての操作マスターが AD-1.hirotanoblog.local にある場合の表示です。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

コマンドプロンプト(移動前)画面イメージ
C:\Users\(伏せています)>netdom query fsmo
1スキーマ マスターAD-1.hirotanoblog.local
ドメイン名前付けマスターAD-1.hirotanoblog.local
2PDCAD-1.hirotanoblog.local
RID プール マネージャーAD-1.hirotanoblog.local
インフラストラクチャ マスターAD-1.hirotanoblog.local
コマンドは正しく完了しました。
図3 netdom query fsmo の結果(移動前)(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1スキーマ マスター
ドメイン名前付けマスター
フォレスト単位の役割。どちらも AD-1 が持っている
2PDC
RID プール マネージャー
インフラストラクチャ マスター
ドメイン単位の役割。それぞれ PDC エミュレーター、RID マスター、インフラストラクチャマスターのことで、どれも AD-1 が持っている

PowerShell では、Get-ADDomain の PDCEmulator、RIDMaster、InfrastructureMaster と、Get-ADForest の SchemaMaster、DomainNamingMaster の各プロパティでも確認できます。

操作マスターの転送

DC の移行(リプレース)やハードウェアの保守などで、操作マスターを別の DC に移動することがあります。役割を持っている DC が動いている状態で移動することを「転送」と呼びます。

転送は GUI(Active Directory ユーザーとコンピューター、Active Directory ドメインと信頼関係、Active Directory スキーマの各スナップイン)でもできますが、今回は PowerShell の Move-ADDirectoryServerOperationMasterRole で行います。

コマンドの書き方を確認する

コマンドの形は次のとおりです。-Identity には役割を受け取る(移動先の)DC を指定します。

PowerShell

Move-ADDirectoryServerOperationMasterRole -Identity <移動先の DC> -OperationMasterRole <役割>

-OperationMasterRole には、役割の名前か番号を指定します。複数の役割はカンマで区切って並べます。

番号名前(PowerShell)役割
0PDCEmulatorPDC エミュレーター
1RIDMasterRID マスター
2InfrastructureMasterインフラストラクチャマスター
3SchemaMasterスキーママスター
4DomainNamingMasterドメイン名前付けマスター
必要な権限

スキーママスターの転送には Schema Admins、ドメイン名前付けマスターの転送には Enterprise Admins、ドメイン単位の3つの役割の転送には Domain Admins のメンバーである必要があります。また、転送の前に DC 間のレプリケーションでエラーが出ていないことを確かめておきます。

AD-1 から AD-2 へ移動する

ドメイン hirotanoblog.local に AD-1 と AD-2 の2台の DC がある構成で、現在すべての操作マスターを持っている AD-1 から、AD-2 へ5つの役割を移動します。

ドメイン hirotanoblog.local AD-1 移動前:5つの役割 AD-2 移動後:5つの役割 操作マスターの転送(0,1,2,3,4) Move-ADDirectoryServerOperationMasterRole コマンドは AD-2 の PowerShell(管理者)で実行
図4 検証の構成(AD-1 から AD-2 への転送)

AD-2 で PowerShell を管理者として実行し、次のように入力します。

AD-2(PowerShell)

Move-ADDirectoryServerOperationMasterRole -Identity AD-2 -OperationMasterRole 0,1,2,3,4

役割ごとに移動するかどうかの確認が出るので、それぞれ Y を入力します。

Windows PowerShell(AD-2)画面イメージ
1PS C:\Users\(伏せています)> Move-ADDirectoryServerOperationMasterRole -Identity AD-2 -OperationMasterRole 0,1,2,3,4 操作マスターの役割の移動2役割 'PDCEmulator' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?3[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y 操作マスターの役割の移動役割 'RIDMaster' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y 操作マスターの役割の移動役割 'InfrastructureMaster' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y 操作マスターの役割の移動役割 'SchemaMaster' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y 操作マスターの役割の移動役割 'DomainNamingMaster' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): YPS C:\Users\(伏せています)>
図5 役割ごとの確認(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
1実行したコマンド移動先に AD-2、役割に 0〜4 のすべてを指定している
2役割 ‘PDCEmulator’ を…移動しますか?指定した番号の順(0 の PDCEmulator から 4 の DomainNamingMaster まで)に、役割ごとの確認が出る
3[Y] はい(Y) … : YY でその役割を移動する。A を入力すると残りの役割も確認なしで移動する

確認を出さずに実行したい場合は、-Confirm:$false を付けます。

移動したことを確認する

もう一度コマンドプロンプトを管理者として実行し、netdom query fsmo を実行します。操作マスターがすべて AD-2.hirotanoblog.local に変わったことが確認できます。

コマンドプロンプト(移動後)画面イメージ
C:\Users\(伏せています)>netdom query fsmo
1スキーマ マスターAD-2.hirotanoblog.local
ドメイン名前付けマスターAD-2.hirotanoblog.local
PDCAD-2.hirotanoblog.local
RID プール マネージャーAD-2.hirotanoblog.local
インフラストラクチャ マスターAD-2.hirotanoblog.local
コマンドは正しく完了しました。
図6 netdom query fsmo の結果(移動後)(実際の画面ではなく、表示内容のポイントを示したイメージです)
No.表示意味
15つの役割すべてが AD-2.hirotanoblog.localAD-1 から AD-2 への転送が完了した
役割を持つ DC が故障したとき

役割を持っている DC が故障して起動できない場合は、転送ができません。このときは、同じコマンドに -Force を付けて実行し、役割を強制的に移します(「強制」または「奪取」と呼びます)。-Force を付けても、まず通常の転送を試し、できなかった場合に強制します。

役割を強制的に移したあとは、元の DC をそのままネットワークに戻してはいけません。元の DC はドメインから削除してメタデータをクリーンアップし、再利用する場合はバックアップから戻さずに OS から入れ直します。強制は、元の DC が戻ってこないときだけに使う手段です。

まとめ

やりたいこと方法
操作マスターを確認するnetdom query fsmo(または Get-ADDomain/Get-ADForest)
操作マスターを転送するMove-ADDirectoryServerOperationMasterRole
-Identity 移動先 -OperationMasterRole 0,1,2,3,4
故障した DC から移す上のコマンドに -Force を付ける(元の DC は戻さない)

操作マスターは、フォレストに2つ、ドメインごとに3つあり、それぞれ1台の DC だけが持っています。DC をリプレースするときは、古い DC を降格する前に役割を転送し、netdom query fsmo で移動先に変わったことを確かめておくと安心です。

コメント