Edited at

Hyper-V の外部仮想スイッチを追加するコマンド (と、それが失敗する件)

More than 1 year has passed since last update.

Windows で Hyper-V を使って仮想マシンを動かして、その仮想マシンを外部ネットワークに接続させたい。 最近は NAT の仕組みもできたりしてるっぽい (まだ詳しく調べてない) けど、従来の方法としては 「外部仮想スイッチを作成」 して、仮想マシンの NIC から外部仮想スイッチを経由して外部ネットワークに接続する。

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 だからなのか正式リリース版でもダメなのかとか、調査が面倒なのでまだそこまで調べられてない。 備忘録として残しておく。

どうやって調査していけばいいのかもわからないので、知見ある方いらっしゃいましたら教えてください :bow: