実施内容
以下図のような、Azure VM 上に Hyper-V VM を作成して検証などを行う際、他の Azure VM または Azure外から直接 Hyper-V VM に対してRDPで接続できるようにします。
Azure VM 上で 仮想スイッチの作成とInetrnal NATを行い、Hyper-V上に作成した VM へ 外部から RDP で接続できるように構成していきます。
Hyper-V(Nested) on Azure な環境を構成する方法自体は、以前記載しています。
その際には Skip した、Hyper-V仮想ネットワークの構成を今回行います。
https://qiita.com/ueda_it/items/70412a9392a57b738150
参考ドキュメント
参考ドキュメントは以下です。
Hyper-V 上に構成した VM が外部と疎通ができるように、NATを構成してあげます。
https://docs.microsoft.com/ja-jp/virtualization/hyper-v-on-windows/user-guide/setup-nat-network
具体的には以下で紹介されている手順に沿って進めていきます。
https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-setup-nested-virtualization-for-azure-vm-vhd/ba-p/1115338
仮想スイッチの作成
Azure VM 上で、PowerShell で以下を実行します。
$switchName = "InternalNAT"
New-VMSwitch -Name $switchName -SwitchType Internal
または、GUIで作成する場合は以下です。
- 仮想スイッチの作成
- [ Hyper-V マネージャー] を開き、サーバを右クリックして、 [ 仮想スイッチ マネージャー ] を選択する。
- [ 内部 ] を選択して [ 仮想スイッチの作成 ] を行います。
- 作成された仮想スイッチに名前やメモを設定できます。
仮想NICの設定
- 1.ホスト(Azure VM)側仮想NICの設定
New-NetNat を使用し、NAT ネットワークを構成します。
また、ホスト側仮想NIC(NAT ゲートウェイとなります)の設定を行います。
New-NetNat -Name $switchName -InternalIPInterfaceAddressPrefix 192.168.0.0/24
$ifIndex = (Get-NetAdapter | ? {$_.name -like "*$switchName)"}).ifIndex
New-NetIPAddress -IPAddress 192.168.0.1 -InterfaceIndex $ifIndex -PrefixLength 24
- 2.ゲスト(Hyper-V VM)側仮想NICの設定のためのDHCPの構成
個別にゲストVMのNICにIPを割り当てることも可能ですが、今回はホスト(Azure VM)側で DHCP を構成し、ゲスト(Hyper-V VM)側へのIPを自動割り当てするようにしておきます。
この手順は前提として、DHCPの役割を追加する必要がありますので、追加されていない場合には追加します。
Install-WindowsFeature -Name DHCP -IncludeManagementTools
DHCPの設定
Add-DhcpServerV4Scope -Name "DHCP-$switchName" -StartRange 192.168.0.50 -EndRange 192.168.0.100 -SubnetMask 255.255.255.0
Set-DhcpServerV4OptionValue -Router 192.168.0.1 -DnsServer 168.63.129.16
Restart-service dhcpserver
GUIでも、DHCPの設定が追加されていることを確認できます。
Hyper-V VMを作成し、DHCPで構成すると、以下の通りDHCPで払い出されています。
これで仮想スイッチの作成と、各VMのNICの構成が完了したので、仮想マシンを作成していけます。
Hyper-V上での仮想マシンの作成については省略します。
ここまでで以下の構成が完成しています。
なお、ホスト(Azure VM)のNICを確認してみると、Azure側と接続しているNIC(Ethernet 10) と vSwitch側と接続しているNIC(vEthernet(InternalNAT))が確認できます。
NAT を構成する
外部⇒内部VMへRDPさせるため、NATを構成します。
RDPの既定のポート番号は3389です。
ホストのAzure側IPアドレスにポート番号3389で接続した場合はホスト自身へのRDPとなります。
別途、ポート番号60001と60002番を使って、
ホストのAzure側IPアドレスにポート番号60001で接続をした場合 → RDP②:192.168.0.50 ポート番号3389 へNAT
ホストのAzure側IPアドレスにポート番号60002で接続をした場合 → RDP③:192.168.0.51 ポート番号3389 へNAT
するように構成します。
Add-NetNatStaticMapping -NatName "InternalNAT" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.0.50 -InternalPort 3389 -ExternalPort 60001
Add-NetNatStaticMapping -NatName "InternalNAT" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.0.51 -InternalPort 3389 -ExternalPort 60002
RDP の確認
Azure VM へ、ポート番号 60001, 60002 で RDP して動作を確認します。
なお、パブリックIPアドレスが付与されているのであれば、パブリックIPアドレス宛にRDPすることも可能です。
パブリックIPアドレス宛に、ポート番号60001を指定してRDPを試します。
接続できました。
DHCPで構成され、IPアドレス 192.168.0.50 を持つ Hyper-V VM へ接続できています。
なお、繋がらない場合は、以下のようなうっかりがないか確認します。
●Azure VM への通信をNSGで制御している場合には、受信ポートの許可規則を忘れず追加します。
●また、Hyper-V VM側での RDP の許可も忘れずに行います。
PowerShell サンプル
#
# Hyper-V と DHCP 役割追加
#
Install-WindowsFeature -Name DHCP,Hyper-V -IncludeManagementTools
#
# 一度再起動
#
Shutdown -R
#
# 仮想スイッチの作成
#
$switchName = "InternalNAT"
New-VMSwitch -Name $switchName -SwitchType Internal
New-NetNat -Name $switchName -InternalIPInterfaceAddressPrefix 192.168.0.0/24
$ifIndex = (Get-NetAdapter | ? {$_.name -like "*$switchName)"}).ifIndex
New-NetIPAddress -IPAddress 192.168.0.1 -InterfaceIndex $ifIndex -PrefixLength 24
#
# DHCPの有効化
#
Add-DhcpServerV4Scope -Name "DHCP-$switchName" -StartRange 192.168.0.50 -EndRange 192.168.0.100 -SubnetMask 255.255.255.0
Set-DhcpServerV4OptionValue -Router 192.168.0.1 -DnsServer 168.63.129.16
Restart-service dhcpserver
#
# NAT設定の追加
#
Add-NetNatStaticMapping -NatName "InternalNat" -Protocol TCP -ExternalIPAddress 0.0.0.0 -InternalIPAddress 192.168.0.50 -InternalPort 3389 -ExternalPort 60001
参考リンク