10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure で Hyper-V on VM を動作させる

Last updated at Posted at 2021-06-13

Azureを使って Hyper-V を構築して、そこへ Hyper-V の VM を動かすことができます。
この機能の事を Nested Virtualization と言います。
知っている人は知っている、だけど 知らない人は知らない・・・というネタだと思って取り上げました。

初めてやる時にハマるところ

  • Azureでは、一部の VM サイズのみが Nested Virtualization をサポートしています
    誤った VM を選択すると エラーが出て 作成することができません。
     
  • Hyper-V上の VM をインターネットに接続させる方法が良くわからない
    VMを作る事はできるが、仮想ネットワークをどう構成すべきかは Azure と Hyper-V のネットワークについて理解しておく必要があります。

前提事項

この記事は、以下の方々を想定しております

目標

  • Azure 上の VM に Hyper-Vの役割サービスを稼働させ、その仮想基盤上に Hyper-V の仮想マシンを動作させる
  • この VM を使って インターネットへの接続ができるようにする

Hyper-V 環境の構築

Hyper-V 用の Azure VM の展開

Windows Server 2019 のイメージを指定して VM を展開します。
VM を作成する際に、Nested Virtualization に対応したサイズを選択することがポイントです。

  1. 下記の図の通り、Azure で 仮想マシンの作成時に「すべてのサイズを表示」をクリックします。
    image.png

  2. VM サイズの選択画面では、左上の赤枠欄へ _v3 と入力することで 作成予定のリージョンにおいて、Nested Virtualization に対応した VM のみフィルタされます。
    下記の図では、3種類のサイズがフィルタされている中から vCPU と メモリ を想定して選択すると良いと思います。
    無料評価版のサブスクリプションを利用している人は、同一リージョン内には vCPU が最大4個という制限があるので、注意してください。
    image.png

  3. 基本 タブの設定項目の入力が一通り終わったら、ディスク タブへ移動します。
    データディスクの作成は任意となりますが、 Azure VM 標準の Cドライブは 127GB しか無い為、Hyper-V の VM を作成するための領域としては不足する可能性があります。Hyper-V の VM のサイズが肥大化して、OSのディスク領域を圧迫する事になるため、ここで ディスクを増設することを強く推奨します。
    以後の解説も ディスクを増設した場合の前提で記載しています。

  4. ディスク タブでは、赤枠の「新しいディスクを作成し接続する」のリンクをクリックします。
    image.png

  5. 下記の画面が表示されるため、1024 GiB(約 1TB)で良ければ、このまま「OK」をクリックします。
    image.png
    サイズ変更の場合は、上図 赤枠の「サイズを変更します」を押して、変更してください。
    以下の画面では、256 GB を選択した場合です。
    image.png

  6. データディスクの指定が終わったら、下図のような表示になるため、「確認および作成」をクリックして VM を作成してください。
    image.png

  7. VM が展開されたら、リモートデスクトップで接続してください。

  8. 任意となりますが、ここで OS を日本語化しておきましょう。
    英語版のままでも動きますが、以後の説明は 日本語化した OS を利用しています。
    以下のサイトで、日本語化についての解説をしてありますので、参考にしてください。
    https://qiita.com/carol0226/items/454271ea7924bc587d1e

データディスクの初期化

VM を展開し、適宜 日本語化を終えたら、データディスクが利用できるように初期化が必要です。
下図は サインイン後に エクスプローラーを表示したところです。
ここで表示されている Dドライブは 追加したデータディスクでは無い事に注意してください。
作成した データディスクは これとは別に 見えないところに用意されています。
★Azure では、OSのページファイルを保存するための領域として 標準で Dドライブが用意されています。
この Dドライブに保存したファイルは、VM を停止すると消えてしまうので使わないようにしましょう。
image.png

以下の手順で、データディスクを初期化してください。

  1. スタートボタンを右クリックして、「ディスクの管理」をクリックします。
    image.png

  2. 下記の図が表示されますが、一旦「キャンセル」を押してください。
    このまま、「OK」を押しても良いのですが、次の手順で説明のためにそうしています。
    image.png

  3. 下記の図を確認します。ウィンドウが小さい場合は、広げて表示してください。
    ここで、「ディスク2」で「未割り当て」の部分が 追加で作成した データディスクです。
    ご自身で追加したデータディスクのサイズになっていることを確認してください。
    若干の差異があります(私は 256 GB のディスクを作りましたが、ここでは 255.98 GB になっています。
    未割り当てなので、この領域には まだファイルを置くことが出来ない状態です。
    image.png

  4. 未割り当て領域を初期化します。
    下図の マウスポインタ付近で右クリックして表示されるメニューから、赤枠「新しいシンプルボリューム」を選択します。
    image.png

  5. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  6. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  7. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  8. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  9. 下記の図では、そのまま「完了」をクリックします。
    image.png

  10. データディスクが初期化されて、「ボリューム(F:)」が利用できるようになりました。
    image.png
    エクスプローラーでも、Fドライブ を確認できます。
    image.png

Hyper-V 役割サービスの導入

続いて、Hyper-V の機能をインストールします。

  1. サーバーマネージャー から、「管理」-「役割と機能の追加」をクリックします。
    image.png

  2. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  3. 下記の図では、「役割ベースまたは機能ベースのインストール」が選択されていることを確認して、「次へ」をクリックします。
    image.png

  4. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  5. 下記の図では、「Hyper-V」にチェックを入れてください。
    image.png

  6. すると、下記の図が表示されるため、「機能の追加」をクリックします。
    image.png

  7. 下記の図の通り、Hyper-V にチェックが入っている事を確認して、「次へ」をクリックします。
    image.png

  8. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  9. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  10. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  11. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  12. 下記の図は、作成する Hyper-V 仮想マシンの情報を保存する場所を指定するところです。
    ここでは、前章の手順で用意した データディスク(Fドライブ)を指定しておきます。
    「参照」ボタンをクリックしてください。
    image.png

  13. 下記の図では、初めは Fドライブ配下にフォルダが存在しないため「新しいフォルダーの作成」ボタン押して、Hyper-V というフォルダを作ります。さらに「新しいフォルダーの作成」ボタン押して、Virtual Hard Disks というフォルダを作ってください。画面と同じ状態になったら、「OK」をクリックします。
    image.png

  14. 下記の図で、仮想ハードディスクのファイルの既定の場所が、上記で設定したフォルダになっていることを確認してください。続けて、赤枠の「参照」ボタンをクリックします。
    image.png

  15. 下記の図では、先ほど作成済みの Hyper-V というフォルダを選択して、「OK」をクリックします。
    image.png

  16. 下記の図の通りの設定になったことを確認して、「次へ」をクリックします。
    image.png

  17. 下記の図では、「必要に応じて対象サーバーを自動的に再起動する」にチェックを入れて、「インストール」をクリックします。
    そのあと、確認画面が表示され、「必要に応じて、このサーバーは通知なしで自動的に再起動されます。自動的に再起動しますか?」と聞かれるので、「はい」をクリックします。
    元の画面に戻るので、再度「インストール」をクリックします。
    image.png

  18. インストールが始まると、以下のような画面となります。
    インストールが完了すると、マシンが自動的に再起動されます。
    image.png

  19. 再起動中に VM は、Hyper-V として再構成されために、通常よりも起動に時間が掛かります。
    待機中に、Azure Portal で、ブート診断 のメニューで 処理中の画面を確認できます。
    image.png

  20. 下記の図の通り、「最新の情報に更新」をクリックしながら待機していると、Windowsの画面ロックの場面に変わります。こうなると VM へリモートデスクトップ接続が可能な状態です。
    image.png

  21. VM へリモートデスクトップ接続を実施して、サインインしてください。
    初めに 自動起動されたサーバーマネージャーを見ると、赤枠「Hyper-V」はありませんが、少し待つと表示されます。
    ここで、サーバー名を右クリックして、「Hyper-Vマネージャー」をクリックしてください。
    image.png

  22. 下記の図の通り、Hyper-V マネージャー が起動されれば Hyper-V の構成は全て完了です。
    image.png

内部仮想スイッチを構成する

Azure上に Hyper-Vを構成した場合は、Hyper-V上に作った 仮想マシンは Azure仮想ネットワーク と通信をすることができません。これは Azureでの制約です。
これを回避するために、Hyper-V内 に閉じたネットワーク(内部仮想スイッチ)を作成して VMに割り当てて利用する必要があります。

  1. Hyper-Vマネージャーで、「仮想スイッチマネージャー」をクリックします。
    image.png

  2. 仮想スイッチの作成画面で、「内部」を選択して、「仮想スイッチの作成」をクリックします。
    image.png

  3. 下記の図の通り、名称「内部仮想スイッチ」を命名(任意の名前)して、「OK」をクリックします。
    image.png

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アプリケーションが外部との通信を介在してくれるような形となります。
image.png

ホストOS側の IPアドレスを付与する

  1. 下記の図の通り、「スタートボタン」から、「ネットワーク接続」をクリックします。

    image.png

  2. 下記の図の通り、「アダプターのオプションを変更する」をクリックします。
    image.png

  3. 下記の図を見てください。緑下線が 内部仮想スイッチです。
    ここでは、赤枠の「イーサネット〇」の方は、Azureの仮想ネットワークと接続されているインタフェースのため、こちらの名前を判りやすく変更しておきましょう。
    image.png

  4. 下記の図で、緑下線部分を「Azureの仮想ネットワーク」と命名しました。
    続いて、「内部仮想スイッチ」を右クリックして、「プロパティ」を開きます。
    image.png

  5. 下記の図の通り、「インターネットプロトコルバージョン4(TCP/IPv4)」を選択後に、「プロパティ」をクリックします。
    image.png

  6. 下記の図の通り、「次のIPアドレスを使う」を選択後、IPアドレスとサブネットマスクを指定し、「OK」をクリックします。
    image.png

  7. 下記の図の画面に戻るため、「閉じる」をクリックします。
    image.png

  8. IPアドレスの構成ができたので、確認を行います。
    下記の図の通り。「スタートボタン」を押して、「Windows PowerShell(管理者)」を選択します。
    image.png

  9. 下記の図のように表示されることを確認します。
    ここで、緑枠部分は Azureの仮想ネットワークに接続されている方の設定値です。
    赤枠部分が、直前に設定した 内部仮想スイッチ のIPアドレスです。
    image.png

以上で、ホストOS の IPアドレス設定 は完了です。

ゲストOS側のIPアドレスを付与する

  1. 下記の図の通り、Hyper-Vマネージャーを使って、ゲストOSのデスクトップ画面を表示してください。
    ※必要に応じて、電源ONや、サインイン等してください。
    image.png

  2. ゲストOSを操作して IPアドレスを付与していきます。
    「スタートボタン」を押して、「ネットワーク接続」をクリックします。
    image.png

  3. 下記の図では、「アダプターのオプションを変更する」をクリックします。
    image.png

  4. 下記の図では、「イーサネット」を右クリックし、「プロパティ」をクリックします。
    image.png

  5. 下記の図では、「インターネットプロトコルバージョン4(TCP/IPv4)」を選択して、「プロパティ」をクリックします。
    image.png

  6. 下記の図では、「次のIPアドレスを使う」をクリックして、IPアドレスとサブネットマスクを設定し、「OK」をクリックします。
    image.png

  7. 下記の図に戻るため、「閉じる」をクリックして、ウィンドウを閉じます。
    image.png

以上で、ゲストOS の IPアドレス設定 は完了です。

設定した IPアドレスの確認

  1. 下記の図のように、ipconfigコマンドを実行して、ホストOS側 (橙枠) と ゲストOS側 (緑枠) の IPアドレス (赤枠) を表示して IPアドレスに設定ミスが無いかどうか、最終確認をしてください。
    image.png

  2. 下記の図のように、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です。
    image.png
    ★緑枠パターン、橙枠パターンのどちらかでOKとなれば良いですが、NGの場合は IPの設定を再確認してください。

以上で、ホストOS と、ゲストOS の IPアドレス設定 の確認が完了です。

PROXYアプリ の導入

前章までの手順の実施で、ホストOSとゲストOSは 通信を行う事ができるようになっています。
この章では、PROXYアプリを稼働させて、ゲストOS でWebサイトの閲覧を行った場合に ホストOSを経由してインターネットへ接続できるようにします。

PROXYアプリ のインストール

PROXYのアプリケーションは、以前から私が利用している Black Jumbo Dog を紹介します。
このアプリケーションは、フリーで利用ができ 簡単にPROXYの機能を利用できるので便利です。

  1. ホストOS側でブラウザを開き、以下のURLへアクセスします。
    https://forest.watch.impress.co.jp/library/software/blackjmbdog/
    image.png

  2. 以下のダウンロード画面が表示されたら、「実行」をクリックします。
    image.png
    image.png

  3. BlackJumboDog のインストーラーが起動します。「次へ」をクリックします。
    image.png

  4. 下記の図では、そのまま 「次へ」をクリックします。
    image.png

  5. 下記の図では。「インストール」をクリックします。
    image.png

  6. 下記の図では、「完了」をクリックします。
    image.png

以上で、BlackJumboDog のインストールが完了です。

PROXYアプリ の初期設定

  1. 下記の図では、「スタートボタン」を押して、「Launch BJD.exe」をクリックします。
    image.png

  2. 下記の図では、「オプション」を選択し、「プロキシサーバ」-「ブラウザ」の順に選択します。
    image.png

  3. まず初めに左上の「プロキシサーバ[Browser]を使用する」にチェックを入れると、下記の図のように表示されます。
    ここで、緑枠部分が「8080」となっている事を覚えておきましょう。
    続いて、「ACL」のタブを選択します。
    image.png

  4. 下記の図では、「禁止する」を選択して、「OK」をクリックします。
    ここで、なぜ 「禁止」を選んでいるのかというと、これは、BlackJumboDogのアクセスコントロールの設定になっており、「指定したアドレスからのアクセスのみを」という項目になっています。
    つまり、「許可」にした場合には、下段の「利用者(アドレス)の指定」欄にIPアドレスを設定したPCからのアクセスしか許可されません。これでは面倒です。
    「禁止」にすると、下段の「利用者(アドレス)の指定」欄に入力した IPアドレスをブロックする動作に変わります。それ以外のIPは全て許可されるため、こちらの方が楽です。
    image.png

  5. 下記のようになると、プロキシサーバとして稼働しています。
    続けて、BlackJumboDog をサービス登録しておきます。
    サービス登録は、任意なのですが これを行っておくと、ホストOS のシャットダウンなどを行っても、次回起動時に勝手に動作してくれるため、便利に扱えます。
    サービス登録しない場合は、ご自身で 都度アプリを起動してください。
    image.png

  6. 「サーバ停止」にすると、「サービス設定」が選択できるようになるため選択します。
    image.png

  7. 「登録」をクリックします。
    稀に、ここで 登録 ができないエラーが発生する事があるようです。
    その場合は、自動起動は使えないのですが サーバー起動の都度 Black Jumbo Dog を起動すればOKです。
    image.png

  8. 下記の図の通り、「状態」欄の「開始」と、「スタートアップの種類」欄の「自動」をクリックします。
    すると、赤下線部分が、「実行中」と「自動」になります。
    ここまで設定ができたら「OK」をクリックします。
    image.png

ここまで設定を行うと、PROXYアプリ(BlackJumboDog)は常に稼働した状態になります。

Windows Firewall の設定

ここまで構成が終わったら、あと一息です。
前章までの構成で、ほぼ完成なのですが、このままだと ゲストOSからの接続に対して、ホストOS側の Windows Firewall が通信を遮断してしまいます。
そのため、BlackJumboDog への通信であれば、許可するルールを追加する必要があります。

  1. 下記の図では、「ホストOSのサーバーマネージャー」から、「セキュリティが強化されたWindows Defender ファイアウォール」をクリックします。
    image.png

  2. 下記の図では、「受信の規則」を右クリックして、「新しい規則」をクリックします。
    image.png

  3. 下記の図では、「ポート」を選択して、「次へ」をクリックします。
    image.png

  4. 下記の図では、「特定のローカルポート」を選択して、「8080」と入力します。
    これば、BlackJumboDog の初期設定時に「8080」を憶えておいてください・・と説明しましたが、この数字と一致している必要があります。
    この設定が、ゲストOSから、ホストOS に対して 8080ポートの通信があった場合に「許可」する仕組みとなります。
    image.png

  5. 下記の図では、「接続を許可する」にチェックが入っていること確認して、「次へ」をクリックします。
    image.png

  6. 下記の図では、そのまま「次へ」をクリックします。
    image.png

  7. 下記の図では、ルールの名称を設定します。設定後に、「完了」をクリックします。
    image.png

  8. 下記の図のように 設定が追加されていればOKです。右上の「×」を押してウィンドウを閉じてください。
    image.png

以上で、Windows Firewall の設定は完了です。

ゲストOS からインターネットへ接続する

ブラウザのプロキシ設定

  1. ゲストOS に接続して、ブラウザ を起動してみてください。
    この段階では、インターネットへアクセスできないことが判ると思います。
    image.png

  2. プロキシサーバの設定を行うために、スタートボタンを押し、「歯車」をクリックします。
    image.png

  3. 下記の図では、「ネットワークとインターネット」をクリックします。
    image.png

  4. 下記の図では、「プロキシサーバを使う」を「オン」に設定したあと、「アドレス」と「ポート」を設定します。ここでのアドレスは、ホストOSのIPアドレスと BlackJumboDog のポート番号になります。
    設定したら、「保存」をクリックし、このウィンドウを閉じます。
    image.png

インターネットへの接続確認

★ ゲスト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サイトのアドレスを入力して、閲覧できることを確認してください。
それから、右下の緑枠部分を見ると、アイコンが変わっている事を確認してください。
このアイコンが出ている場合には、インターネットに接続出来ている事を意味しています。
前ページの画面の同じ個所を見ると、「地球マーク+通行止め」のアイコンになっていることが判ると思いますが、これは インターネット接続不可・・という事を意味しています。
image.png

ご苦労様でした。
以上で、全作業が完了です。

ここまでの構成が行えるようになると、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

【その他の役割サービス】

10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?