🫒

Azure VM 内に Hyper-V で作成した VM へ RDP で接続 (Inetrnal NAT の備忘)

2022/10/17に公開

実施内容

以下図のような、Azure VM 上に Hyper-V VM を作成して検証などを行う際、他の Azure VM または Azure外から直接 Hyper-V VM に対してRDPで接続できるようにします。
Azure VM 上で 仮想スイッチの作成とInetrnal NATを行い、Hyper-V上に作成した VM へ 外部から RDP で接続できるように構成していきます。

●作成するHyper-V仮想ネットワークのイメージ
image.png

●NATのイメージ
image.png

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 マネージャー] を開き、サーバを右クリックして、 [ 仮想スイッチ マネージャー ] を選択する。
    • [ 内部 ] を選択して [ 仮想スイッチの作成 ] を行います。
    • 作成された仮想スイッチに名前やメモを設定できます。

image.png
image.png

仮想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

image.png

  • 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の設定が追加されていることを確認できます。
image.png

image.png

Hyper-V VMを作成し、DHCPで構成すると、以下の通りDHCPで払い出されています。
image.png

これで仮想スイッチの作成と、各VMのNICの構成が完了したので、仮想マシンを作成していけます。
Hyper-V上での仮想マシンの作成については省略します。
ここまでで以下の構成が完成しています。

image.png

なお、ホスト(Azure VM)のNICを確認してみると、Azure側と接続しているNIC(Ethernet 10) と vSwitch側と接続しているNIC(vEthernet(InternalNAT))が確認できます。

image.png

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
するように構成します。

image.png

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

これでNATが構成されました。
image.png

RDP の確認

Azure VM へ、ポート番号 60001, 60002 で RDP して動作を確認します。
なお、パブリックIPアドレスが付与されているのであれば、パブリックIPアドレス宛にRDPすることも可能です。

パブリックIPアドレス宛に、ポート番号60001を指定してRDPを試します。
image.png

接続できました。
DHCPで構成され、IPアドレス 192.168.0.50 を持つ Hyper-V VM へ接続できています。
image.png

なお、繋がらない場合は、以下のようなうっかりがないか確認します。
●Azure VM への通信をNSGで制御している場合には、受信ポートの許可規則を忘れず追加します。
image.png

image.png

●また、Hyper-V VM側での RDP の許可も忘れずに行います。
image.png

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

参考リンク

https://techcommunity.microsoft.com/t5/itops-talk-blog/how-to-setup-nested-virtualization-for-azure-vm-vhd/ba-p/1115338

http://www.vwnet.jp/Windows/WS12R2/Hyper-V/Hyper-V_Network.htm

Microsoft (有志)

Discussion