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