Home > Windows にまつわる e.t.c.

Hyper-Vネットワークの基本


Hyper-Vのネットワークはシンプルシンプルな構成ですが、Hyper-Vビギナーさんがよくハマるのもネットワークです。

これは、Hyper-Vが提供しているネットワークがどのようなコンポーネントで構成され、どのような役割を持っているのか、UI がどのコンポーネントを設定しているのかがよくわらない事が原因になっています。
(「TCP/IP って食べられるの?」って方は今回対象外ですので悪しからず)

Hyper-Vを使いこなすための必須知識である Hyper-V ネットワークの基本的な仕組みを整理してみましょう。

 

Hyper-V ネットワークが提供するネットワーク コンポーネント

Hyper-V のネットワークは「仮想NIC」と「仮想スイッチ」として提供されているのですが、Hyper-V ビギナーが陥りがちなのが「仮想NIC」と「仮想スイッチ」をごっちゃに捉えてしまう点です。

PC の NIC(*1) と、LAN ケーブルで接続する先のスイッチ(*2)は物理的に別物ですが、Hyper-V が提供する「仮想NIC」と「仮想スイッチ」は内部構造なので目で見る事が出来ません。
更に、Hyper-V を操作する GUI では、「仮想NIC」と「仮想スイッチ」のどちらを操作する UI なのかが明示的に表現されていないのが混乱の元になっています。

仮想 NICは、物理マシン の NIC と一緒で VM(*3)に接続された NIC です。
NIC なので IP アドレスを設定できますし、MAC アドレスも持っています。

仮想スイッチ(スイッチングハブ)は、仮想 NIC を接続するための L2 スイッチです。
家庭で使われるL2スイッチより少しインテリジェンスになっていますが、基本的には一緒と考えて良いでしょう。

仮想スイッチに物理 NIC を接続して使うケースが一番多いのですが、この時の物理 NIC はスイッチの1ポートと同じ扱いになります。
大切な事なので繰り返します。仮想スイッチに紐づけた物理 NIC は、仮想スイッチの1ポートでしかありません。

Hyper-V のネットワーク コンポーネントは「仮想NIC」と「仮想スイッチ」しかないので、Hyper-V 標準機能としてのNATはありません。
NAT が必要な場合は、VM を NAT 箱として構築する必要があります。
(この制限は Windows 10 1709 で NAPT 対応の仮想スイッチがサポートされたので緩和されました)

*1
Network Interface Card = ネットワークアダプター

*2
スイッチ = スイッチング ハブ

*3
Virtual Machine = 仮想マシン

 

Hyper-V インストール直後のネットワーク

Hyper-V をインストールした直後は、物理NICがホストOSから見えている状態になっています。

 

これを図で表現するとこんな感じです。

 

各 NIC は IP でのアクセスができる状態になっています。

 

外部仮想スイッチ割り当て

それでは、Hyper-V のネットワークで使用する「仮想スイッチ」作成します。

まずは一番ポピュラーな「外部」仮想スイッチです。

 

紐付ける物理NICを指定して、デフォルトでチェックされている「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」のチェックを外して仮想スイッチを作成します。

[

 

外部ネットワークに指定したNICのプロパティを見ると、TCP/IPのチェックが外れ「Hyper-V拡張可能仮想スイッチ」だけにチェックが入っています。

 

これは NIC の通信機能が剥奪され、VM の通信を通すだけの NIC に役割が変わったことを意味しています。
つまり、仮想スイッチの1ポートになったのです。
仮想スイッチ(L2)のポートなので、IP等の設定はできません。

図で書くとこんな感じです。

 

VM からこの仮想スイッチに接続するには、仮想スイッチ名を指定します。

 

すると、VMからNICが認識されるようになります。

 

ここで大切なのは、Hyper-V が提供しているネットワークコンポーネントは「仮想スイッチ」と「仮想 NIC」の2つある点です
VM の NIC 設定は、VM への NIC を割り当てと、その NIC をどの仮想スイッチに接続するかのコントロールをしているのです。

GUI とこれらの関係を結びつけるとこんな関係になっています。

 

 

この図にあるように、「仮想スイッチマネージャー」は仮想スイッチだけを管理しており、「外部」の場合は仮想スイッチは物理 NIC に接続されています。

VM 設定では、VM に割り当てる仮想 NIC を作成し、仮想 NIC を仮想スイッチに接続するのです。

仮想スイッチと仮想 NIC は別物であることを意識してください。

ちなみに、仮想 NIC にも名前がついており、VM 設定に表示されている「ネットワークアダプター」が仮想 NIC 名です。
GUI から仮想 NIC 名を変更することはできませんが、PowerShell では仮想 NIC 名に任意の名前を付けることができます。

 

外部仮想スイッチ割り当て(ホストと共有)

Hyper-V ビギナーさんがつまづきやすいのが、デフォルト設定になっている「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」のチェックがついている場合です。

 

どのような状態になっているのか図にしてみましょう。

 

今まで直接接続されていた物理 NIC が切断され、仮想スイッチに接続する仮想 NIC が割り当てられるのです。

ホスト OS に割り当てられた仮想 NIC は、接続されている仮想スイッチ名と合わせた「vEthernet(vsw-Internal)」というネーミングになっています。

 

元々の NIC プロパティを見ると、仮想スイッチに割り当てられた NIC と同様に TCP/IP のチェックが外れ「Hyper-V拡張可能仮想スイッチ」だけにチェックが入っています。

 

作成された仮想 NIC のプロパティを見ると、通常の NIC と同様です

 

元々の NIC は仮想スイッチの1ポートに役割が変わり、自動的に追加された NIC(仮想NIC)が元々の NIC の役割を肩代わりをしているのです。

Hyper-Vでは、ホスト OS も VM の一つなのでこのような事が出来るのです。

物理 NIC に割り当てられていた設定は仮想 NIC に引き継がれるので、手動で設定した IP アドレス等はそのまま使うことができます。

ホスト OS を管理する VM 管理画面は無いので、仮想 NIC 名を見ることはできません。

GUI とこれらの関係を結びつけるとこんな関係になっています。

 

「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」にチェックが入っていると、仮想 NIC が追加され、ホスト OS は仮想 NIC と仮想スイッチ経由して、仮想スイッチの1ポートになった物理 NIC を通って外部と通信する動作に変わる仕組みがわからずハマるケースが多いようです。

 

内部仮想スイッチ割り当て

ホスト OS に仮想 NIC が追加されるケースはもう1つあって、「内部」仮想スイッチを作成した場合に仮想 NIC が追加されます。

 

内部ネットワークを選択すると、ホスト OS に接続された仮想スイッチが作成されます。

 

ホスト OS に割り当てられた仮想 NIC は、接続されている仮想スイッチ名と合わせた「vEthernet(InternalOnly)」というネーミングになっています。

 

この状態を図にするとこんな感じになっています。

 

このような仕組みなので、内部仮想スイッチに接続した VM は、外部との通信はできませんが、ホスト OS との通信ができるのです。

GUI とこれらの関係を結びつけるとこんな関係になっています。

 

プライベート仮想スイッチ割り当て

プライベート仮想スイッチは、物理 NIC にもホスト OS にも接続されていない隔離された仮想スイッチです。

 

プライベート仮想スイッチを使用すると、外部やホスト OS から独立したネットワークを Hyper-V 内部に作成する事が出来ます。

 

ここまで来ると、説明は不要だと思いますが、GUI とこれらの関係を結びつけるとこんな関係になっています。

 

VM のタグVLAN

VLAN って何ですか?? タグって何ですか?? っ方は、タグ VLAN を必要としない環境なので、ここから先を読む必要はありません。

 

仮想スイッチがインテリジェンスな点の1つとして、タグ付きパケットをハンドリングできる点があります。

仮想NICはVLAN IDを喋ることができるので、物理スイッチのポートをトランク設定にしていれば、VM 設定で任意の VLAN に接続する事が出来ます。

 

VM 設定で、「仮想 LAN ID を有効にする」にチェックすると、VLAN ID を入力できるようになります。

 

この設定は、VM の仮想 NIC に反映され、仮想スイッチには タグ付きのパケットが渡されます。

仮想スイッチはタグ付きパケットもハンドリングできるので、外部へタグ付きのパケットをそのまま渡す事が出来ます。

GUI とこれらの関係を結びつけるとこんな関係になっています。

 

 

物理マシンの場合、タグ VLAN を設定しようとした場合、NIC 設定を変更する必要がありますが、VLAN IDの設定は OS の機能ではなく、使用している NIC ドライバーの設定になります。
NIC によっては GUI でしか設定できないとか、タグ VLAN 設定ができないとかでハードルが高いのですが、Hyper-V の VM であれば簡単にタグ VLAN 設定ができますし、PowerShell 設定が可能なので、数多くの VM を簡単に管理する事が出来ます。

 

ホストOSのタグVLAN

ホスト OS に割り当てられる仮想 NIC にタグ VLAN を設定するには、「仮想オペレーティングシステムの仮想VLAN IDを有効にする」にチェックを入れてVLAN IDを指定します。

 

この設定は、仮想スイッチを作るときにしか指定ができないので、間違った時は仮想スイッチの作り直しが必要です。

GUI とこれらの関係を結びつけるとこんな関係になっています。

 

 

 

仮想スイッチは、タグ付きのパケットをハンドリングすることはできますが、内部通信をタグなし、外部通信をタグ付き設定をする事はできません。

 

セッション登壇用に最新情報を追加してスライドにしました(Windows 10 & Windows Server 2019 対応)

Hyper-V ネットワークの基本 from Syuichi Murashima

登壇時の録画

 

関連情報

Windows 10 1709(Fall Creators Update/RS3) Hyper-V の NAPT 仮想スイッチ
http://www.vwnet.jp/Windows/w10/2018010501/w10_1709_NAPT_vSwitch.htm

TP5 NAPT 仮想スイッチ
http://www.vwnet.jp/Windows/WS16TP5/2016050502/TP5NAPTvSW.htm

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.