2014年12月3日水曜日

物理マシンの認証を仮想マシンのドメインコントローラーで行うには

マイクロソフト製品の多くは、Active Directoryドメインサービスを必要とします。しかし、ドメインコントローラーはIDとセキュリティ管理の要なので、構築や複製が何かと面倒です。

特にVDI環境を構築するときは、物理マシンをドメインのメンバーにする必要があり、通常は物理マシンを2台必要とします。

何とか1台でできないものでしょうか。

ksakakiさんのブログ「More Than One Way」の記事「世界のブログから - 「ドメイン コントローラーどうしよう」に、ドメインコントローラーを仮想マシンとして構成し、その仮想マシンホストをメンバーとする手順が掲載されています。

VDI (640x289)

詳細はksakakiさんのブログを読んでいただくとして、要点だけを整理してみましょう。

  1. ドメインコントローラー仮想マシン(DC)は自動起動
    既定値は[サービスが停止したときに実行されていた場合は自動起動する]
  2. ドメインコントローラー仮想マシン(DC)は最初に起動
    既定値は0
  3. ドメインコントローラー仮想マシン(DC)は自動シャットダウン
    既定値は[保存]
  4. 万一に備えて物理マシンのローカル管理者アカウントを正しく構成
    ドメインコントローラーが動かないと、ドメインのユーザーでログオンできません。セキュリティ対策としてローカル管理者Administratorの名前を変えたり、無効化する場合もありますが、Hyper-Vホストには必ずローカル管理者としてログオンできるようにしておいてください。

上記1から3は、以下のPowerShellコマンドレットで構成できます(`は継続行の印)。

Set-VM -VMName 仮想マシン名  `
    -AutomaticStartAction Start   `
    -AutomaticStartDelay 0          `
    -AutomaticStopAction ShutDown

しかし、これだけでは起動時のタイミングによってはエラーが出ます。追加の設定が「世界のブログから - Hyper-Vとドメイン コントローラーに関してもう一つ」として公開されています。

  1. 確実に認証させるため、資格情報のキャッシュを停止
    物理マシンで以下のようにレジストリを変更します(PowerShellの場合)。
    Set-ItemProperty `
        'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon' '
         -Name cachedlogonscount –Value 0
    (`は継続行の印)
  2. 起動時の待ち時間を回避するため、サービス起動順序を構成
    ドメインコントローラー(つまり仮想マシン)で以下のコマンドを実行
    sc config netlogon depend= LanmanWorkstation/LanmanServer/DNS
    (現在の依存関係は sc qc コマンドで表示できます)

以上の構成をしたら、あとは物理マシンの優先DNSに仮想マシンのDNSサーバーアドレスを指定し、通常どおりドメインに参加してください。

だいたいこれで大丈夫なのですが、VDIを構成する場合は以下のようなトラブルがありました。

  • 仮想化ホストの構成時に警告が出る
    仮想化ホストの構成時に、ローカルグループの設定に失敗することがあります。管理ツールで見ると、ローカルグループは正しく構成されているようです。実際、そのままでも動作しましたが仮想化、念のためホストをVDIから削除して、再構成した方が無難です。
  • 複数のNICがあると、クライアントOSの展開に失敗する
    仮想化ホスト(物理マシン)に、NICが2枚構成されていると(たとえば外部ネットワークと内部ネットワーク)、クライアントOSの展開に失敗しました。同じ構成で成功したこともあるので、詳細は分かりません。

前者はVDIの再構成で、後者は内部ネットワークをやめ、VLANで物理ネットワークを分離することで解決しました。ただ、そもそもなぜ複数NICで問題が発生したかは分かりませんので、もう少し調べてみます。