いまさら聞けないHyper-Vネットワークの詳細(1):仮想スイッチの概念と種類:今だからこそ学び直すHyper-V再入門(8)
前回まで仮想マシンの詳細な設定内容や変更可能な項目といったHyper-Vの設定を見てきました。今回から複数回に分けて、Hyper-Vの仮想ネットワークに関する考え方やポイント、仮想スイッチや仮想ネットワークアダプターの設定といった、ネットワーク周りを学び直します。今回は、Hyper-V仮想ネットワークの中心ともいうべき仮想スイッチの概念と種類を見ていきます。
Hyper-V仮想スイッチの概要
「Hyper-V仮想スイッチ」を理解する上で欠かせないのが、Microsoftの原典的なドキュメントです。
- 仮想化ネットワークに関するトピック(Microsoft Learn)
このトピックの各項目に、Hyper-V仮想スイッチの詳細な技術情報が記述されています。ただし、このドキュメントは開発を主眼に置いており、技術的に詳細過ぎると思われるので、本連載では概要的なレベルで見ていきます。
まず、Hyper-V仮想スイッチの特徴ですが、非常に高性能な仮想スイッチであり、さまざまな機能を持ち、かつ「エクステンション」と呼ばれるプラグインを利用することで機能を追加可能な「拡張可能スイッチ」です。
Hyper-V仮想スイッチの基本機能は以下の通りです。
- VLAN(Virtual Local Area Network)機能
- VLANタグ付与
- VLANトランク
- プライベートVLAN
- ネットワークセキュリティ機能
- アドレス解決プロトコル(Address Resolution Protocol:ARP)スプーフィング保護
- 近隣探索(Neighbor Discovery:ND)スプーフィング保護
- DHCP(Dynamic Host Configuration Protocol)ガードによる保護
- ルーターガードによる保護
- ポートアクセス制御(ポートACL〈Access Control List〉)によるトラフィック制御
- ポートミラーリングによるネットワークトラフィックの監視
- ネットワーク制御機能(ネットワークQoS〈Quality of Service〉)
- 最小帯域幅保証/最大帯域幅制御
- 明示的輻輳(ふくそう)通知(Explicit Congestion Notification:ECN)マーキング
各機能の詳細は次回以降で解説しますが、基本的機能としてこれらを有しています。また、エクステンションを導入することで、上記基本機能以外の機能をHyper-V仮想スイッチに持たせることも可能になっています。
Hyper-V仮想スイッチの概念的な仕組みは、図1のようになっています。
Hyper-V仮想スイッチは、サードパーティーの転送エンジンやフィルターエクステンション、キャプチャーエクステンションを組み込めるように設計されており、この仕組みを利用して機能を拡張できるのが「拡張可能スイッチ」と呼ばれるゆえんです。
仮想マシンから物理ネットワークへ、もしくは物理ネットワークから仮想マシンへ通信が発生すると、それらの通信パケットは仮想スイッチを通過することになります。その際、VLANやACLが設定されている場合には、仮想スイッチ上でそれらの処理が行われ、宛先にパケットが届けられる仕組みになっています。
メモ
Hyper-V仮想スイッチは「シングルルートI/O仮想化」(SR-IOV)と呼ばれるネットワーク処理に関するハードウェアオフロード機能に対応しています。
SR-IOVの詳細は別の回で解説しますが、簡単に言えば、SR-IOVはハードウェアの機能を利用することで仮想マシンのネットワーク性能を大きく向上させる機能になります。
SR-IOVを有効化した場合、仮想マシンのトラフィックはHyper-V仮想スイッチをバイパスして物理ネットワークと通信します。このような例外はありますが、基本的には仮想マシンの通信は仮想スイッチを経由して行われます。
Hyper-V仮想スイッチの設定画面
ここからは実際の設定画面を見ていきましょう。
Hyper-V仮想スイッチの設定内容については、本連載第2回の「仮想スイッチの設定」の項でも触れましたが、仮想スイッチそのものの設定はそれほど多くありません。他のハイパーバイザーと比較すると、非常にシンプルな設定となっています。
GUI(グラフィカルユーザーインタフェース)の管理ツールである「Hyper-Vマネージャー」から仮想スイッチを参照すると、基本的な設定である「プロパティ」(画面1)と、サブ項目としての「拡張」の2項目しかないことが分かります。
仮想スイッチそのものの設定としては、ほぼこのプロパティ画面で完了します。サブ項目である「拡張」は、前項でも説明したエクステンションの設定画面となっています(画面2)。
画面2では、仮想スイッチにインストールされているエクステンションの一覧と、エクステンションをこの仮想スイッチで有効/無効を設定できます。エクステンションそのものの設定は、各エクステンションの仕様に従います。
例えば、画面2の「Microsoft Azure VFP Switch Extension」は、「Windows Server 2016」以降で実装されているネットワーク仮想化技術「Microsoft SDN v2」(Hyper-V Network Virtualization:HNV)をはじめとするネットワーク仮想化関連で使用されるエクステンションとなっており、この画面からはそれらの設定はできません。
シンプルな設定項目しかない仮想スイッチで、前項で列挙した高度な機能はどのように実現できるのでしょうか?
Hyper-V仮想ネットワークは、仮想スイッチだけで成り立つものではなく、セットで存在するものがあります。それが「仮想ネットワークアダプター」です。
本連載第5回でも触れた仮想ネットワークアダプターの設定画面が画面3です。ここでは、VLANや帯域制御(ネットワークQoS)を設定できます。
つまり、仮想マシンに接続された仮想ネットワークアダプターにVLANやネットワークQoS、設定画面にはありませんがACLを設定することで、その設定を仮想スイッチが取り込んで高度なネットワークサービスを仮想マシンに提供するようになっています。
物理ネットワークの世界で考えた場合、前述のような設定は全て物理スイッチ側で実施され、物理コンピュータ(物理ネットワークアダプター)側では何も設定しない、というのが当たり前です。他のハイパーバイザーもそのような思想で作られている場合が多いでしょう。
ネットワークアダプター側に設定を持たせるメリットは、「仮想マシンが別の仮想化ホストに移動した場合、ネットワーク設定も持ち込める」点にあると筆者は考えています。
高可用性については別の回で触れますが、複数のホストで仮想化基盤を構成したシナリオで考えてみましょう。
仮想スイッチ側に設定(ポリシー)を持たせた場合、同じポリシーを全ての仮想化ホストに設定する必要があります。そのポリシーがたとえ1台の仮想マシン専用のポリシーであっても、仮想マシンが移動する可能性がある限りは必須の設定になります。なぜなら、図2のようにポリシーが設定されていない仮想化ホストに仮想マシンが移動すると、ネットワークのポリシーがないためネットワーク断につながるからです。
こうした事態を避けるため、仮想スイッチの設定を全ての仮想化ホストで同一に自動設定するソリューションがありますし、ハイパーバイザー側でネットワーク設定がされていない仮想化ホストには仮想マシンを移動させないように設定する、といった対策も可能です。
なお、全ての仮想化ホスト上の仮想スイッチ設定の統一化には、設定を一元管理するコントローラーのようなものが必要な場合がほとんどで、中小規模の環境では追加リソースが必要になる場合もあります。
対して、Hyper-Vの仮想スイッチでは仮想マシン(仮想ネットワークアダプター)側に設定があり、仮想スイッチがその設定を取り込むことでネットワーク設定が実施できます。つまり、仮想マシン側の設定をしっかりしておけば、複数の仮想化ホストの間を移動しても仮想スイッチ側は仮想ネットワークアダプターの設定を読み込むだけで設定が完了します。
ただし、仮想マシンは仮想スイッチの名前をキーにして接続するため、図3のように同じ名前の仮想スイッチがないと接続先なしでネットワーク断になるので注意が必要です。
仮想スイッチの設定としては、スイッチ名を同一にする、後述する物理ネットワークへの接続を統一化するだけなので、仮想マシンのネットワーク設定(ポリシー)を新規で追加する場合に、仮想スイッチに設定を追加する必要がない点がポイントです。従って、仮想マシン向けの仮想スイッチ設定を一元管理するような仕組みが不要な点がコスト削減にも寄与しているといえます。
仮想スイッチ側にポリシーがあるパターン、仮想マシン(仮想ネットワークアダプター)側にポリシーがあるパターンの双方を見てきました。仮想スイッチ側に設定がある場合、複数の仮想マシンで同じネットワーク設定とするには、同じポリシーを適用することで設定を完了できます。ただし、ポリシー設定を間違えると複数の仮想マシンに影響を与えるので、設定や変更は慎重に実施してください。
対して仮想ネットワークアダプター側にポリシーがある場合は、仮想マシンごとにポリシーを個別に設定する必要があります。そのため、運用上は煩雑になりがちですが、設定ミスなどの影響範囲はその仮想マシンだけにとどめられます。
仮想マシンの数だけ設定を実施しなければならないという点については、Hyper-Vの仮想ネットワークアダプターのポリシー設定はPowerShellで実施可能です。従って、PowerShellスクリプトによる自動化を図ることで作業工数を削減できます。
仮想ネットワークアダプター周りのPowerShellコマンドレットについては、別連載の「Windows PowerShell基本Tips」で扱っていますので、参考にしてください。
メモ
Hyper-Vでは前出の図3のように同じ名前の仮想スイッチがない場合、高可用性設定(クラスタ構成)時点で「クラスタ構成に適していないのでスイッチ名の修正が必要」と警告が出力されます。
警告を無視してクラスタを構成する、もしくはクラスタ構成後に仮想スイッチ名を変更するようなことをしない限り、図3のような事象は発生しません。仮に異なるスイッチ名だった場合は、仮想マシンの移行(ライブマイグレーション)は実行されません。
よくあるシナリオとしてはストレージ移動を伴うホスト/クラスタ間移行になりますが、同じ名前の仮想スイッチが存在しない場合、Hyper-Vのストレージ移動を伴う移行処理(ストレージライブマイグレーション)の最終ステップで、接続する仮想スイッチを明示的に指定するプロセスが挿入されるため、実質的な影響はありません。
この辺りの詳細は、高可用性設定の回で解説します。
Hyper-V仮想スイッチの作成
Hyper-Vホストで仮想スイッチを作成するのは非常に簡単です。「Hyper-Vマネージャー」で「仮想スイッチマネージャー」を開き、「仮想スイッチの作成」をクリックします(画面4)。
画面を見ると分かりますが、「仮想スイッチの作成」をクリックする前に「どの種類の仮想スイッチを作成しますか」というリストから作成する仮想スイッチの種類を選択する必要があります。選択後、「仮想スイッチの作成」をクリックすることで、選んだ仮想スイッチの詳細を設定する画面が表示されます。画面5は、既定値である「外部」を選択した例になります。
この画面で「仮想スイッチの名前」「仮想スイッチの種類」「管理オペレーティングシステム(ホストOS)へのネットワークアダプターの共有」など指定して「OK」ボタンをクリックすることで、仮想スイッチの作成は完了します。
なお、この新規作成の状態で「拡張」を開いても、この段階では拡張機能は管理不可と表示されてしまうため(画面6)、新規作成の場合は画面5の設定を行うだけになります。
なお、PowerShellでも仮想スイッチを作成可能です。PowerShellによる作成は別連載「Windows PowerShell基本Tips」の第127回「New-VMSwitch」コマンドレットを参照してください。
作成時に選択が必要な仮想スイッチの種類については、次項で一つずつ紹介していきます。
Hyper-V仮想スイッチの種類:外部
接続の種類「外部」の仮想スイッチ(以下、外部仮想スイッチ)は、使用頻度の高い仮想スイッチの種類で、Hyper-Vホスト上の仮想マシンがインターネットをはじめとする「Hyper-Vホストの外部」と通信するための仮想スイッチになります。
仮想スイッチ作成時にHyper-Vホストに接続されている物理ネットワークアダプター(物理NIC
仮想マシンは図4の通り、仮想ネットワークアダプター(仮想NIC)で仮想スイッチに接続し、アップリンクポート(Hyper-Vホストの物理ネットワークアダプター)経由で物理スイッチ以降の各ネットワークノードと通信します。
そのため、物理スイッチのHyper-Vホストが接続されているポートでMAC(Media Access Control)アドレステーブルを参照すると、画面7のように仮想マシンのMACアドレスが登録されていることが分かります。
この物理スイッチのポートに接続されているHyper-Vホストで仮想マシンのMACアドレスを確認すると、同じMACアドレスが表示されます(画面8)。
つまり、 仮想スイッチや物理ネットワークアダプターでアドレス変換などのネットワーク関連処理が実行されないことを示しています。仮想スイッチは一般的なネットワークスイッチとして動作していて、物理スイッチから見ても仮想マシンは単なるネットワークノードとして物理ネットワークの延長線上に存在していることが分かります。
仮想スイッチの種類として「外部」を選択した場合は、アップリンクとして動作する物理スイッチに接続された物理ネットワークアダプターをプルダウンメニューから選択します(画面9)。
ここで選択された物理ネットワークアダプターは、ホストOSからある意味切り離され、ホストOS上でIPアドレスを割り振って通信することができなくなります。
具体的には、物理ネットワークアダプターのプロパティを参照すると分かります。「Microsoftネットワーク用クライアント」や「Microsoftネットワーク用ファイルとプリンター共有」などのネットワークサービス、IPv4プロトコルなどが無効化され、「Hyper-V拡張可能仮想スイッチ」が有効化されます(画面10)。
このようにホストOSからは「自由に使用できるネットワークアダプター」として利用できなくなり、仮想スイッチのアップリンクポートとしてのみ動作することになります。
では、Hyper-Vホストに物理ネットワークアダプターが1つしかなく、その物理ネットワークアダプターを仮想スイッチのアップリンクポートに割り当てた場合、ホストOSはネットワークから切り離されてしまうのでしょうか。
仮想スイッチの設定画面には「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」という項目があります(画面11)。
このチェックボックスをオンにして仮想スイッチを作成すると、画面12のようにホストOS用の仮想ネットワークアダプターが作成されます。つまり、ホストOSも仮想マシンのように仮想ネットワークアダプターから仮想スイッチ経由で物理ネットワークに接続しているかのように見えることになります。
ホストOSに作成される仮想ネットワークアダプターは、既定値では名前に仮想スイッチ名が付与され、仮想スイッチが複数あった場合でも、どの仮想スイッチに接続されているかを確認しやすくなっています。画面12では「External vSwitch」という名前の仮想スイッチに接続されているため、仮想ネットワークアダプターの名前に「(External vSwitch)」が付与されています。
仮想マシン用の仮想ネットワークアダプターとの大きな違いは、表面上は仮想ネットワークアダプター扱いですが、仮想ネットワークアダプターのプロパティを確認すると、MACアドレスは仮想マシンとは異なり、物理ネットワークアダプターのMACアドレスになっていることが分かります(画面13)。
つまり、ネットワークアダプターとしては物理ネットワークアダプターを使用しているものの、仮想スイッチのアップリンクとしても共用するため、設定的には仮想ネットワークアダプターとして取り扱い、仮想スイッチのアップリンクと物理ネットワークアダプターを「共有」するという特殊な設定となります。
物理ネットワークアダプターが1つしかない環境で、「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」のチェックボックスをオフにして仮想スイッチを作成すると、ホストOSからコントロールできる物理ネットワークアダプターがなくなってしまうため、ホストOSが物理ネットワークから切り離されます(画面14)。
画面14にもある通り、ホストOSのネットワーク状態を示すシステムトレイのアイコンも「インターネット接続なし(未接続)」の状態を示しています。こうなると、Hyper-Vホストには「リモートデスクトップ」でも接続できなくなるため、リモート環境から仮想スイッチの設定を変更する場合は最新の注意を払いましょう。
また、ホストOSとの共有設定については、仮想マシンとホストOSの通信を論理的に分けたいという場合、VLANタグを付与して、物理スイッチに「VLANトランク」(複数のVLANを1つの物理的リンクに相乗りさせる)の形で接続することが可能です。
具体的には「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」のチェックボックスをオンにすると設定可能となる、「管理オペレーティングシステムの仮想LAN IDを有効にする」のチェックボックスをオンにして、その下のVLAN IDを設定する項にホストOSの通信用のVLAN IDを指定します(画面15)。
画面15の設定は、ホストOSの通信にVLAN ID「2」を付与して物理ネットワークに送出する設定になります。物理スイッチ側ではVLAN ID「2」と仮想マシン用のVLAN(未設定であればタグなし)をVLANトランクの形で受けられるように設定することで、ネットワーク分離を図ることも可能です。イメージとして分かりやすく表現するのであれば、図5のようになります。
もちろん、仮想マシンとホストOSの通信が同一のネットワークで問題ない場合には、VLAN設定は不要です。
仮想スイッチの種類として「外部」を選択した場合に、もう一つ設定可能な項目があります。それが「シングルルートI/O仮想化」(SR-IOV)の設定になります。
この設定は、仮想スイッチを作成するタイミングでしか有効化できません。SR-IOVについては別の回で解説しますが、この機能を有効化するには、サーバハードウェアおよび物理ネットワークアダプターがSR-IOVに対応している必要があります。ほとんどの場合は、本機能を利用しないと思いますので、チェックボックスはオフの状態で問題ありません。
Hyper-V仮想スイッチの種類:内部
仮想スイッチの種類「内部」の仮想スイッチ(以下、内部仮想スイッチ)は、外部仮想スイッチと異なり、Hyper-Vホストの内側で使用されます。
内部仮想スイッチの作成は、「仮想スイッチマネージャー」で「接続の種類」に「内部」を選択します。外部仮想スイッチのようにアップリンクとなる物理ネットワークアダプターを選択したり、ホストOSとネットワークアダプターを共有する設定をしたりする必要はありません。
画面17は内部仮想スイッチの作成画面ですが、画面の通り、仮想スイッチの名前を入力して「OK」ボタンをクリックするだけで作成完了です。
内部仮想スイッチを作成すると、ホストOSに仮想ネットワークアダプターが作成されます。ネットワークアダプターには内部仮想スイッチの名前が付与されているため、作成した内部仮想スイッチに接続されていることが分かります(画面18)。
MACアドレスを確認すると、仮想マシンと同じようにHyper-VホストからMACアドレスが払い出されているため、仮想マシンと同じ仕組みで仮想ネットワークアダプターが割り当てられ、仮想スイッチに接続していることが分かります。
内部仮想スイッチのイメージは図6のようになります。
つまり、外部仮想スイッチのように、物理ネットワークアダプターをアップリンクとして接続しないため、仮想マシンの通信がHyper-Vホストの外へ流れることは基本的にはありません。
また、ホストOSに自動的に仮想ネットワークアダプターが作成されて内部仮想スイッチに接続されるため、仮想マシンとホストOSは同一サブネットで通信が可能となります。
Hyper-V仮想スイッチの種類:プライベート
接続の種類「プライベート」(以下、プライベート仮想スイッチ)は、内部仮想スイッチ同様、Hyper-Vホストの内側で使用されます。プライベート仮想スイッチも、内部仮想スイッチと同様、仮想スイッチの名前を指定するだけで作成できます(画面19)。
内部仮想スイッチとの大きな違いは、ホストOSに仮想ネットワークアダプターが作成されない点です。つまり、プライベート仮想スイッチは完全に閉鎖されたネットワークを作成でき、プライベート仮想スイッチに仮想ネットワークアダプターを接続した仮想マシン間でのみ通信することができます。
プライベート仮想スイッチのイメージは図7のようになります。
ホストOSにも通信が届かないため、通信の秘匿性が最も高い仮想スイッチとなります。また、プライベート仮想スイッチに接続していない仮想マシンや物理ネットワークからの通信の影響を受けることがなく、仮想マシン間での安定した通信が必要な場合にも使用可能です。
今回は、Hyper-Vにおける仮想スイッチの概念と3つの仮想スイッチの種類について見てきました。次回は本連載第5回で少し触れた仮想ネットワークアダプターについて、仮想スイッチが提供する機能と照らし合わせながら、その詳細を見ていきます。
筆者紹介
後藤 諭史(ごとう さとし)
株式会社ネットワールド所属。Microsoft MVP for Cloud and Datacenter Management(2012-2025)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.