ここでは、Windowsの仮想化機能Hyper-Vで、NAT機能を利用する方法を紹介します。
Windows 10バージョン1709以降のHyper-Vでは、ここで紹介している手順を実施しなくても、デフォルトでNAT接続が可能な「Default Switch」が利用できます。
「Default Switch」では、DHCPサーバー機能も提供され、接続する仮想マシンには自動でIPアドレスが割り当てられるため、本記事で紹介している方法でNAT機能を手動で設定する必要性はあまりなくなりました。
目次
利用条件と制限事項
Hyper-VでNAT機能を利用するための条件と制限事項は以下となります。
- Windows 10 Anniversary Update 以降
- NATの対象にできるIPアドレスは1セットのみ定義可能
- NATの内側と外側でIPアドレス(の範囲)が重複するような設定は不可
- NATに接続する仮想マシンのIPアドレスは手動で設定する必要がある
NATネットワークを作成する
内部仮想スイッチの作成
まず、管理者権限でPowerShellを起動し、以下のコマンドレットを実行します。(SwitchNameは、任意の分かりやすい名前を指定します。)
> New-VMSwitch -SwitchName WinNAT1 -SwitchType Internal
NATゲートウェイを構成
作成した仮想スイッチにIPアドレスを1つ付けます。ここで付けたIPアドレスが、仮想マシンから見た場合のデフォルトゲートウェイになります。
まず、Get-NetAdapterコマンドレットを実行し、上で作成した仮想スイッチのネットワークインターフェース番号(ifIndex)を確認します。
> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
vEthernet (WinNAT1) Hyper-V Virtual Ethernet Adapter #2 31 Up 00-12-34-56-78-90 10 Gbps
vEthernet (既定のスイ... Hyper-V Virtual Ethernet Adapter 15 Up 12-34-56-78-90-12 10 Gbps
イーサネット Realtek PCIe GBE Family Controller 5 Up 23-45-67-89-01-23 1 Gbps
ネットワークインターフェース番号(ifIndex)を確認したら、New‐NetIPAddressコマンドレットで、NATゲートウェイを構成します。下のコマンドは、ゲートウェイのIPアドレスを「172.16.1.1/24」とした場合の実行例です。
> New-NetIPAddress -IPAddress 172.16.1.1 -PrefixLength 24 -InterfaceIndex 31
NATネットワークの作成
NATの対象となるIPアドレスの範囲(とネットマスク)を指定します。
以下のコマンドレットを実行します。
> New-NetNat -Name WinNAT1 -InternalIPInterfaceAddressPrefix 172.16.1.0/24
作成したNATネットワークを確認するには「Get-NetNat | fl *」コマンドレットを実行します。
以上でNATの設定は完了です。
ちなみに、内部仮想スイッチを「172.16.1.1/24」「172.16.2.1/24」「172.16.3.1/24」のように複数作成して、それらを全部含むようなアドレスマスクをNew-NetNatコマンドレット指定(172.16.0.0/16)することで、それらを全部まとめてNATの変換対象にできます。
あとは、作成した内部仮想スイッチを仮想マシンのネットワークインターフェースとして割り当てるだけです。
- 仮想マシンのIPアドレスやネットマスクは、内部仮想スイッチに割り当てた範囲内で設定
- デフォルトゲートウェイは、内部仮想スイッチに割り当てたIPアドレスを指定
- DNSサーバーのアドレスは、いつも利用しているDNSサーバーのアドレスを指定すればOK
NATネットワークの状態を確認する
現在のNATネットワークの設定状況を確認するときは、以下のコマンドレットを実行します。
> Get-NetNat
動作状況を確認するときは、以下のコマンドレットを実行します。
> Get-NetNatSession
NATネットワークを削除する
NATネットワークの設定を削除したいときは、以下のコマンドレットを実行します。
> Remove-NetNat -Name WinNAT1
あとがき
VirtualBoxなど標準でNAT機能を持っている仮想化ソフトウェアに比べるとひと手間かかりますが、Hyper-Vも結構便利になりました。