Azureを使って Hyper-V を構築して、そこへ Hyper-V の VM を動かすことができます。
この機能の事を Nested Virtualization と言います。
知っている人は知っている、だけど 知らない人は知らない・・・というネタだと思って取り上げました。
初めてやる時にハマるところ
- Azureでは、一部の VM サイズのみが Nested Virtualization をサポートしています
誤った VM を選択すると エラーが出て 作成することができません。
- Hyper-V上の VM をインターネットに接続させる方法が良くわからない
VMを作る事はできるが、仮想ネットワークをどう構成すべきかは Azure と Hyper-V のネットワークについて理解しておく必要があります。
前提事項
この記事は、以下の方々を想定しております
- Azure VM を展開することができる
- 作成した Azure VM へ RDP接続することができる
- Azure の利用環境を持っている
※ Azure の サインアップ手順は こちら
https://qiita.com/carol0226/items/066c06d95cb68427f1d0 - Windows Server 2019 を 日本語化することができる
※ 日本語化 の手順は こちら
https://qiita.com/carol0226/items/454271ea7924bc587d1e
目標
- Azure 上の VM に Hyper-Vの役割サービスを稼働させ、その仮想基盤上に Hyper-V の仮想マシンを動作させる
- この VM を使って インターネットへの接続ができるようにする
Hyper-V 環境の構築
Hyper-V 用の Azure VM の展開
Windows Server 2019 のイメージを指定して VM を展開します。
VM を作成する際に、Nested Virtualization に対応したサイズを選択することがポイントです。
-
VM サイズの選択画面では、左上の赤枠欄へ _v3 と入力することで 作成予定のリージョンにおいて、Nested Virtualization に対応した VM のみフィルタされます。
下記の図では、3種類のサイズがフィルタされている中から vCPU と メモリ を想定して選択すると良いと思います。
無料評価版のサブスクリプションを利用している人は、同一リージョン内には vCPU が最大4個という制限があるので、注意してください。
-
基本 タブの設定項目の入力が一通り終わったら、ディスク タブへ移動します。
データディスクの作成は任意となりますが、 Azure VM 標準の Cドライブは 127GB しか無い為、Hyper-V の VM を作成するための領域としては不足する可能性があります。Hyper-V の VM のサイズが肥大化して、OSのディスク領域を圧迫する事になるため、ここで ディスクを増設することを強く推奨します。
以後の解説も ディスクを増設した場合の前提で記載しています。 -
下記の画面が表示されるため、1024 GiB(約 1TB)で良ければ、このまま「OK」をクリックします。
サイズ変更の場合は、上図 赤枠の「サイズを変更します」を押して、変更してください。
以下の画面では、256 GB を選択した場合です。
-
データディスクの指定が終わったら、下図のような表示になるため、「確認および作成」をクリックして VM を作成してください。
-
VM が展開されたら、リモートデスクトップで接続してください。
-
任意となりますが、ここで OS を日本語化しておきましょう。
英語版のままでも動きますが、以後の説明は 日本語化した OS を利用しています。
以下のサイトで、日本語化についての解説をしてありますので、参考にしてください。
https://qiita.com/carol0226/items/454271ea7924bc587d1e
データディスクの初期化
VM を展開し、適宜 日本語化を終えたら、データディスクが利用できるように初期化が必要です。
下図は サインイン後に エクスプローラーを表示したところです。
ここで表示されている Dドライブは 追加したデータディスクでは無い事に注意してください。
作成した データディスクは これとは別に 見えないところに用意されています。
★Azure では、OSのページファイルを保存するための領域として 標準で Dドライブが用意されています。
この Dドライブに保存したファイルは、VM を停止すると消えてしまうので使わないようにしましょう。
以下の手順で、データディスクを初期化してください。
-
下記の図が表示されますが、一旦「キャンセル」を押してください。
このまま、「OK」を押しても良いのですが、次の手順で説明のためにそうしています。
-
下記の図を確認します。ウィンドウが小さい場合は、広げて表示してください。
ここで、「ディスク2」で「未割り当て」の部分が 追加で作成した データディスクです。
ご自身で追加したデータディスクのサイズになっていることを確認してください。
若干の差異があります(私は 256 GB のディスクを作りましたが、ここでは 255.98 GB になっています。
未割り当てなので、この領域には まだファイルを置くことが出来ない状態です。
-
未割り当て領域を初期化します。
下図の マウスポインタ付近で右クリックして表示されるメニューから、赤枠「新しいシンプルボリューム」を選択します。
-
データディスクが初期化されて、「ボリューム(F:)」が利用できるようになりました。
エクスプローラーでも、Fドライブ を確認できます。
Hyper-V 役割サービスの導入
続いて、Hyper-V の機能をインストールします。
-
下記の図は、作成する Hyper-V 仮想マシンの情報を保存する場所を指定するところです。
ここでは、前章の手順で用意した データディスク(Fドライブ)を指定しておきます。
「参照」ボタンをクリックしてください。
-
下記の図では、初めは Fドライブ配下にフォルダが存在しないため「新しいフォルダーの作成」ボタン押して、Hyper-V というフォルダを作ります。さらに「新しいフォルダーの作成」ボタン押して、Virtual Hard Disks というフォルダを作ってください。画面と同じ状態になったら、「OK」をクリックします。
-
下記の図で、仮想ハードディスクのファイルの既定の場所が、上記で設定したフォルダになっていることを確認してください。続けて、赤枠の「参照」ボタンをクリックします。
-
下記の図では、「必要に応じて対象サーバーを自動的に再起動する」にチェックを入れて、「インストール」をクリックします。
そのあと、確認画面が表示され、「必要に応じて、このサーバーは通知なしで自動的に再起動されます。自動的に再起動しますか?」と聞かれるので、「はい」をクリックします。
元の画面に戻るので、再度「インストール」をクリックします。
-
再起動中に VM は、Hyper-V として再構成されために、通常よりも起動に時間が掛かります。
待機中に、Azure Portal で、ブート診断 のメニューで 処理中の画面を確認できます。
-
下記の図の通り、「最新の情報に更新」をクリックしながら待機していると、Windowsの画面ロックの場面に変わります。こうなると VM へリモートデスクトップ接続が可能な状態です。
-
VM へリモートデスクトップ接続を実施して、サインインしてください。
初めに 自動起動されたサーバーマネージャーを見ると、赤枠「Hyper-V」はありませんが、少し待つと表示されます。
ここで、サーバー名を右クリックして、「Hyper-Vマネージャー」をクリックしてください。
内部仮想スイッチを構成する
Azure上に Hyper-Vを構成した場合は、Hyper-V上に作った 仮想マシンは Azure仮想ネットワーク と通信をすることができません。これは Azureでの制約です。
これを回避するために、Hyper-V内 に閉じたネットワーク(内部仮想スイッチ)を作成して VMに割り当てて利用する必要があります。
Hyper-V環境へ OSをインストールする
Hyper-V環境が構成できたため、早速 仮想マシンを作成しましょう。
別の記事で、Hyper-V上に Windows 10 と Windows Server 2019 をインストールする手順を記載していますので、この通りに作業してみてください。
【Windows10】
https://qiita.com/carol0226/items/60a22fc1bb5e3556a183
【Windows Server 2019】
https://qiita.com/carol0226/items/53ef3c6bc9948a2b79f9
Hyper-Vサーバ(ホストOS)と、ゲストOS間を接続する
仮想基盤を提供する Hyper-Vサーバの事を、ホストOSとも呼びます。
これに対して、仮想基盤上にインストールして動作する仮想マシンの事を ゲストOSとも呼びます。
前章では、ホストOS上に 内部仮想スイッチを準備していますので、ここでは ホストOSと ゲストOSをネットワークで通信できるようにします。
方法は2通りあります。
1つ目 は、内部スイッチ内に NAT と DHCP を構成して、ネットワーク的に 外と通信できるようにする事です。以下の記事が参考になります。私の方では オンプレの Hyper-V では検証済みなのですが、Azure 上では 未検証ですが、理論上は 問題無く動作するはずです。
参考記事:How to Setup Nested Virtualization for Azure VM/VHD
https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-setup-nested-virtualization-for-azure-vm-vhd/ba-p/1115338
2つ目 は、以下のとおり、PROXY を使う方法です。
本記事では、PROXY を使う方法で、最後まで紹介していきますので、ご承知おきください。
AzureVMを使って、Hyper-V仮想基盤を構築した場合、ゲストOSは Azure仮想ネットワークに接続することができません。これは Azureの仕様によるもので ゲストOSにIPアドレスを付与する事ができないからです。
これを回避し、ゲストOSをインターネットなどの外部ネットワークと通信させる方法を紹介します。
図にすると、以下のような構成となり、内部仮想スイッチを経由し、PROXYアプリケーションが外部との通信を介在してくれるような形となります。
ホストOS側の IPアドレスを付与する
-
下記の図を見てください。緑下線が 内部仮想スイッチです。
ここでは、赤枠の「イーサネット〇」の方は、Azureの仮想ネットワークと接続されているインタフェースのため、こちらの名前を判りやすく変更しておきましょう。
-
下記の図で、緑下線部分を「Azureの仮想ネットワーク」と命名しました。
続いて、「内部仮想スイッチ」を右クリックして、「プロパティ」を開きます。
-
下記の図の通り、「インターネットプロトコルバージョン4(TCP/IPv4)」を選択後に、「プロパティ」をクリックします。
-
IPアドレスの構成ができたので、確認を行います。
下記の図の通り。「スタートボタン」を押して、「Windows PowerShell(管理者)」を選択します。
-
下記の図のように表示されることを確認します。
ここで、緑枠部分は Azureの仮想ネットワークに接続されている方の設定値です。
赤枠部分が、直前に設定した 内部仮想スイッチ のIPアドレスです。
以上で、ホストOS の IPアドレス設定 は完了です。
ゲストOS側のIPアドレスを付与する
-
下記の図の通り、Hyper-Vマネージャーを使って、ゲストOSのデスクトップ画面を表示してください。
※必要に応じて、電源ONや、サインイン等してください。
-
ゲストOSを操作して IPアドレスを付与していきます。
「スタートボタン」を押して、「ネットワーク接続」をクリックします。
-
下記の図では、「次のIPアドレスを使う」をクリックして、IPアドレスとサブネットマスクを設定し、「OK」をクリックします。
以上で、ゲストOS の IPアドレス設定 は完了です。
設定した IPアドレスの確認
-
下記の図のように、ipconfigコマンドを実行して、ホストOS側 (橙枠) と ゲストOS側 (緑枠) の IPアドレス (赤枠) を表示して IPアドレスに設定ミスが無いかどうか、最終確認をしてください。
-
下記の図のように、Pingコマンドで 相手側のIPを入力して、疎通確認を行ってください。
ホストOSでは、Ping 192.168.100.2(ゲストOSのIP)を実行します。
ゲストOSでは、Ping 192.168.100.1(ホストOSのIP)を実行します。
結果が 2パターンありえるので、以下に説明します。
【緑枠パターン】
このように表示された場合は、正しく疎通しています。OKです。
【橙枠パターン】
「要求がタイムアウトしました」と表示された場合は 疎通できていません。
ですが、Windows Firewall によってブロックされているだけの場合があります。
続けて、arp -a というコマンドを叩いて、結果の一覧に 相手のIPアドレスがあればOKです。
★緑枠パターン、橙枠パターンのどちらかでOKとなれば良いですが、NGの場合は IPの設定を再確認してください。
以上で、ホストOS と、ゲストOS の IPアドレス設定 の確認が完了です。
PROXYアプリ の導入
前章までの手順の実施で、ホストOSとゲストOSは 通信を行う事ができるようになっています。
この章では、PROXYアプリを稼働させて、ゲストOS でWebサイトの閲覧を行った場合に ホストOSを経由してインターネットへ接続できるようにします。
PROXYアプリ のインストール
PROXYのアプリケーションは、以前から私が利用している Black Jumbo Dog を紹介します。
このアプリケーションは、フリーで利用ができ 簡単にPROXYの機能を利用できるので便利です。
-
ホストOS側でブラウザを開き、以下のURLへアクセスします。
https://forest.watch.impress.co.jp/library/software/blackjmbdog/
以上で、BlackJumboDog のインストールが完了です。
PROXYアプリ の初期設定
-
まず初めに左上の「プロキシサーバ[Browser]を使用する」にチェックを入れると、下記の図のように表示されます。
ここで、緑枠部分が「8080」となっている事を覚えておきましょう。
続いて、「ACL」のタブを選択します。
-
下記の図では、「禁止する」を選択して、「OK」をクリックします。
ここで、なぜ 「禁止」を選んでいるのかというと、これは、BlackJumboDogのアクセスコントロールの設定になっており、「指定したアドレスからのアクセスのみを」という項目になっています。
つまり、「許可」にした場合には、下段の「利用者(アドレス)の指定」欄にIPアドレスを設定したPCからのアクセスしか許可されません。これでは面倒です。
「禁止」にすると、下段の「利用者(アドレス)の指定」欄に入力した IPアドレスをブロックする動作に変わります。それ以外のIPは全て許可されるため、こちらの方が楽です。
-
下記のようになると、プロキシサーバとして稼働しています。
続けて、BlackJumboDog をサービス登録しておきます。
サービス登録は、任意なのですが これを行っておくと、ホストOS のシャットダウンなどを行っても、次回起動時に勝手に動作してくれるため、便利に扱えます。
サービス登録しない場合は、ご自身で 都度アプリを起動してください。
-
「登録」をクリックします。
稀に、ここで 登録 ができないエラーが発生する事があるようです。
その場合は、自動起動は使えないのですが サーバー起動の都度 Black Jumbo Dog を起動すればOKです。
-
下記の図の通り、「状態」欄の「開始」と、「スタートアップの種類」欄の「自動」をクリックします。
すると、赤下線部分が、「実行中」と「自動」になります。
ここまで設定ができたら「OK」をクリックします。
ここまで設定を行うと、PROXYアプリ(BlackJumboDog)は常に稼働した状態になります。
Windows Firewall の設定
ここまで構成が終わったら、あと一息です。
前章までの構成で、ほぼ完成なのですが、このままだと ゲストOSからの接続に対して、ホストOS側の Windows Firewall が通信を遮断してしまいます。
そのため、BlackJumboDog への通信であれば、許可するルールを追加する必要があります。
-
下記の図では、「ホストOSのサーバーマネージャー」から、「セキュリティが強化されたWindows Defender ファイアウォール」をクリックします。
-
下記の図では、「特定のローカルポート」を選択して、「8080」と入力します。
これば、BlackJumboDog の初期設定時に「8080」を憶えておいてください・・と説明しましたが、この数字と一致している必要があります。
この設定が、ゲストOSから、ホストOS に対して 8080ポートの通信があった場合に「許可」する仕組みとなります。
以上で、Windows Firewall の設定は完了です。
ゲストOS からインターネットへ接続する
ブラウザのプロキシ設定
-
ゲストOS に接続して、ブラウザ を起動してみてください。
この段階では、インターネットへアクセスできないことが判ると思います。
-
下記の図では、「プロキシサーバを使う」を「オン」に設定したあと、「アドレス」と「ポート」を設定します。ここでのアドレスは、ホストOSのIPアドレスと BlackJumboDog のポート番号になります。
設定したら、「保存」をクリックし、このウィンドウを閉じます。
インターネットへの接続確認
★ ゲストOSが Windows Server 2019 の場合は、IE ESC強化の構成を「OFF」にしておく必要があります。
下記の記事の「Internet Explorer の設定変更」の章を参考にしてください。
https://qiita.com/carol0226/items/454271ea7924bc587d1e#internet-explorer-%E3%81%AE%E8%A8%AD%E5%AE%9A%E5%A4%89%E6%9B%B4
ゲストOS が Windows 10 の場合は、このアクションは必要ありません。
以上で、ゲストOS のブラウザで インターネットの Webサイト を閲覧できるようになりました。
URL欄に、Webサイトのアドレスを入力して、閲覧できることを確認してください。
それから、右下の緑枠部分を見ると、アイコンが変わっている事を確認してください。
このアイコンが出ている場合には、インターネットに接続出来ている事を意味しています。
前ページの画面の同じ個所を見ると、「地球マーク+通行止め」のアイコンになっていることが判ると思いますが、これは インターネット接続不可・・という事を意味しています。
ご苦労様でした。
以上で、全作業が完了です。
ここまでの構成が行えるようになると、Azure上に Hyper-V を稼働させられるので、このテクニックを活用することで、さまざまな検証環境を構築できるようになります。
まさにスタート地点ですね。今後は、この環境を基本として、色々な応用した構成を紹介して行きたいと思っています。
Next Step
Hyper-V が構築できたら、以下にもチャレンジしてみてください。
参考サイト
【Windows Server での Hyper-v の概要】
https://docs.microsoft.com/ja-jp/windows-server/virtualization/hyper-v/get-started/get-started-with-hyper-v-on-windows
【入れ子になった仮想化のしくみ】
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/nested-virtualization#how-nested-virtualization-works
【その他の役割サービス】