Windows で Hyper-V を使って仮想マシンを動かして、その仮想マシンを外部ネットワークに接続させたい。 最近は NAT の仕組みもできたりしてるっぽい (まだ詳しく調べてない) けど、従来の方法としては 「外部仮想スイッチを作成」 して、仮想マシンの NIC から外部仮想スイッチを経由して外部ネットワークに接続する。
- MS による日本語ドキュメント : 仮想ネットワークを作成する
- MS による英語ドキュメント : Create a virtual network
Hyper-V マネージャの仮想スイッチマネージャを使って GUI 上で追加することもできるのだけど、コマンドを使う方法を書いておく。
PowerShell 上でコマンドを使用して外部仮想スイッチを追加
まずは Get-NetAdapter
コマンドで Windows 10 システムに接続されているネットワーク アダプターの一覧を取得。
PS C:\Users\nobuoka> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Bluetooth ネットワーク... Bluetooth Device (Personal Area Netw... 8 Disconnected XX-XX-XX-XX-XX-XX 3 Mbps
Wi-Fi Intel(R) Dual Band Wireless-AC 7265 13 Up XX-XX-XX-XX-XX-XX 866.7 Mbps
外部仮想スイッチの接続先として、このうちのどれか 1 つを選ぶ。 今回の場合は 「Wi-Fi」 しかないので、「Wi-Fi」 にする。
あとは New-VMSwitch
コマンドを使って作成する。 名前と、管理 OS 側に共有するかどうか (-AllowManagementOS
) と、接続先のネットワークアダプタを指定する。
PS C:\Users\nobuoka> New-VMSwitch -Name "Wi-Fi VM Switch" -AllowManagementOS $True -NetAdapterName "Wi-Fi"
物理的なネットワークアダプタが 1 つしかないのであれば、管理 OS 側に共有しないと管理 OS 側からネットワーク接続ができなくなってしまう。 物理ネットワークアダプタが 1 つの環境ならほぼ $True
一択だと思う。
なぜかうまくいかない
という上記手順で作成できるはずなのだけど、うちの環境ではうまくいかない。 Windows 10 Pro IP Build 14986 な環境。
PS C:\Users\nobuoka> New-VMSwitch -Name "Wi-Fi VM Switch" -AllowManagementOS $True -NetAdapterName "Wi-Fi"
New-VMSwitch : 仮想イーサネット スイッチの接続の追加中にエラーが発生しました。
イーサネット ポート '{D68B5B04-9606-4A68-9F3E-E15DFE8E1635}' のバインドに失敗しました: ポインターが無効です (0x80004003)。
発生場所 行:1 文字:1
+ New-VMSwitch -Name "Wi-Fi VM Switch" -AllowManagementOS $True -NetAda ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-VMSwitch]、VirtualizationException
+ FullyQualifiedErrorId : InvalidParameter,Microsoft.HyperV.PowerShell.Commands.NewVMSwitch
英語だとこんな感じ。
PS C:\Users\nobuoka> New-VMSwitch -Name "Wi-Fi VM Switch" -AllowManagementOS $True -NetAdapterName "Wi-Fi"
New-VMSwitch : Failed while adding virtual Ethernet switch connections.
Ethernet port '{7B47F169-98C7-4306-B150-0B75D1E5EB62}' bind failed: Invalid pointer (0x80004003).
At line:1 char:1
+ New-VMSwitch -Name "Wi-Fi VM Switch" -AllowManagementOS $True -NetAda ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [New-VMSwitch], VirtualizationException
+ FullyQualifiedErrorId : InvalidParameter,Microsoft.HyperV.PowerShell.Commands.NewVMSwitch
Windows の初期化をした直後には成功したのだけど、ネットワーク周りをいじってるうちにおかしくなったっぽい? Insider Preview だからなのか正式リリース版でもダメなのかとか、調査が面倒なのでまだそこまで調べられてない。 備忘録として残しておく。
どうやって調査していけばいいのかもわからないので、知見ある方いらっしゃいましたら教えてください