Home > Windows にまつわる e.t.c. > RemoteApp for VDI(XP) ポータル

RemoteApp for VDI(XP)


RemoteApp for Hyper-V で、Hyper-V 上に構築した Windows XP(以下 XP) のアプリケーションを Windows 7(以下 w7)のデスクトップに持ってくる環境を構築しましたが、RemoteApp for Hyper-V では利用者の数だけ仮想 XP を作る必要がありますので、Hyper-V 上には常時起動している仮想 XP が利用者の数だけ必要になります。

Windows Server 2008 R2 Service Pack 1(以下 WS08R2 SP1)でサポートされたダイナミックメモリーも、XP は対象外なので、最小限のメモリーを初期値として割り当てておいて、必要に応じて動的にメモリー割当てを拡張させる事が出来ません。このためメモリー消費量もバカになりません。
利用者数が多くても、RemoteApp for Hyper-V で使用するアプリケーションの出番があまりない場合だと、使いもしない仮想 XP が常時起動してメモリー消費をするのは不経済です。

この問題を解決するのが Remote App for VDI です。

RemoteApp for VDI では、プールとして稼働させている仮想 XP のうち、空いている仮想 XP に利用者が動的に割り当てられるので、利用者数分の仮想 XP を準備する必要はありませんし、一定時間フリーになっている仮想 XP は保存状態に移行するので、仮想 XP が使用しているメモリーそのものが解放されるだけではなく、稼働している子パーティションが必要最小限になるので、Hyper-V を稼働させているサーバーの電力消費を抑える事も出来ます。

VDI では、クライアント PC からの接続が個別の仮想 XP 狙い撃ちではなく RDセッションホストに集中できるので、.rdp での接続先を個別に指定する必要はありません。

この解説では触れませんが、Hyper-V 2.0 が持つライブマイグレーションを使うと高可用性が、VDI が持つ複数の Hyper-V 2.0 環境を統合してハンドリングできる機能を使うと大規模展開が、RDゲートウェイを使うとインターネット越しにモバイル PC からの利用が可能になります。
小規模環境での RemoteApp であれば、RemoteApp for Hyper-V で十分賄えますが、ある程度以上の規模ならば、RemoteApp for VDI の方が現実的なソリューションになります。

基本となる仕組みは、Hyper-V 上に構築した仮想 XP 環境から RemoteApp で特定のアプリケーションを取り出すので、RemoteApp for Hyper-Vと重複する箇所が多々ありますが、読みやすさを重視して重複箇所はそのままにしてあります。

ちなみに、RemoteApp for VDI は筆者が名付けたネーミングで、Microsoft のオフィシャルなネーミングではありません。(Microsoft のドキュメントを見ると、こちらの方式を RemoteApp for Hyper-V と呼んでいるケースもあります)

 

システム構成

今回のシステム構成は以下のようになります。

システム構成

 

構築手順の概要

今回 RemoteApp のプラットホームとして使用する VDI(Virtual Desktop Infrastructure)は、その名の通り仮想デスクトップを提供する基盤です。
レガシー OS である Windows XP(以下 XP) のデスクトップだけではなく、Windows Vista(以下 Vista) や Windows 7(以下 w7) のデスクトップも提供できるので、アプリケーションを個別の PC にインストールせず、リモートデスクトップで集中管理をするプラットホームとしても活用することが出来ます。

Infrastructure と命名されている通り、大規模展開が可能な仕組みとなっています。このため、RemoteApp for VDI を構築するには多くの手順が必要となります。
いきなり構築手順説明に入ってしまうと迷子になりかねないので、構築に入る前にざっくりと概要を説明しておきましょう。
構築する環境は、既に AD DS とクライアント PC(w7)が稼働している環境を想定しています。
何もないまっさらな状態から RemoteApp for VDI 環境を作るのでしたら、AD DS とクライアント PC 環境を先に作成してください。

  1. AD CS のインストール
    Windows Server 2008 R2 が提供する多くの機能では X.509 証明書を使用します。今回構築する RemoteApp for VDI でも、IIS 上で提供されるポータル機能で SSL を使っていますし、リモートデスクトップ通信そのものにも署名された通信をしています。
    自己署名を使う事も可能ですが、ルート証明書を持たない自己署名ではワーニングがあちこちで出てしまい、実運用では好ましいとは言えません。
    ルート証明書が登録されている商業証明書を使っても良いのですが、商業証明書は有償商品ですし、社外利用者が VDI を使うわけではないので、AD CS で発行した証明書で十分ですので、まずは AD CS 環境を構築します。

  2. RD仮想化ホストとHyper-V環境の作成
    VDI では、Hyper-V 上にインストールされたクライアント OS を使ってリモートデスクトップを提供します。
    RemoteApp for VDI では、RemoteApp テクノロジーを使って、デスクトップ全体ではなく、特定のアプリケーションだけのリモートデスクトップを提供します。
    VDI の心臓部とも言える Hyper-V と、Hyper-V 上にインストールされた XP へのアクセスを提供する RD仮想化ホストをインストールし、XP に対しての RemoteApp 設定をします。

  3. 仮想 XP 環境の作成
    RemoteApp for VDI で使用する仮想 XP 環境を作ります。
    ベースとなる XP 環境に RemoteApp に必要な環境を仕込み、差分ディスクで展開をします。

  4. RDセッションホスト/RDセッションブローカー/RD Webアクセス環境の作成
    RDセッションホストは、VDI で使用するリモートデスクトップ通信の受け付け窓口で、RDセッションブローカーは、XP に対するアクセスを制御する交通整理係です。
    RemoteApp for VDI を実現するだけであれば、Web インターフェイスのリモートデスクトップポータルである RD Webアクセスが無くても問題ないのですが、VDI 環境構築時に必要なサービスとなっているので、合わせて環境を作っておきます。

  5. RemoteApp for VDI 環境の作成
    w7 から RemoteApp for VDI 接続時に使用する .rdp ファイルの作成と、プールとして作成した XP に対する振り分けコントロールに必要な設定をします。

  6. RDライセンスのインストールとライセンスアクティベーション
    VDI を継続して使用する場合は、RDライセンスを入手し、RDライセンスサーバーに取得したライセンスを登録する必要があります。
    評価目的であればライセンスなしでも構いませんが、ライセンスなしの場合は120日の評価期間を過ぎると VDI が使えなくなってしまいます。

 

AD CSのインストール

それでは、早速 AD CS をインストールしていきましょう。
今回は、ドメインコントローラ(AD01)に AD CS をインストールしていますが、別のサーバーや、AD CS 専用のサーバーを作って AD CS をインストールしても構いません。

AD CS は役割の追加で「Active Directory 証明書サービス」をインストールします。Web インターフェイスを使って証明書の申請と取得をするので、AD CS の本体である「証明機関」と「証明機関 Web 登録」の2つをインストールします。証明機関 Web 登録を選択すると、Web インターフェイスに必要な IIS も一緒にインストールされます。
AD CS のインストールそのものはデフォルト設定のままで構いません。

AD01:Active Directory 証明書サービスを選択

AD01:証明機関と証明機関 Web 登録を選択

AD01:エンタープライズ

AD01:ルートCA

AD01:新しい秘密キーを作成する

AD01:暗号化もデフォルトのまま

AD01:CA名もデフォルトのまま

AD01:有効期間もデフォルトのまま

AD01:証明書データベースもデフォルトのまま

AD01:IISもデフォルトのまま

 

証明書発行サイトのSSL化

AD CS の Web インターフェイスは https が推奨されているので、IIS に証明書をセットして SSL 化します。
IIS に証明書をセットするには、IIS のコンソールから証明書要求ファイルを出力し、AD CS の Web インターフェイスで申請と証明書の取得をします。

AD01:サーバー証明書をダブルクリック

AD01:証明書要求の作成

AD01:一般名にFQDNを設定

AD01:暗号化サービスプロバイダーのプロパティはデフォルトのまま

AD01:証明書要求ファイルの出力

AD CS の Web インターフェイスは、このコンピューターの /certsrv にありますので、IE で http://localhost/certsrv にアクセスし申請をします。

AD01:http://localhost/certsrv にアクセスし、証明書を要求する

AD01:証明書の詳細設定を送信する

AD01:申請ファイルは作成済みなのでファイルを使用して申請する

AD01:テキストエディタで申請ファイルを開き内容をペーストし、Webサーバーを選択

AD01:発行された証明書をダウンロード

AD01:証明書の要求の完了

AD01:ダウンロードした証明書を選択し、フレンドリ名を設定

AD01:SSL化するサイトを選択し、バインド

AD01:追加

AD01:httpsを選択し、証明書につけたフレンドリ名で証明書を選択

AD01:https化完了

 

 

RD仮想化ホストとHyper-V環境の作成

証明書の発行準備が出来ましたら、続いて VDI の心臓部である RD 仮想化ホストを作成します。
VDI ではドメインが必須なので、ドメインに参加しているサーバーに RD 仮想化ホストと Hyper-V をインストールします。
Hyper-V を搭載するサーバーでは、複数のネットワークアダプター(以下NIC)使い分けて、親パーティション(ホスト OS)用の NIC と、子パーティション(ゲスト OS)用の NIC は別の NIC を使うのが常套手段なので、2つ以上の NIC を持っている事が推奨されます。1 NIC 構成で Hyper-V を稼働させる事も出来ますが、今回は 3 NIC を持ったマシンを使用しています。

 

RD仮想化ホストとHyper-Vのインストール

RD 仮想化ホストをインストールすると、Hyper-V も一緒にインストールされます。

HV01:リモートデスクトップサービスを選択

HV01:リモートデスクトップ仮想化ホストを選択

HV01:ネットワークアダプターは後で設定するので何も選択しない

 

仮想ネットワークの設定

Hyper-V のインストールが完了したら、仮想ネットワークマネージャーで子パーティションが使用する NIC を割り当てます。
NIC の割り当て時に「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」のチェックを外します。ここをチェックしたままだと、仮想 NIC を親パーティションで使用する設定になるので、DHCP 環境では意図しない IP アドレスを持ってしまい、思わぬネットワークトラブルに見舞われることになります。
1 NIC 構成のマシンを使う場合はこのチェックを入れたままにしますが、複数 NIC 構成のマシンで、子パーティションに専用 NIC を割り当てる場合は必ずチェックを外します。

HV01:Hyper-Vマネージャー下にあるHyper-Vマシンを選択し、仮想ネットワークマネージャーを起動

HV01:外部仮想ネットワークを追加

HV01:割り当てる物理NICを選択し外部仮想ネットワークを追加(管理オペレーティングシステムに... のチェックは外す)

 

仮想ハードディスクと仮想マシンの配置場所の調整

Hyper-V をはじめとする仮想化機構は、その構造上ハードディスク I/O がボトルネックになりやすい傾向にあります。運用サーバーを考えた場合、OS ボリュームに仮想マシンが使用する仮想ディスクを配置していると、全体のパフォーマンスダウンを引き起こす可能性が高くなるので、OS ボリューム以外で仮想マシンを稼働させるのがお勧めです。
Hyper-V のデフォルトでは、仮想マシンの格納が OS ボリュームになっているので、必要に応じて仮想ハードディスクと仮想マシンの配置場所も変更しておくと良いでしょう。

HV01:Hyper-Vの設定

HV01:仮想ハードディスクと仮想マシンのデフォルト格納場所を変更する

 

 

仮想 XP 環境の作成

入れ物としての Hyper-V が出来たので、中身となる仮想 XP 環境を作成しましょう。
仮想 XP には、VDI に必要な設定と、RemoteApp に必要な以下の設定をします。

  1. XP のインストールと Windows Update

  2. RemoteApp として使用するアプリケーションのインストール

  3. VDI に必要なリモート接続の許可

  4. RemoteApp に必要なコンポーネントのインストールと設定

  5. ドメイン参加と VDI に必要な設定

1-4 までは、ワークグループ段階で設定できますが、5についてはドメイン参加後に設定する必要があります。
Hyper-V には、差分ディスクを使って仮想環境を作る機能があるので、ベースとなる XP 環境に 1-4 の設定をし、XP を展開するために sysprep をかけます。
ドメイン参加は sysprep で設定出来ますので、ドメイン参加後に必要な設定は GPO で設定すれば展開の手間を削減することができるので、今回はこの手順で展開をします。

 

ベースとなる仮想 XP の作成と RemoteApp するアプリケーションのインストール

VHD 展開をする元となる XP を Hyper-V 上に作成するには、Hyper-V に仮想マシンを作成し、XP をインストールします。仮想マシンさえ作ってしまえば、OS のインストールは物理 PC にインストールするのと変わりはありません。ただし、Hyper-V マシンにリモートデスクトップ接続している場合は、インストール中はマウスが操作できないので、キーボードで全ての操作をする必要があります。

HV01:仮想マシンの作成

HV01:わかりやすい名前を付ける

HV01:メモリー割り当て

HV01:ネットワークの接続先

HV01:仮想ハードディスクの作成

HV01:仮想マシンの作成完了

HV01:仮想マシンに接続

HV01:設定

HV01:インストールメディアをセット

HV01:仮想マシンの起動

HV01:XPのインストール

XP のインストールが完了したら、仮想環境用のドライバーである統合サービスセットアップディスクを仮想マシンにインストールします。
統合サービスセットアップディスクは、ISO イメージとして提供されており、統合サービスセットアップディスクの挿入をすると、ISO イメージが仮想マシンの CD-ROM としてマウントされ、インストールが自動的に開始されます。

HV01:統合サービスセットアップディスクのセット

統合サービスセットアップのインストール

仮想 XP のインストールが完了したら、Windows Updateをした後に、RemoteApp として提供するアプリケーションのインストールをします。今回は、IE6 を RemoteApp として提供しますので、Windows Update で IE がバージョンアップされないように Blocker Toolkit をインストールしました。

IE7 Blocker Toolkit
http://www.microsoft.com/downloads/details.aspx?FamilyID=4c12d92f-808d-4c21-96ca-dc191a0a8e41&DisplayLang=ja

IE8 Blocker Toolkit
http://www.microsoft.com/downloads/details.aspx?familyid=4AE6A6D2-B7B8-49AE-8F34-1F181925C699&displaylang=ja

仮想 XP と言っても立派なコンピューターなので、ウイルス対策ソフトの導入は必須となります。

 

リモート接続の許可

RemoteApp は、アプリケーションサイズのリモートデスクトップなので、リモートデスクトップそのものを有効にする必要があります。

ベースXP:リモートデスクトップの有効化

更に、XP の VDI コントロールを許可するために、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server に DWORD で AllowRemoteRPC を作り、「1」をセットします。

AllowRemoteRPC.reg
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server]
"AllowRemoteRPC"=dword:00000001

 

KB961742インストール

XP には RemoteApp を提供する機能がないので、RemoteApp を実現するために、KB961742 をインストールします。

<RemoteApp を有効にするための Windows XP SP3 用の更新プログラム>
http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=e5433d88-685f-4036-b435-570ff53598cd

ベースXP:KB961742のインストール

w 7 にはこの機能が標準で入っていますが、Vista の RemoteApp を作るのであれば、 KB961741 をインストールする必要があります。

<RemoteApp を有効にするための Windows Vista SP1 以降用の更新プログラム>
http://www.microsoft.com/downloads/details.aspx?FamilyID=26a2de17-8355-4e8d-8f33-9211e48651fb&displaylang=ja

 

RemoteAppの設定

RemoteApp を提供するには、提供するアプリケーション情報を以下のレジストリに設定する必要があります。

レジストリ位置
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TsAppAllowList\Applications\公開名
名前 タイプ 備考
CommandLineSetting DWORD 0  
IconIndex DWORD 0  
IconPath 文字列 アイコンのパス 必要に応じて
Name 文字列 アプリケーション名  
Path 文字列 アプリケーションのパス  
RequiredCommandLine 文字列 起動時の引数 必要に応じて
SecurityDescriptor 文字列 セキュリティ記述子 必要に応じて
ShortPath 文字列 アプリケーションの短縮パス 必要に応じて
ShowInTSWA DWORD 1  
VPath 文字列 アプリケーションのパス  

RemoteApp公開用レジストリ

レジストリエディタで設定するのは手間がかかるので、.reg ファイルを作成して投入するのがお勧めです。

.reg のテンプレート
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TsAppAllowList\Applications\<公開名>]
"CommandLineSetting"=dword:00000000
"IconIndex"=dword:00000000
"Path"="<アプリケーションパス>"
"VPath"="<アプリケーションパス>"
"ShowInTSWA"=dword:00000001
"Name"="<アプリケーション名>"

 

.reg の作成例(RemoteApp-IE6.reg)
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Terminal Server\TsAppAllowList\Applications\IE6]
"CommandLineSetting"=dword:00000000
"IconIndex"=dword:00000000
"Path"="C:\\Program Files\\Internet Explorer\\IEXPLORE.exe"
"VPath"="C:\\Program Files\\Internet Explorer\\IEXPLORE.exe"
"ShowInTSWA"=dword:00000001
"Name"="Internet Explorer 6"

 

sysprep

ここまでがワークグループ環境で構築できる範囲です。これまで作成した仮想 XP ベースに複数の仮想 XP をドメインに参加させるには、SID をクリアする必要があるので、sysprep で SID のクリアをします。
そのまま sysprep をすると、OS セットアップに必要な入力をする必要が出てくるので、この部分の自動化を設定した後に sysprep します。

sysprep は、XP のインストールメディアの \SUPPORT\DEPLOY.CAB に入っていますので、全てのファイルを取り出して、仮想 XP の C:\sysprep にコピーします。
インストールの自動化は setupmgr.exe を使います。自動化項目中にはドメイン参加もありますので、ドメイン参加指定をしておけば展開の手間が省けます。
自動応答の準備が出来たら、sysprep.exe を実行します。

ベースXP:sysprep ツール群をコピー

ベースXP:C:\sysprep にコピーした setupmgr.exe を起動

ベースXP:応答ファイルの新規作成

ベースXP:Sysprepを選択

ベースXP:XP Professionalを選択

ベースXP:完全自動化

ベースXP:コンピューター名の自動生成

ベースXP:ドメインへの自動参加

ベースXP:応答ファイルの出力
 

ベースXP:sysprep.exe の実行

ベースXP:Mini-Setup をチェックして再シール

sysprep 処理が完了すると、仮想 XP はシャットダウンされます。
ベースとなる XP を誤って起動してしまうと、セットアップがスタートしてしまうので仮想マシンを削除しておきます。仮想マシンを削除しても、.vhd は削除されません。
ベースとなる仮想ディスクが何らかの理由で更新されると、差分ディスクで作成した XP 環境が壊れてしまうので、読み取り専用の属性をつけてベース環境の作成は完成です。

HV01:ベースとなる仮想XPを削除

HV01:ベースとなる.vhdに読み取り専用の属性をつける

 

GPO設定

ベース環境が出来たら、差分ディスクで実際に RemoteApp を提供する仮想 XP 群を作成し必要な設定するのですが、個々の仮想 XP に都度設定をするのも非効率的なので、GPO を使って自動設定するのがお勧めです。

個々の仮想 XP には以下の設定をします。

GPO は OU に対して設定するので、RemoteDesktopComputers OU を作成し、GPO を作成します。

AD01:OU を作成

 

AD01:GPO の作成

AD01:GPO 名

AD01:GPO の編集

 

Administrators にRD仮想化ホストを追加

ローカルセキュリティグループのメンバーを GPO で設定する場合は、[コンピューターの構成]-[ポリシー]-[Windowsの設定]-[セキュリティの設定]-[制限されたグループ]で設定します。

RD 仮想化ホストが、仮想 XP の操作をするので、XP のローカル Administrators に RD 仮想化ホストを追加します。GPO でグループメンバーを設定すると、既に設定されているグループメンバーがクリアされるので、Domain Admins も Administrators メンバーに加えておきます。

AD01:グループの追加

AD01:ローカルAdministratorsを指定

AD01:メンバーの追加

AD01:RD 仮想化ホストを指定

AD01:メンバーの追加

AD01:Domain Adminsの追加

 

リモートデスクトップ接続をするユーザーグループを Remote Desktop Users に追加

リモートデスクトップ接続は、ローカル Remote Desktop Users グループに所属しているメンバーに許可が与えられますので、Domain Users をメンバーに加えます。

AD01:グループの追加

AD01:ローカルRemote Desktop Usersを指定

AD01:メンバーの追加

AD01:Domain Usersの追加

AD01:グループ設定完了

 

接続が切れた後、他のユーザーが使えるようにオートログオフ設定

デスクトップ全体が提供されるリモートデスクトップの場合はログオフオペレーションが可能ですが、アプリケーション領域しか提供されない RemoteApp の場合はログオフオペレーションが出来ません。
XP のリモートデスクトップは1ユーザーが占有します。複数ユーザーで仮想 XP を使いまわす RemoteApp for VDI ではこの制限が邪魔ですので、セッションが切れた時に自動ログオフする設定をします。

設定箇所は、[コンピューターの構成]-[ポリシー]-[管理テンプレート]-[Windowsコンポーネント]-[リモートデスクトップサービス]-[リモートデスクトップセッションホスト]-[セッションの時間制限]-[切断されたセッションの制限時間を設定する]です。
最短設定は1分なので、1分を設定します。実際のログオフ動作は、セッションの切断を検出するのに30秒程度を必要としているようで、1分と設定すると1分30秒程度でオートログオフされます。

AD01:リモートデスクトップ

AD01:制限時間を編集

AD01:最短の1分を指定

 

仮想 XP の展開

RemoteApp for VHD 用の仮想 XP を展開する準備は整いましたので、ベースとなる .vhd から差分ディスクを作成し、差分ディスクを使って仮想マシンを作成します。

 

◆仮想 XP の展開(ドメイン参加)

差分ディスクは、差分ディスクを作成し、元となる.vhdを指定します。差分ディスク名は仮想 XP の FQDN と同じ名前にしておくのがお勧めです。
以下の手順を繰り返して作成する仮想 XP の数だけ差分ディスクを作成します。

HV01:ハードディスクの作成

HV01:差分

HV01:差分ディスクの名前と作成場所

HV01:元となる.vhdの指定をして完了

差分ディスクが出来たら、仮想マシンの作成時に差分ディスクを指定します。仮想マシン名は FQDN にしておかないと VDI がうまく機能しません。

HV01:仮想マシンの作成

HV01:仮想マシン名は FQDN にする

HV01:作成した差分ディスクを指定

sysprep でドメイン参加まで自動化しているので、作成した仮想 XP を一気に起動します。

HV01:仮想マシンの起動

仮想 XP の自動セットアップが完了したら、ドメインコントローラーで新たに作成された XP を所定の OU に格納します。

AD01:新たにドメインに参加した仮想XPを移動

AD01:所定 OU を指定

OU 格納したら自動で割り当てられたコンピューター名を所定のコンピューター名に変更します。

XP01:コンピューター名の変更

コンピューター名の変更後に再起動したら、仕上げに「netsh firewall set service REMOTEADMIN enable」コマンドを使って VDI コントロールに必要なファイヤウオール解放をし、念のために gpupdate /force で GPO を適用して仮想 XP の展開は完了です。

XP01:ファイヤウオールの解放とGPOの適用

VDI では、仮想 OS がシャットダウンされていても必要に応じて自動起動するので、仮想 XP はシャットダウンしてもかまいません。

余談ですが、コマンドでのファイヤウオール解放を sysprep か GPO で何とか自動設定できないかと試行錯誤したのですが、残念ながらうまく出来ませんでした。自動設定方法がわった方がいらっしゃいましたら是非教えてください

 

 

RDセッションホスト/RDセッションブローカー/RD Webアクセス環境の作成

最後にセットアップするのは、VDI の交通整理係である RD セッションホスト、RD セッションブローカー、RD Web アクセスです。
RemoteApp for VDI では RD Webアクセスは不要なのですが、VDI 構築で必須扱いなので一緒にインストールします。
VDI 環境の作成にも手順はたくさんありますが、サーバーマネージャーのウィザードが良くできており何をセットアップすれば良いのか一目でわかるようになっています。

それでは、交通整理係に必要な役割をインストールしましょう。

RD01:リモートデスクトップサービス

RD01:RDセッションホスト/RDセッションブローカー/RD Webアクセスを選択

RD01:ネットワークレベル認証

RD01:ライセンスは後で設定

RD01:Domain Usersに接続許可を与える

RD01:エクスペリエンスは設定しなくても問題は無い

RD01:IISはデフォルトのまま

RD01:役割のインストール完了

 

ポータルサイトのSSL化

RemoteApp for VDI が今回のメインなので、VDI そのものは動作確認でしか使用しませんが、RD Webアクセスが使用する IIS は SSL 化が前提なので、証明書をセットして SSL 化します。
ここで取得した証明書は、SSL 化だけではなく、VDI が必要とする証明書としても使用します。
既に IIS に証明書をセットする手順は説明済みなので、画面キャプチャーは少なめにしておきます。不明点がありましたら RemoteApp for Hyper-V で AD CS のサイトを SSL 化した時の手順を参考にしてください。

RD01:証明書申告書の作成

RD01:一般名にホスト名を指定

RD01:AD CS のサイトの /certsrvv に接続し、サイトが正常に動作するようにIEの設定を調整

RD01:ローカルサイトに AD CS サイトを追加する

RD01:AD CS サイトの URL を追加

RD01:証明書の申告

RD01:証明書の取得

RD01:証明書の取り込み

RD01:わかりやすいフレンドリ名を設定

RD01:サイトに証明書をバインド

RD01:httpsを編集

RD01:取込んだ証明書に変更

 

VDIの設定

RDセッションブローカーの登録

VDI 設定の大半はウィザードで設定できますが、セッションブローカーの設定で必要なセキュリティグループ設定がウィザードで自動設定されないので、設定を開始する前にセキュリティグループにセッションブローカーコンピュータ(RD01)を追加しておきます。

RD01:Session Broker Computers グループに追加

RD01:メンバー追加

RD01:オブジェクトの種類を変更

RD01:コンピューターをチェック

RD01:RDセッションブローカーコンピューター(RD01)を追加

 

VDIの基本設定

リモートデスクトップマネージャーを開くと、設定をしなくてはならない個所が赤や黄色で表示されていますので、上から順番に設定をしていきます。

まずは、一番上の個人用仮想デスクトップです。個人用仮想デスクトップとありますが、VDI の基本設定となっています。
個人用デスクトップの割り当ては、AD DS 側で設定した方がわかりやすいので、ここでは設定しません。

RD01:VDI の基本設定

RD01:RD仮想化ホスト(HV01)を指定

RD01:RDセッションホスト(RD01)を指定

RD01:RD Webアクセス(RD01)を指定

RD01:個人用仮想デスクトップ割り当ては AD DS で設定するのでチェックを外す

 

RD Webアクセスの設定

RD Webアクセスの設定は、ウィザードではなくスタートメニューから設定します。設定は IE からなので、接続先を localhost から RD Webアクセスのサーバー名(rd01)に変更して接続すると証明書エラーは出ません。
サイトが正常に動作するようにインターネットオプションでサイトをローカルイントラネットに加えます。

RD01:RD Webアクセスの構成

RD01:localhost では証明書エラーになるので RD Webアクセス(rd01)に変更

RD01:インターネットオプション

RD01:ローカルイントラネットにサイトを追加

RD01:サイトを指定

RD01:ドメイン\administratorでログオン

RD01:RDセッションブローカー(RD01)を指定

 

個人デスクトップの割り当て

今回は XP01 と XP02 に user1 と user2 を固定割り当てし、XP03-XP05 は残りのユーザーで使いまわす設定にします。
リモートデスクトップ接続マネージャーでは操作性が良くないので、固定割り当ての情報そのものを握っている AD DS 側で設定をします。

AD01:固定割り当てをするユーザープロパティを開く

AD01:個人割り当てを許可し、ターゲットとなる仮想 XP を指定する

 

XP Pool の作成

使いまわしをする仮想 XP はプールとして登録をします。これはリモートデスクトップ接続マネージャーで設定をします。

RD01:仮想デスクトッププールの作成

RD01:仮想マシンの選択

RD01:プールプロパティ

RD01:プール作成完了

 

表示名の設定

リモートデスクトップ接続マネージャーを見ると、表示名が黄色になっています。ここの設定は必須ではありませんが、黄色が残っているのは気持ちが悪いので設定しておきましょう。

RD01:表示名の設定

RD01:適当な名前を付ける

 

証明書のセット

残るはデジタル証明書の黄色です。VDI を提供する OS が XP だからなのかもしれませんが、この署名が使われないようです。
このため設定をしなくても実害はないのですが、黄色になっているのは気持ちが悪いので証明書をセットしておきます。

RD01:証明書のセット

RD01:証明書の選択

RD01:AD CSから発行された証明書を選択

RD01:証明書のセット完了

証明書をセットすると、そのままではリモートデスクトップ接続が出来なくなりますので、リモートデスクトップで設定している場合は「mstsc /admin」コマンドを使ってリモートデスクトップ接続します。

 

セッション解放の設定

GPO でセッション切断後のオートログオフ設定をしましたが、VDI でもセッションの監視をしいるので、セッションの占有が解けるタイミングを設定し、使いまわしが出来るようにします。
仮想 XP の場合は GPO で設定した仮想 XP 側の自動ログオフと、こちらの設定の両方が必要となります。
設定の最短は1分なので、1分を設定します。

RD01:セッションのプロパティを開く

RD01:セッションタブでセッション終了を指定

 

自動保存

仮想 XP の場合だけかもしれませんが、プール内の仮想 XP を使いまわしするためには、仮想 XP が保存状態に移行指定必要がありますので、自動保存を設定します。
自動保存に移行する最短は5分なので、5分を設定します。

RD01:デスクトッププールのプロパティを開く

RD01:全般タブで自動保存を指定

 

VDI の動作確認

これでサーバー側の設定は一通り終わったので、RemoteApp のベースとなる VDI の動作確認をしておきましょう。
VDI に接続するには、RD Web アクセスのポータルである https://<RD Web アクセス>/rdweb にアクセスします。
個別割り当ての設定がされているアカウントでアクセスすると、マイデスクトップとデスクトッププールの両方のアイコンが表示され、それ以外のアカウントでアクセスするとデスクトッププールのアイコンだけが表示されます。
VDI 接続には何度も ID/パスワード入力が求められますが、接続テストなので面倒くさがらずに入力してください。シングルサインオン(SSO)設定も可能ですが、主題が RemoteApp なので、SSO の設定手順は割愛します。

w7:https://rd01/rdweb にアクセスし、ログオン

リモートデスクトップ接続

w7:接続

w7:リモートデスクトップ用のログオン

w7:ワーニングは無視

w7:リモートデスクトップ接続が出来た

Hyper-V マネージャーを見ていると、仮想 XP の起動/保存やユーザー占有/解放してる様子が確認できますので、合わせて動作確認して下さい。

HV01:仮想 XP の稼働状態

HV01:占有された仮想 XP

 

 

RemoteApp for VDI 環境の作成

VDI であればポータルに接続アイコンが自動生成されますが、RemoteApp for VDI は接続に必要な .rdp を手動で作って、接続するクライアントに配布する必要があります。

 

.rdpの作成

.rdp はプール用と個別割り当て用でそれぞれ設定内容が違いますので、各テンプレートと設定例を紹介します。

プール用テンプレート
redirectclipboard:i:0
redirectposdevices:i:0
redirectprinters:i:0
redirectsmartcards:i:0
devicestoredirect:s:
drivestoredirect:s:
session bpp:i:32
allow font smoothing:i:1
promptcredentialonce:i:1
gatewayusagemethod:i:2
gatewayprofileusagemethod:i:0
gatewaycredentialssource:i:0
full address:s:<RDセッションホスト>
gatewayhostname:s:
workspace id:s:<RDセッションホスト>
use redirection server name:i:1
loadbalanceinfo:s:tsv://vmresource.1.<プール名>
use multimon:i:1
alternate full address:s:<RDセッションホスト>
disableremoteappcapscheck:i:1
alternate shell:s:rdpinit.exe
remoteapplicationmode:i:1
remoteapplicationprogram:s:||<RemoteApp公開名>
remoteapplicationname:s:<RemoteApp名>
remoteapplicationcmdline:s:
drivestoredirect:s:*
prompt for credentials:i:0

 

プール用設定例(IE6-Pool.rdp)
redirectclipboard:i:0
redirectposdevices:i:0
redirectprinters:i:0
redirectsmartcards:i:0
devicestoredirect:s:
drivestoredirect:s:
session bpp:i:32
allow font smoothing:i:1
promptcredentialonce:i:1
gatewayusagemethod:i:2
gatewayprofileusagemethod:i:0
gatewaycredentialssource:i:0
full address:s:rd01
gatewayhostname:s:
workspace id:s:rd01
use redirection server name:i:1
loadbalanceinfo:s:tsv://vmresource.1.XPPool
use multimon:i:1
alternate full address:s:rd01
disableremoteappcapscheck:i:1
alternate shell:s:rdpinit.exe
remoteapplicationmode:i:1
remoteapplicationprogram:s:||IE6
remoteapplicationname:s:Internet Explorer 6
remoteapplicationcmdline:s:
drivestoredirect:s:*
prompt for credentials:i:0

 

個別割り当てテンプレート
redirectclipboard:i:0
redirectposdevices:i:0
redirectprinters:i:0
redirectsmartcards:i:0
devicestoredirect:s:
drivestoredirect:s:
session bpp:i:32
allow font smoothing:i:1
promptcredentialonce:i:1
gatewayusagemethod:i:2
gatewayprofileusagemethod:i:0
gatewaycredentialssource:i:0
full address:s:<RDセッションホスト>
gatewayhostname:s:
workspace id:s:<RDセッションホスト>
use redirection server name:i:1
loadbalanceinfo:s:tsv://vmresource.2.
use multimon:i:1
alternate full address:s:<RDセッションホスト>
disableremoteappcapscheck:i:1
alternate shell:s:rdpinit.exe
remoteapplicationmode:i:1
remoteapplicationprogram:s:||<RemoteApp公開名>
remoteapplicationname:s:<RemoteApp名>
remoteapplicationcmdline:s:
drivestoredirect:s:*
prompt for credentials:i:0

 

個別割り当て設定例(IE6-Private.rdp)
redirectclipboard:i:0
redirectposdevices:i:0
redirectprinters:i:0
redirectsmartcards:i:0
devicestoredirect:s:
drivestoredirect:s:
session bpp:i:32
allow font smoothing:i:1
promptcredentialonce:i:1
gatewayusagemethod:i:2
gatewayprofileusagemethod:i:0
gatewaycredentialssource:i:0
full address:s:rd01
gatewayhostname:s:
workspace id:s:rd01
use redirection server name:i:1
loadbalanceinfo:s:tsv://vmresource.2.
use multimon:i:1
alternate full address:s:rd01
disableremoteappcapscheck:i:1
alternate shell:s:rdpinit.exe
remoteapplicationmode:i:1
remoteapplicationprogram:s:||IE6
remoteapplicationname:s:Internet Explorer 6
remoteapplicationcmdline:s:
drivestoredirect:s:*
prompt for credentials:i:0

 

Vista/7 で RemoteApp を公開する場合は、XP と .rdp の内容が違いますので、以下を参考に .rdp を作成して下さい。

Vista/w7 で RemoteApp を公開している場合のプール用テンプレート
redirectclipboard:i:0
redirectposdevices:i:0
redirectprinters:i:0
redirectsmartcards:i:0
devicestoredirect:s:
drivestoredirect:s:
session bpp:i:32
allow font smoothing:i:1
promptcredentialonce:i:1
gatewayusagemethod:i:2
gatewayprofileusagemethod:i:0
gatewaycredentialssource:i:0
full address:s:<RDセッションホスト>
gatewayhostname:s:
workspace id:s:<RDセッションホスト>
use redirection server name:i:1
loadbalanceinfo:s:tsv://vmresource.1.<プール名>
use multimon:i:1
alternate full address:s:<RDセッションホスト>
disableremoteappcapscheck:i:1
alternate shell:s:<RemoteApp公開名>
remoteapplicationmode:i:1
remoteapplicationprogram:s:||<RemoteApp公開名>
remoteapplicationname:s:<RemoteApp名>
remoteapplicationcmdline:s:
drivestoredirect:s:*
prompt for credentials:i:0

 

Vista/w7 で RemoteApp を公開している場合の個別割り当てテンプレート
redirectclipboard:i:0
redirectposdevices:i:0
redirectprinters:i:0
redirectsmartcards:i:0
devicestoredirect:s:
drivestoredirect:s:
session bpp:i:32
allow font smoothing:i:1
promptcredentialonce:i:1
gatewayusagemethod:i:2
gatewayprofileusagemethod:i:0
gatewaycredentialssource:i:0
full address:s:<RDセッションホスト>
gatewayhostname:s:
workspace id:s:<RDセッションホスト>
use redirection server name:i:1
loadbalanceinfo:s:tsv://vmresource.2.
use multimon:i:1
alternate full address:s:<RDセッションホスト>
disableremoteappcapscheck:i:1
alternate shell:s:<RemoteApp公開名>
remoteapplicationmode:i:1
remoteapplicationprogram:s:||<RemoteApp公開名>
remoteapplicationname:s:<RemoteApp名>
remoteapplicationcmdline:s:
drivestoredirect:s:*
prompt for credentials:i:0

 

RemoteApp for VDIの動作確認

.rdpファイルが出来たら、作成した .rdp をダブルクリックして RemoteApp 接続ができるか動作確認をします。

w7:.rdp に署名が無いのでワーニングが出るが無視して接続

w7:パスワード入力

w7:通信に署名が無いのでワーニングが出るが無視

w7:RemoteApp for VHD で Windows 7 上に開かれた IE6

 

.rdpファイルへの署名

RemoteApp に成功したら、.rdp をダブルクリックしたときのワーニングを消すために、.rdp ファイルに署名をしておきます。
署名は、SSL用の証明書を取り込んでいるサーバー(RD01)上で、rdpsign.exe で署名をします。
署名に使用する証明書を指定するには、証明書が持っている拇印を使用します。

rdpsign /sha1 拇印 署名をするファイル

RD01:署名の拇印を調べるためにMMCで証明書のスナップインを作る

RD01:証明書

RD01:コンピューターアカウント

RD01:ローカルコンピューター

RD01:AD CSで発行した証明書をダブルクリック

RD01:詳細タブにある拇印を Ctrl+C でコピー

RD01:先頭のスペースと間に挟まっているスペースを取り除いてコピー

RD01:.rdpに署名

署名した .rdp ファイルをクライアント PC に配布します。

w7:.rdpに署名がしているとワーニングは出なくなる

w7:通信には署名が無いのでこのワーニングは仕方がない

 

 

RDライセンスのインストールとライセンスアクティベーション

VDI はライセンス登録をしなくても120日間の試用期間が提供されますが、継続して使用するためにはライセンスサーバーインストールしてライセンスを登録する必要があります。

RD ライセンスにはユーザーライセンスとデバイスライセンスの2種類がありますので、必要ライセンス数が少ない方で手配をします。
ライセンスインストールに必要な情報が手に入ったら、RDライセンスをインストールし入手したライセンスをインストールします。
RD ライセンスは、特に理由がなければドメインコントローラーにインストールします。

AD01:リモートデスクトップサービス

AD01:RDライセンス

AD01:検出スコープは構成しない

AD01:RDライセンスインストール完了

AD01:スタートメニューからRDライセンスマネージャーを起動

AD01:サーバーのアクティブ化

AD01:入手したライセンスで指定された方法でセットアップ

AD01:ライセンスのインストール開始

AD01:入手したライセンスで指定された方法でライセンスをインストール

RDライセンスサーバーへのライセンスインストールが完了したら、RDセッションホストからRDライセンスに接続をします。

RD01:RDセッションホストの構成でライセンスモードのプロパティを開く

RD01:手配したライセンスモードを選択し、ライセンスサーバーを追加

RD01:ライセンスサーバーの追加

RD01:ライセンスのインストールをして完了

 

 

VDIのTips

VDIに関する Tips をいくつか紹介して RemoteApp for VDI の Tips をいくつか紹介して締めくくりましょう。

 

VDIのアーキテクチャー

VDI を構成している各役割と、VDI がどのような仕組みになっているかを解説しましょう。

VDI 接続の仕組みは、以下のようになっています

  1. 接続要求
    クライアント PC は、RD セッションホストに VDI への接続要求をします。VDI では、この際に必要なパラメーターを RD Web アクセスから得ます。
    RemoteApp for VDI では、配布した .rdp ファイルにパラメーターを設定しています。

  2. セッション問い合わせ
    RDセッションホストは、RD セッションブローカーに接続要求を中継し、接続先を問い合わせます。

  3. セッション割り当て
    RD セッションブローカーは、フリーになっている仮想 OS あるいはリクエストしてきたユーザーアカウントに割り当てられているか個人デスクトップを割り出します。

  4. 子パーティション起動
    RD セッションブローカーは、Hyper-V + RD 仮想化ホストに対して子パーティションの起動を依頼します。

  5. 接続先回答
    RD セッションブローカーは、RD セッションホストに対して割り当てた仮想 OS 情報を回答します。

  6. リダイレクト
    RD セッションホストは、クライアント PC に対してリダイレクト先を通知します。

  7. リモートデスクトップ接続
    クライアント PC は、リダイレクト通知に基づいて割り当てられた仮想 OS に直接接続します。

VDI の仕組み

 

App-V との併用

今回の RemoteApp で使用するアプリケーションは、仮想 OS に直接アプリケーションをインストールする方式を選択しました。
仮想 OS を展開する前に決めたアプリケーションだけを RemoteApp として提供すのであればこの方法で十分ですが、仮想 OS 展開後に違うアプリケーションも RemoteApp として提供する場合は、展開後の仮想 OS 毎にアプリケーションを追加インストールする必要があるので非効率です。
このような場合は、Microsoft Desktop Optimization Pack(MDOP)で提供されている Application Virtualization(App-V) を使って仮想 OS に対して動的にアプリケーションを配信するのがお勧めです。

<Microsoft Desktop Optimization Pack (MDOP)>
http://technet.microsoft.com/ja-jp/windows/bb899442.aspx

 

ロールバック

プール割り当てになっている場合は、どの仮想XPに接続されるかその時になってみないとわかりません。アプリケーションが編集したファイルの履歴などの状態を保存しないタイプであればどの仮想XPに接続されても困ることはありませんが、状態を記録するタイプだと利用者が混乱してしまいます。

このような時は、初期状態に戻して、状態記録はされないとするのも一つの手です。

VDI では、Hyper-V のスナップショット機能と組み合わせて自動的に環境をロールバックさせる機能があります。

この機能は、仮想 OS からのログオフをトラップして「RDV_Rollback」と名付けられたスナップショットが自動適用されることで実現されています。

ロールバックをセットすると、Windows Updateやウイルス対策ソフトのパターンファイルアップデートもロールバックしてしまうので、運用を工夫する必要があります。

Windows Server 2008 R2 では、このロールバック機能には不具合があって、RemoteApp for VDI で使っている GPO での自動ログアウトがうまくトラップできません。

Service Pack 1でこの不具合は解消されますが、SP1 を適用しない場合は KB2096902 をリモートデスクトップ仮想化ホストに適用すれば解消されます。

< Virtual machines in a VDI environment are not rolled back as expected if the disconnected Remote Desktop connections on the virtual machines are stopped by Group Policy >
http://support.microsoft.com/kb/2096902/en-us/ (機械翻訳がハチャメチャなので、英語ページへのリンクです)

修正プログラムの適用

ロールバック用のスナップショット(RDV_Rollback)

ロールバック中

 

.rdpのパラメーター

RemoteApp for VDI では、手動で .rdp を作りました。何やら呪文のように様々なパラメーターを指定していますが、それぞれパラメーターには当然のごとく意味があります。

パラメーターの意味に興味がある方は、以下のページにパラメーターの解説がありますので、必要に応じて参照してください。
執筆段階では、日本語への翻訳がまだされていないようなので、オリジナルの英語ページを紹介しておきます。

<RDP Settings for Remote Desktop Services in Windows Server 2008 R2>
http://technet.microsoft.com/en-us/library/ff393699(WS.10).aspx

 

必要ライセンス

RemoteApp for VDI を構築するには、VDI を構築するのに必要なライセンスがそのまま必要となります。

具体的に必要なライセンスにつきましては、SIer または Microsoft にお問い合わせください。

<Windows Virtual Desktop Access (VDA)>
http://www.microsoft.com/japan/licensing/software-assurance/windows-virtualization.aspx

<仮想デスクトップのライセンス>
http://www.microsoft.com/japan/virtualization/licensing/VDA.mspx

 

VDI そのものについて知りたい

今回の解説は、VDI に RemoteApp を乗っけて、なおかつ展開の手間をなるべく少なくするために GPO を使ったり、警告表示を出さないようにすために証明書の発行とハンドリングをしたりなど、実際の展開を想定した解説になっています。
このため、VDI そのものに必要な必要最低限な物って何? って疑問に答える形になっていません。

このあたりに興味がある方は、Microsoft が提供している「Hyper-V 関連ドキュメント」にある「仮想デスクトップ インフラストラクチャー (VDI) 評価ガイド」を参照してください。

<Hyper-V 関連ドキュメント>
http://technet.microsoft.com/ja-jp/virtualization/dd297510.aspx

 

 

 

Copyright © MURA All rights reserved.