Hyper-Vで「Get-NetAdapter」がフルデュプレックスを返さない理由と対策

仮想マシンのネットワークアダプターを見ていると、「なぜ物理アダプターで設定したフルデュプレックスの情報が反映されないのか?」と不思議に思うことはありませんか。Hyper-V上では、物理アダプターと仮想アダプターの間に仮想スイッチというレイヤーが介在するため、物理層の設定値がそのまま仮想マシンに渡るわけではありません。そこで本記事では、Hyper-Vのネットワーク構成やGet-NetAdapterコマンドの仕組みをやさしく解説しつつ、フルデュプレックス設定が反映されない理由と対処方法をご紹介します。

目次

Hyper-V環境のネットワーク構成の基本

Hyper-Vでは、ホストOS(物理マシン)上に仮想スイッチを作成し、それを物理ネットワークアダプターに紐づける形で外部接続を実現します。仮想マシンはホストOSが提供する仮想スイッチを経由し、最終的に物理アダプターから外部ネットワークへアクセスする仕組みです。このとき、仮想マシンから見えるネットワークアダプターは「Hyper-V仮想アダプター」であり、物理アダプターとは異なる階層で動作します。

外部仮想スイッチとは?

外部仮想スイッチは、Hyper-V上の仮想マシンが物理ネットワークに接続できるようにするための構成要素です。ホストOSの「Hyper-V Virtual Switch Manager」から設定し、特定の物理NICを割り当てることで作成されます。
以下はよくある構成例です。

  • 物理アダプター1枚を「外部仮想スイッチ」に割り当てる
  • その仮想スイッチを仮想マシンのネットワークアダプターに適用する
  • 仮想マシンは仮想アダプター経由で物理LANにアクセスする

このように、仮想マシンのネットワークは、物理アダプター直結というよりは「仮想スイッチを介した接続」である点がポイントです。

なぜ物理アダプター直結に見えにくいのか

Hyper-Vでは、ネットワークスタックがソフトウェア的に抽象化されています。そのため、ゲストOS(仮想マシン)から見るアダプターは、あくまで「仮想的なデバイス」であり、物理層の詳細(フルデュプレックス設定や実リンク速度など)までは直接参照できません。実際の設定はホスト側のNICドライバーや物理層が担当し、ゲストには論理的なデバイスとしてのみ認識される仕組みです。

Get-NetAdapterでフルデュプレックスが表示されない理由

Windows PowerShellのGet-NetAdapterコマンドは、ネットワークアダプターの基本情報を取得するために便利なコマンドです。ところが、Hyper-V上の仮想マシンで実行すると、FullDuplexプロパティやリンク速度が「空欄(NULL)」になっている場合があります。

物理層の設定値は仮想NICへ受け継がれない

フルデュプレックスやリンク速度は、物理アダプターのPHYやドライバーで管理されるパラメータです。仮想マシンのアダプターは、実際にはホストOS上のソフトウェア的なNICとして機能しているため、物理層の詳細な設定情報をそのまま取得できません。
下記のように、ゲストOS上でGet-NetAdapterを実行した出力例を示します。

PS C:\> Get-NetAdapter

Name                      InterfaceDescription               ifIndex Status    MacAddress         LinkSpeed
----                      --------------------               ------ ------    ----------         ---------
イーサネット              Hyper-V Virtual Ethernet Adapter   4      Up        00-15-5D-AB-CD-EF  10 Gbps

一見すると「10 Gbps」と表示されることもありますが、これはあくまで仮想アダプターがホスト側から報告を受けている論理上の速度であり、実際に「10 Gbpsの物理回線」に直結されているわけではありません。また、FullDuplexプロパティは空欄になるケースが多く、仮想アダプターには設定されない仕様となっています。

NULLや空欄は異常ではなく仕様

Hyper-Vの仮想ネットワークアダプターにはFullDuplex値が設定されない仕様となっているため、Get-NetAdapterの結果が空欄になっても異常動作ではありません。ゲストOSからは単に「仮想デバイス」として扱われるだけなので、フルデュプレックス設定がNULLとなるのは正常な挙動です。

物理アダプターのフルデュプレックスを確認する方法

物理アダプターのフルデュプレックスやリンク速度を確認したい場合は、Hyper-Vホスト側でGet-NetAdapterを実行してください。ホストOSでは実際の物理アダプターを直接管理しているため、確かな設定値を取得できます。

ホストOSでの確認手順

  1. Hyper-VホストにリモートデスクトップやPowerShellでログインする
  2. 管理者権限でPowerShellを起動する
  3. 次のコマンドを実行
   PS C:\> Get-NetAdapter | Format-Table Name, Status, LinkSpeed, FullDuplex
  1. 出力結果に、FullDuplexがTrue/False、あるいはリンク速度が100Mbps、1Gbpsなどと表示される

これにより、物理アダプターの正確なリンクモードと速度が把握できます。

チーミング構成時の注意点

もしホストOSでNICチーミングを行っている場合、個々の物理NICに加え、チームとしてまとめられたアダプターも表示されます。チーミングされたNICの場合、物理アダプター単位のFullDuplexはドライバとOSの間の設定になるため、場合によってはチームの状態として報告されるリンク速度や設定モードが異なる可能性があります。

項目確認場所注意点
フルデュプレックスGet-NetAdapter(ホストOS)仮想マシンからは確認不可
リンク速度Get-NetAdapter(ホストOS)チーム構成時はチーム全体の速度表示に留意
仮想アダプター設定ゲストOS上(Get-NetAdapter)FullDuplexは空欄、LinkSpeedは論理値

Hyper-V仮想スイッチの役割とネットワーク仮想化

フルデュプレックス情報がゲストに伝わらない背景には、Hyper-Vのネットワーク仮想化技術があります。Hyper-V仮想スイッチはレイヤ2スイッチをソフトウェア的に再現しており、物理NICとの間でトラフィックをやり取りする際、必要な仮想化機能やフィルタリングを行います。

仮想スイッチの主な機能

  • トラフィックの振り分け: 仮想マシン同士や外部ネットワークとの通信を仮想スイッチが仲介
  • 仮想ポートの管理: ポートごとにVLAN IDを設定したり、QoS(Quality of Service)の適用が可能
  • セキュリティ: MACアドレススプーフィングや保護モード設定など、セキュリティ設定を実施

これらの機能によって柔軟なネットワーク構成が可能になります。一方で、物理NICで設定されているフルデュプレックスやリンク速度などの情報は、仮想スイッチ層で抽象化されるため、ゲストOSには直接渡らないのです。

仮想化によるパフォーマンスへの影響

仮想スイッチを介することで、わずかなオーバーヘッドが発生する可能性はあります。ただし、近年のHyper-Vでは、ハードウェア支援の仮想化機能(VMQやSR-IOVなど)を利用し、パケット処理を最適化できます。その結果、ほとんどの場面では物理アダプター直結と比べて大きな性能差が出ないのが一般的です。

必要に応じて確認・設定しておきたい事項

仮想マシンからフルデュプレックス情報が得られないのは仕様ですが、運用上把握しておくと便利な設定や確認事項がいくつかあります。

ゲストOSのネットワークプロパティ

ゲストOSのネットワークアダプター設定画面(Windowsの場合は「ネットワーク アダプターの設定を変更する」)を開くと、リンク速度やタスク オフロードの有効/無効などが確認できます。これらはHyper-V仮想アダプター固有のプロパティですが、仮想環境のパフォーマンスチューニング時には見落とせないポイントです。

オフロード機能の確認例

ゲストOSから、次のコマンドでオフロード機能の状況を確認できます。

PS C:\> Get-NetAdapterAdvancedProperty -Name "<仮想アダプター名>"
  • IPv4 Checksum Offload
  • Large Send Offload (LSO)
  • Receive Side Scaling (RSS)

などの項目が表示されます。環境や用途に合わせて有効/無効を調整することで、通信性能が向上する場合があります。

フルデュプレックスが必要な理由と代替的な確認方法

なぜフルデュプレックスが気になるのかというと、ネットワーク帯域の最大化を確保したい場面や、半二重(Half Duplex)でトラブルが起きるケースを回避したい場面があるからです。物理スイッチが半二重に固定されていると、衝突(コリジョン)が頻発し通信速度が激減する恐れがあります。

半二重の問題と対策

  • 問題点: 衝突が多発するとパケットが再送され、実効通信速度が大幅に低下
  • 対策: ネットワーク機器(物理スイッチやNIC)をフルデュプレックスに合わせる、または自動ネゴシエーションを有効にする

Hyper-Vホスト側で物理アダプターをフルデュプレックスやAuto Negotiationに正しく設定しておけば、ゲストOSで表示される仮想アダプターがNULLであっても問題なくフルデュプレックスが機能していると考えてよいでしょう。

代替的な確認方法

実際の通信速度やデュプレックスに疑念を持った場合、以下のようなアプローチで「実効スループット」を測定するのも一つの手段です。

  • iPerfやPingテストでレイテンシを計測
  • ファイル転送ツールで大容量データを送受信して実効速度を計測
  • ネットワークモニタリングツールでパケットコリジョンやエラーを監視

こういった方法で問題が起きていないかを確認すれば、仮想マシンのネットワークが正常にフルデュプレックス動作しているかをある程度判断できます。

ケース別の対処アイデア

運用シナリオによっては、フルデュプレックスやリンク速度に関する情報を詳細に把握しなければならないケースもあります。以下に、いくつかのケース別対処アイデアを示します。

ケース1:物理ネットワークに異常が疑われる場合

  1. ホストOS側のイベントビューアやNICドライバのログを確認する
  2. 物理スイッチとのネゴシエーション設定を再確認する(Auto/手動設定の不一致がないか)
  3. ケーブルやポートに障害がないか確認し、必要に応じて交換・修理を行う

ケース2:通信性能に問題がある場合

  1. SR-IOVやVMQなどのハードウェアオフロード機能が使えるNICかを確認
  2. ホストOS、ゲストOS双方でオフロード機能の有効/無効を切り替えて性能を比較
  3. 仮想マシンが集まるホストでNICチーミングを検討し、帯域幅を拡張する

ケース3:特定のソフトウェアがフルデュプレックス情報を要する場合

まれに、ネットワーク診断系のソフトウェアが「アダプターのリンクモード」を参照し、NULLだった場合にエラーとして扱うケースがあります。その場合は、ソフトウェアの設定やバージョンアップで仮想アダプターでも問題なく動作するように調整できる場合があります。もし対応策が見当たらない場合は、物理ホスト側で同種の診断を行うなど別の手段を模索する必要があるでしょう。

よくある質問とその回答

Q1: 物理アダプターを100Mbps/Full Duplex固定にしているのに、ゲストOSで10Gbpsと表示されるのはなぜ?

A: これは、Hyper-V仮想アダプターが論理的に「10Gbps」と報告しているだけです。実際の通信は物理アダプターの100Mbpsに依存しますが、ゲストOS側からはその情報が見えないため「10Gbps」と表示されます。

Q2: ゲストOSのGet-NetAdapterでFullDuplexをTrueにする方法はある?

A: 仮想アダプターにはFullDuplexの設定値を明示的に反映させる方法はありません。Hyper-Vの仕様上、FullDuplexプロパティはセットされないため、NULLや空欄になることが一般的です。

Q3: ゲストOSがFullDuplexを取得できなくても問題ない?

A: 原則問題ありません。Hyper-Vホスト側で物理アダプターとスイッチのネゴシエーションが適切に行われていれば、ゲストOSは通常通りフルデュプレックス通信が可能です。必要に応じてホスト側で設定を確認しましょう。

Hyper-Vネットワークをより活用するためのヒント

フルデュプレックス設定がゲストOSに反映されないのは仕様ですが、Hyper-Vでは他にもネットワーク性能を高めるための多様な機能が備わっています。運用環境や要件に合わせて、有効に使いこなしましょう。

SR-IOV(Single Root I/O Virtualization)の活用

対応するネットワークカードを利用している場合、SR-IOVを有効化すると仮想マシンが直接NICのハードウェアリソースを利用できるようになり、ネットワーク性能が大幅に向上することがあります。フルデュプレックスの情報はゲストOSには依然として物理レイヤーとしては表示されにくいものの、レイテンシ削減やスループット向上が期待できます。

NICチーミングとLBFO(Load Balancing and Failover)

複数の物理NICをまとめて帯域拡張や冗長化を図るNICチーミング(LBFO)は、Hyper-Vホストでよく採用される手段です。複数のNICをチームとして扱うことで、物理アダプターの障害に対しても耐性を持ちつつ帯域幅を増やせます。ゲストOSからはひとつの仮想スイッチに見えますが、物理アダプターの冗長化と負荷分散が効率良く行われます。

まとめ:FullDuplexプロパティが空欄なのは正常な仕様

Hyper-V環境において、ゲストOS側のGet-NetAdapterでフルデュプレックス設定が空欄になるのは、物理アダプターと仮想アダプターの構造上の違いに起因する正常な動作です。実際のフルデュプレックス設定やリンク速度はホストOSの物理アダプターで管理され、ゲストOSには仮想的なネットワークデバイスが見えているだけというわけです。もしリンク速度の設定やフルデュプレックスに関して何らかの問題が疑われる場合は、Hyper-Vホスト側でGet-NetAdapterを確認し、物理スイッチと併せて自動ネゴシエーション設定などを点検しましょう。

最後に、ネットワーク性能が不安な場合は、iPerfなどのベンチマークツールやファイル転送テストで実効スループットを測定するのがおすすめです。数値上でのフルデュプレックス表示がNULLであっても、正しく設定が行われていればHyper-V上の仮想マシンは問題なく通信を行えます。ぜひ本記事の内容を参考に、Hyper-Vのネットワーク設定やトラブルシュートにお役立てください。

コメント

コメントする

目次