EC2 Windows Server 環境でお手軽にHyper-Vを構築する手順
しばたです。
前回第8世代のEC2インスタンスタイプにおいて入れ子の仮想化(Nested Virtualization)がサポートされたのを受けEC2 Windows Server環境にHyper-Vの機能をインストールして動作確認しました。
こちらの記事ではMicrosoftライセンス上の懸念点を主題としたためHyper-V環境の構築手順は割愛しました。
本記事ではEC2 Windows Server環境におけるHyper-Vの構築例を示してお手軽に入れ子の仮想マシンを利用する手順を共有します。
Amazon EC2 (=Amazon VPC)固有の事情
今となっては当然の話ではありますが[1]EC2インスタンスはVPC上で動作するものです。
Amazon VPCはAWSが管理するMapping Serviceといったインフラ基盤の都合AWSが認知したIPアドレスでなければ通信できません。
このためHyper-Vネットワークにおいてゲスト環境からインターネットアクセスが必要となる場合に単純に「外部スイッチ」を構成してもゲストは一切外部への通信ができないはずです。
まだAWSからドキュメントが公開されていないので何らかの特殊設定がある可能性は否定できませんが、私がいくつかの方法で「外部仮想スイッチ」を試した結果はすべて失敗に終わっています。
結果としてVPC上でHyper-Vネットワークを構成する場合はNATネットワークを作成するのが唯一解になるでしょう。
ちなみにインターネットアクセスが不要であれば「内部スイッチ」や「プライベートスイッチ」をそのまま使って構いません。
お手軽さについて
本記事ではお手軽さを「簡単にインターネットアクセスができる仮想マシンを用意できること」と定義します。
Hyper-V単体ではDHCPサーバーの機能は提供されておらず、標準では仮想マシンを作成する都度手動でネットワーク設定が必要です。
これはお手軽でないのでWindows ServerホストにDHCPの機能を追加し仮想マシン用のDHCPサーバーとしてやります。
これに前述のNATネットワークと合わせることでお手軽な環境が実現できます。
環境構築
ここから実際に環境を作っていきます。
0. 検証環境
前回と同様に私の検証用AWSアカウントの東京リージョンに用意したVPC内にm8i.xlargeでネストした仮想化を有効にした日本語Windows Server 2025 EC2インスタンス(AMI : ami-097115014964b1c33 Windows_Server-2025-Japanese-Full-Base-2026.02.11)を1台用意しています。
EC2インスタンスからインターネットアクセスは可能な状態です。
それ以外に特別な設定はなく一般的なWindows Server EC2とみなして良いかと思います。
今回はWindows Server 2025を選んでいますが他のバージョンでも内容に大差はないはずです。
1. Hyper-Vのインストール
まずはHyper-Vの機能をインストールします。
前回の記事では機能と管理ツールをバラバラにインストールしてましたが、-IncludeManagementToolsパラメーターで一括インストールできることを思い出したので今回は1コマンドで全て済ませてしまいます。
# Hyper-Vの機能 + 管理ツール をインストール
Install-WindowsFeature -Name Hyper-V -IncludeManagementTools -Restart

機能のインストール後自動で再起動されます。
2. NATネットワーク作成
NATネットワークの作成手順は以下のドキュメントに記載されています。
やっていることとしては
- Hyper-V内部スイッチを作成しゲートウェイとなるIPを割り当て
- Hyper-Vホスト側にNAT設定を追加して内部スイッチからの通信をNAT
だけであり、設定に際し予め
- 内部スイッチ名
- Hyper-V内部用のネットワークCIDRとゲートウェイとなるIPアドレス
を決めておく必要があります。
今回は
- 内部スイッチ名 : NATSwitch
- Hyper-V内部ネットワーク : 192.168.1.0/24
- 内部ネットワークのゲートウェイ : 192.168.1.1
な環境を作ることにします。
こちらは環境に応じて適切な形にしてください。
# 同名のスイッチを複数作れてしまうので最初に重複チェックしておくと良い
if ((Get-VMSwitch -Name 'NATSwitch' -ErrorAction Ignore).Count -ge 1) { Write-Warning '既に同名のスイッチが存在します' }
# NAT用の内部スイッチを作成
New-VMSwitch -SwitchName 'NATSwitch' -SwitchType Internal
# 作成された内部スイッチ用仮想NICにゲートウェイとなるIPアドレスを付与
Get-NetAdapter -Name $('vEthernet ({0})' -f 'NATSwitch') | New-NetIPAddress -IPAddress '192.168.1.1' -PrefixLength 24
# ホスト側NAT設定を追加
New-NetNat -Name 'NATSwitch' -InternalIPInterfaceAddressPrefix '192.168.1.0/24'
実行結果はこんな感じです。


内部スイッチが作成され対になる仮想NICにゲートウェイのIPが割り当てられたうえでNAT設定が増えていいればOKです。


3. DHCP設定
次にDHCP設定を行います。
次のドキュメントを参考にPowerShellを使ってDHCPサーバーの機能を追加し諸々の設定をしていきます。
はじめにDHCPサーバーの機能を追加します。
GUIから機能を追加した際はウィザードでセキュリティグループの追加を行う形となり、これもPowerShell(Add-DhcpServerSecurityGroupコマンド)で実施します。
最後にレジストリ設定を更新してサーバーマネージャーに表示される警告を消しています。
# 機能の追加
Install-WindowsFeature DHCP -IncludeManagementTools
# セキュリティグループの追加 + サービス再起動
Add-DhcpServerSecurityGroup
Restart-Service dhcpserver
# サーバーマネージャーの警告を消す
Set-ItemProperty –Path 'HKLM:\SOFTWARE\Microsoft\ServerManager\Roles\12' –Name ConfigurationState –Value 2

内部スイッチ用仮想NICはデフォルトでバインディングが有効になっているので、適切なCIDRのスコープを作るだけでDHCPサーバーとして機能します。
今回はPowerShellで
- 192.168.1.100 ~ 192.168.1.200 の範囲のスコープ "Hyper-V" を作成
- IPアドレス割り当て時にゲートウェイとDNSサーバーのIPも設定する様オプション構成
- DNSサーバーのIPアドレスは環境に応じた形にしてください
の設定を追加してやります。
# Hyper-V用スコープ設定 (192.168.1.100 ~ 192.168.1.200)
Add-DhcpServerv4Scope -Name "Hyper-V" -StartRange '192.168.1.100' -EndRange '192.168.1.200' -SubnetMask '255.255.255.0'
# ゲートウェイ + DNSサーバー指定
Get-DhcpServerv4Scope | Where-Object Name -eq 'Hyper-V' |
Set-DhcpServerv4OptionValue -Router '192.168.1.1' -DnsServer '10.0.0.2'

これでDHCPサーバーの構成は完了です。
DHCPマネージャーから確認するとこんな感じになります。


動作確認
ここでUbuntu Desktopの仮想マシンを作成して動作確認してみます。
細かい手順は割愛しますがウィザードから新規に仮想マシンを作成し、Ubuntuのインストールウィザードを起動するとこんな感じになります。

この状態で画面右上のネットワーク設定がインターネットアクセス可能な状態になっており、IPアドレスを確認すると期待通り192.168.1.100が払いだされています。

DHCPサーバーの状態を見てもいい感じです。

インストールを完了したあとも特に問題無くインターネットアクセスできています。
余談
なお、今回はUbuntu 24.04.2を試したのですが、カーネルバージョンが合わない系のエラーでHyper-V向けの設定にドハマりして統合サービスの利用や拡張セッションモードの設定が全然うまくいきませんでした...
本記事の趣旨と外れるので問題解決まではしませんが[2]、EC2上であってもAzure向けカーネルを使う形にすることで少しだけ改善できたので共有しておきます。
# Azure向けカーネルをインストールして再起動
sudo apt-get install linux-azure
sudo reboot
これにより、
- hv-kvp-daemon.service の起動
- Vhv-vss-daemon.service の起動
はできたのですが、
- hv-fcopy-daemon.service の起動
- 拡張セッションの実現
ができませんでした...
この問題がEC2 Hyper-V固有のものかについては正直何とも言えません。
最後に
以上となります。
EC2の入れ子の仮想化はまだ公式ドキュメントが少なく自己責任でがんばる必要はありますが、ちょっとした検証環境が必要な時に使えそうな予感がします。
本記事の内容が少しでも皆さんの役に立てば幸いです。






