Windows 10/11 Hyper-VでNAT接続
Windows 10/11 Hyper-Vの仮想ネットワークでNAT接続する方法。
- 無印のWindows 10(ビルド10240)ではNAT接続を使用できない。
- Windows 10 November Update(バージョン1511)では裏技的な方法でNAT接続可能。
- Windows 10 Anniversary Update(バージョン1607)以降は正式にNAT接続をサポート。
- Windows 10 Fall Creators Update(バージョン1709)では、仮想ネットワークにNAT接続可能な「
既定のスイッチ
」(英語版ではDefault Switch
)が追加。 - Windows 10(バージョン1909)までのどこかで「
既定のスイッチ
」が言語に関係なく「Default Switch
」に変更 - Windows 11はNAT接続をサポートしている。
問題点/注意点
正式にサポートされてからもGUIがないためPowerShellを使用してコマンドラインで設定する。
既定のスイッチ
ではない場合、DHCPやDNSの提供はなく純粋にNAT変換のみの機能。
VMのネットワーク設定は固定にするか、ホスト等にDHCPサーバを用意する必要がある。
Windows 10/11のバージョンが上がる大型アップデートを行うと、NATの設定を行った仮想ネットワークが消える。 完全に消えるのではなく残骸が残った状態になるため、残骸を消した後に再作成する必要がある。 NAT接続の方法が変わったバージョン1607だけでなく、少なくともバージョン1709までは毎回発生している。
Windows 11 22H2では既存の仮想スイッチが全て不通になったため、NATの設定を含めて再作成が必要になった。
ホストにNATは一つだけという制限のせいか、独自にNATを作成するDocker等を使用する場合は注意が必要。
Windows 10 Fall Creators Update/バージョン 1709以降
仮想ネットワークに既定のスイッチ
がされ、NAT、DHCP、DNSが有効になっている。
特に設定しなくてもNAT接続を利用できるようになった。
このバージョンからLCOW(Linux Container on Windows)を使用するDocker for Windowsが利用可能になったが、 仮想ネットワーク周りは注意が必要。
VagrantのproviderにHyper-Vを使用している場合、vagrant up
で接続する仮想スイッチに「既定のスイッチ
」を選択すると、
エラーが発生して失敗する。恐らく文字コードの問題。以前のようにNATの仮想スイッチを作成する必要がある。
現在は「Default Switch
」に名前が変わったので問題ないはず。
Windows 10 Anniversary Update/バージョン 1607以降、Windows 11も同様
- マイクロソフト公式 NAT ネットワークの設定
ここでは、vNAT
という名称で、172.16.0.1
をゲートウェイとする172.16.0.0/24
の仮想スイッチを想定。
NATの作成 バージョン 1607以降
1) 仮想スイッチの作成
管理者権限で起動したPowerShellで仮想SWを作成する。
PS C:\WINDOWS\system32> New-VMSwitch -SwitchName vNAT -SwitchType Internal
2) 仮想ネットワークアダプタのIP設定
管理者権限で起動したPowerShellで実行する。
まずはGet-NetAdapter
で作成した仮想スイッチに対応するifIndex
を検索し、そのifIndex
に対してIPアドレスを設定する。
設定するIPアドレスはホストのIPアドレス、VMから見ればゲートウェイとなる。
PS C:\WINDOWS\system32> Get-NetAdapter -Name *vNAT* Name InterfaceDescription ifIndex Status MacAddress LinkSpeed ---- -------------------- ------- ------ ---------- --------- vEthernet (vNAT) Hyper-V Virtual Ethernet Adapter 3 Up 00-15-5D-00-xx-xx 10 Gbps PS C:\WINDOWS\system32> New-NetIPAddress -IPAddress 172.16.0.1 -PrefixLength 24 -ifIndex 3
3) NetNatの作成
管理者権限で起動したPowerShellで実行する。
PS C:\WINDOWS\system32> New-NetNat -Name vNAT -InternalIPInterfaceAddressPrefix 172.16.0.0/24
4) 仮想マシンの設定
仮想マシンのネットワークアダプタが接続する仮想スイッチを、作成したvNAT
にする。
仮想マシンのIPアドレスは172.16.0.0/24
の範囲から付与。
ゲートウェイアドレスは172.16.0.1
に、DNSサーバはホストと同じ設定にする。
NATの削除 バージョン 1607以降
1) 仮想マシンの確認
削除する仮想スイッチを仮想マシンが使用していないか確認する。 同じ名前で再作成すれば問題ない場合もあるが、ダメな場合もある。
2) NetNatの削除
管理者権限で起動したPowerShellで実行する。
PS C:\WINDOWS\system32> Get-NetNat PS C:\WINDOWS\system32> Remove-NetNat -Name vNAT
3) 仮想スイッチの削除
管理者権限で起動したPowerShellで実行する。
PS C:\WINDOWS\system32> Get-VMSwitch PS C:\WINDOWS\system32> Remove-VMSwitch -Name vNAT
4) 確認
デバイスマネージャのネットワークアダプターで、Hyper-V Virtual Ethernet Adapter
(またはHyper-V Virtual Ethernet Adapter #2
等)の数が、仮想スイッチの数と一致する事を確認する。
Windows 10 November Update/バージョン 1511
NATの作成 バージョン 1511
以下を実行すると、vNAT
という仮想スイッチと、IPアドレスが172.31.0.1
の仮想ネットワークアダプタが作成される。
仮想マシンの設定方法はWindows 10 Anniversary Update/バージョン 1607以降と同じ。
1) NAT用仮想スイッチの作成
管理者権限で起動したPowerShellで実行する。
PS C:\WINDOWS\system32> New-VMSwitch -Name vNAT -SwitchType NAT -NATSubnetAddress 172.16.0.0/24
2) NetNatの作成
管理者権限で起動したPowerShellで実行する。
PS C:\WINDOWS\system32> New-NetNat -Name vNAT -InternalIPInterfaceAddressPrefix 172.16.0.0/24
NATの削除 バージョン 1511
1) 仮想マシンの確認
仮想マシンが削除する仮想スイッチを使用していないことを確認する。
2) NetNatの削除
管理者権限で起動したPowerShellで実行する。
名称が分からない場合は、Get-NetNat
で確認する。
PS C:\WINDOWS\system32> Get-NetNat PS C:\WINDOWS\system32> Remove-NetNat -Name vNAT
3) 仮想スイッチの削除
管理者権限で起動したPowerShellで実行する。
名称が分からない場合は、Get-VMSwitch
で確認する。
PS C:\WINDOWS\system32> Get-VMSwitch PS C:\WINDOWS\system32> Remove-VMSwitch -Name vNAT
4) IPアドレスの削除
管理者権限で起動したコマンドプロンプトで実行する。
Remove-VMSwtich
するとネットワークアダプタの名称がethernet_数字
に変わるため、
netsh interface ipv4 dump
で確認してから削除する。
C:\WINDOWS\system32> netsh interface ipv4 dump C:\WINDOWS\system32> netsh interface ipv4 delete address name="ethernet_32778" address=172.16.0.1
参考: 仮想スイッチ削除前
add address name="vEthernet (vNAT)" address=172.16.0.1 mask=255.255.255.0
参考: 仮想スイッチ削除後
add address name="ethernet_32778" address=172.16.0.1 mask=255.255.255.0
大型アップデートによるNAT削除からの復旧
バージョン 1703からFall Creators Update/バージョン 1709
アップデート後の状態
仮想スイッチが消えている。 仮想ネットワークアダプタは残っているが機能していない。 NetNatは残っている。
ネットワークアダプタを削除して、同じ名前で仮想スイッチを再作成する。
残骸の削除と再作成
- デバイスマネージャから
Hyper-V Virtual Ethernet Adapter
をアンインストール - New-VMSwitch
- Get-NetAdapter
- New-NetIPAddress
バージョン 1607からCreators Update/バージョン 1703
アップデート後の状態
仮想スイッチは残っていて仮想マシンも起動するがネットワークが機能しない。
仮想スイッチを削除して同じ名前で再作成する。
残骸の削除と再作成
- Get-NetNat
- Remove-NetNat -Name vNat
- Get-NetIPAddress -InterfaceAlias *vNAT*
- Remove-NetIPAddress -ifIndex 3 -IPAddress 172.16.0.1
- Get-VMSwitch
- Remove-VMSwitch -Name vNAT
- デバイスマネージャから
Hyper-V Virtual Ethernet Adapter
を削除 - New-VMSwitch
- Get-NetAdapter
- New-NetIPAddress
- New-NetNat
バージョン 1511からAnniversary Update/バージョン 1607
アップデート後の状態
NATを使用していた場合は復旧方法無し、仮想マシンの作り直しが必要。 ネットワークアダプタの接続先を変更してもエラーが発生して仮想マシンを起動できない。 不完全に残ったNATを削除して、バージョン 1607の方法で再作成する。
不完全なNATの削除方法
NetNatを削除して、デバイスマネージャからネットワークアダプタを削除する。
- Get-NetAdapter
- Get-NetIPAddress
- Get-NetNat
- Remove-NetNat -Name vNAT
- デバイスマネージャから、
adapter
とswitch extension
の二つを削除
参考
PowerShellで仮想ネットワークアダプタのIPアドレスを削除
管理者権限で起動したPowerShellで実行する。
PS C:\WINDOWS\system32> Get-NetIPAddress -InterfaceAlias *vNAT* PS C:\WINDOWS\system32> Remove-NetIPAddress -ifIndex 3 -IPAddress 172.16.0.1