概要
Hyper-V マネージャで Wi-Fi のルータのネットワークアダプタに外部スイッチを紐付けて仮想マシンを起動したら、仮想 NIC が作成されていませんでした。そのため、ゲスト側で dnf install
とかをしてもなにもインストールできない (ゲスト側から直接外部ネットワークと接続できない)、という状況に陥りました。
なので、手動で ( Powershell ) Wi-Fi のネットワークアダプタを外部スイッチを割り当てました。その結果、ipconfig
したところ、外部スイッチの イーサネット アダプター vEthernet
が追加されていました。
before
デフォルトスイッチの仮想NIC しか表示されていませんでした。
# Command Prompt
ipconfig
......
イーサネット アダプター vEthernet (Default Switch):
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::6ad6:e867:1f03:5613%24
自動構成 IPv4 アドレス. . . . . . . .: 169.254.65.217
サブネット マスク . . . . . . . . . .: 255.255.0.0
デフォルト ゲートウェイ . . . . . . .:
after
vEthernet (ExternalSwitchWebServer)
という項目が追加されています。外部スイッチの 仮想 NIC です。
# Command Prompt
ipconfig
......
イーサネット アダプター vEthernet (ExternalSwitchWebServer):
メディアの状態. . . . . . . . . . . .: メディアは接続されていません
接続固有の DNS サフィックス . . . . .:
イーサネット アダプター vEthernet (Default Switch):
接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::6ad6:e867:1f03:5613%24
自動構成 IPv4 アドレス. . . . . . . .: 169.254.65.217
サブネット マスク . . . . . . . . . .: 255.255.0.0
デフォルト ゲートウェイ . . . . . . .:
注 : Default Switch の IP は 各環境でかわります。ちなみに筆者の環境では試行錯誤の過程で netsh interface ipv4 delete address name="vEthernet (Default Switch)" address=<origin_ip>
で割り当てを解除したので、デフォルトのIPとは異なる値になっています。
追記 :
Wi-Fi ルータのネットワークアドレスを 仮想スイッチに割り当てると、物理リンク状態が "Disconnected" の状態になる ( ipconfig
だと メディアの状態. . . . . .メディアは接続されていません
となる) ので、アダプタの IP アドレスが取得できません。
筆者の別記事にて、この問題に対応しました。イーサネット (有線 NIC ) のネットワークアダプタを仮想スイッチに割り当て直す作業が必要です。本投稿、下記、対処法 2 で同じ対応手順を書いてます。
前提
仮想マシンを作成→外部スイッチを作成 ( Hyper-V マネージャでどちらも作成)
はまったところ
下記の Powershell コマンドで、ネットワークアダプタに外部スイッチを割り当てようとするとエラーになり失敗する。
# ネットワークアダプタ名を確認
Get-NetAdapter -Physical | Select Name, InterfaceDescription
Name InterfaceDescription
---- --------------------
イーサネット Intel(R) Ethernet Controller I226-V
Wi-Fi Realtek 8852BE Wireless LAN WiFi 6 PCI-E NIC
# 外部スイッチ名を確認
Get-VMSwitch | Select Name, SwitchType, NetAdapterInterfaceDescription
Name SwitchType NetAdapterInterfaceDescription
---- ---------- ------------------------------
ExternalSwitchWebServer External Realtek 8852BE Wireless LAN WiFi 6 PCI-E NIC
Default Switch Internal
# 外部スイッチにネットワークアダプタを割り当てようとするとエラーになる
Set-VMSwitch -Name "ExternalSwitchWebServer" -NetAdapterName "Realtek 8852BE Wireless LAN WiFi 6 PCI-E NIC"
Set-VMSwitch : 物理ネットワーク アダプター 'Realtek 8852BE Wireless LAN WiFi 6 PCI-E NIC' が見つかりません。
発生場所 行:1 文字:1
+ Set-VMSwitch -Name "ExternalSwitchWebServer" -NetAdapterName "Realtek ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Set-VMSwitch], VirtualizationException
+ FullyQualifiedErrorId : Unspecified,Microsoft.HyperV.PowerShell.Commands.SetVMSwitch
この状態でエラー内容を ChatGpt に投げると、
Wi-Fiのルータのネットワークアダプタでは外部スイッチのバインドに制限があります。特に
Set-VMSwitch
やNew-VMSwitch
でWi-Fiを指定すると、**「物理ネットワークアダプターが見つかりません」**というエラーが出ることが多いです。
とのこと。
追記: 上のコマンドで 単に -NetAdapterName
の指定する値を間違えていました。Get-NetAdapter
で取得した Name
列の値を指定するのが正しいです:
Set-VMSwitch -Name "ExternalSwitchWebServer" -NetAdapterName "Wi-Fi"
対処法
-
【成功した方法】追記 に書いたように、
Set-VMSwitch
でWi-Fi ネットワークアダプタに外部スイッチを割り当てる。
Set-VMSwitch -Name "ExternalSwitchWebServer" -NetAdapterName "Wi-Fi"
これでうまくいかない (同じエラーが出る) 場合は、ChatGpt が言っているように Wi-Fi ルータのネットワークアダプタとの互換性がない可能性があります。以下の手順を参考に対応してみてはいかがでしょうか。( 今回は検証していませんので自己責任でお願いします)
追記: 以下の筆者別記事にて、イーサネットアダプタ (有線 NIC ) を割り当て直しました。
2.[ 任意 ] イーサネットアダプタ ( 有線 NIC ) を外部スイッチに割り当て直す。(何をしているか理解できていない場合はやらないでください。)
対処法 2 の設定の流れ ( 任意 )
- 現在割り当てられている 既存の Wi-Fi ルータのネットワークアダプタを、仮想スイッチから解除
- 仮想スイッチを新しくイーサネットアダプタに割り当てる
ただし、ホストOS が 有線 LAN に LAN ケーブルなどですでにつながっていることが条件。有線 LAN のイーサネットアダプタを仮想外部スイッチに割り当てます。そうすると、(ホスト側に) 外部スイッチのネットワークインターフェース (仮想 NIC ) が作成されます。それを介してゲストOS側から直接外部ネットワークに出られるようになります。
詳細な手順 ( 任意 )
外部スイッチをイーサネットのネットワークアダプタを割り当てます。
Set-VMSwitch -Name "ExternalSwitchWebServer" -NetAdapterName "イーサネット"
追記:
Wi-Fi ルータのネットワークアダプタを仮想スイッチに割りてると、ipconfig
が メディアの状態. . . . . .メディアは接続されていません
となり、IP アドレスがアダプタに正しく割り振られません。
対処法 2 を実行し、下記、筆者別記事でさらに詳細を確認してみてはいかがでしょうか。