本連載第8回から複数回に分けて、「Hyper-V」の仮想ネットワークに関する考え方やポイント、仮想スイッチや仮想ネットワークアダプターの設定といった、ネットワーク周りを学び直しています。今回は、仮想ネットワークアダプターの設定画面の一つである「高度な機能」を取り上げ、各機能の詳細や仮想ネットワークアダプターの設定/使用方法について見ていきます。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
「Hyper-V」の仮想マシンに接続された「仮想ネットワークアダプター」の設定の中には、「高度な機能」という設定画面があります(画面1)。
ここでは、仮想ネットワークアダプターのMAC(Media Access Control)アドレスの設定や、仮想スイッチが提供する高度な機能を有効化できます。
「高度な機能」として設定できる項目は、以下の通りです。
上記は通常の仮想ネットワークアダプターの設定となりますが、「レガシーネットワークアダプター」では「デバイスの名前付け」機能が使用できません(画面2)。
各機能の概要と設定について以下の項で解説します。
MACアドレスは、レイヤー2(データリンク層)でのアドレスとなり、各ネットワークアダプターを識別する識別子になります。
同一のレイヤー2ネットワーク上において、MACアドレスの重複があるとネットワークアダプターが識別できなくなるため、通信不可などの影響があります。そのため、ネットワークアダプターごとにメーカー出荷段階で一意のアドレスが割り当てられ、基本的には重複しないようにコントロールされています。
MACアドレスについては、関連サイトの以下記事も参考にしてください。
【注】MACアドレスには「グローバルアドレス」と「ローカルアドレス」がありますが、ここでは一般的なネットワークアダプターで使用されているグローバルアドレスを前提に解説します。
MACアドレスは12桁の16進数で表されますが、2桁ずつを区切り文字(「:」や「-」)を使用して6つのオクテットで表現することが一般的です。例えば、画面1の仮想マシンのMACアドレスは「00-15-5D-0A-20-00」となります。
最初の3オクテット(00-15-5D)は、Microsoftが取得している「ベンダー識別子」(Organizationally Unique Identifier:OUI)になります。ベンダー識別子はMACアドレスの割り当てを管理しているIEEE(Institute of Electrical and Electronics Engineers)に依頼して割り当てられる、ネットワークアダプターを出荷するベンダーに対して割り当てる識別子を指します。
従って、MACアドレスの最初の3オクテットを確認することで、どこのベンダーが出荷したネットワークアダプターなのか(もしくはどこのベンダーが出荷したチップを積んでいるのか)を確認できます。例えば、Intelは「F8-F2-1E」、Mellanox(現NVIDIA)は「50-6B-4B」といった感じです。ベンダーによっては、複数のOUIを割り当てられていることもあり、必ずしも1ベンダー=1つのOUIではない点に注意が必要です。
なお、ベンダーごとに割り当てられている識別子はIEEEのWebサイトの他、さまざまなサイトで検索可能です。
Microsoftも複数のベンダー識別子を取得しており、その中から「00-15-5D」をHyper-Vの仮想ネットワーク上で使用するMACアドレスとして割り当て/設定されています。
仮想ネットワークアダプターは、前述の「00-15-5D」から始まるMACアドレスが割り当てられるわけですが、デフォルト(既定値)ではHyper-Vホストからの自動付与となります。
自動付与されるMACアドレスの範囲は、仮想スイッチの設定画面にある「グローバルネットワーク設定」→「MACアドレスの範囲」で確認できます(画面3)。
「00-15-5D」以降の3つのオクテット値ですが、第4オクテット以降はベンダーが任意に割り当てる範囲となっており、Hyper-VではホストのIPアドレスから算出した値を使用します。
算出方法は、Hyper-VホストのIPアドレスの第3オクテットと第4オクテットを使用し、第3オクテットの16進数での値をMACアドレスの第4オクテットに、IPアドレスの第4オクテット16進数での値をMACアドレスの第5オクテットに使用します。第6オクテットは仮想ネットワークアダプターごとに一意のアドレスになります。
画面3のHyper-Vホストである「host39」の例で考えてみましょう。
host39に最初に割り当てたIPアドレスは「192.168.100.39」になります。先ほどのルールにのっとると、IPアドレスの第3オクテットは「100」なので16進数に変換すると「64」、第4オクテットは「39」なので16進数では「27」となり、画面3のように「00-15-5D-64-27-00」から「00-15-5D-64-27-FF」の範囲が自動割り当ての範囲になります。
なお、このMACアドレスの範囲は、Hyper-Vの役割を有効化した段階でのIPアドレスに基づいて決定されます。従って、Hyper-VホストのIPアドレスを変更しても、MACアドレスの設定は変更されません。
仮想ネットワークアダプターの「MACアドレス」設定は、Hyper-Vホストに設定されたMACアドレスの範囲から自動的に割り当てられるか、管理者の責任において静的に割り当てるかの設定となります(画面4)。
デフォルトは「動的」で、仮想ネットワークアダプターを仮想マシンに接続し、仮想マシンを起動したタイミングで自動採番されます。採番後のMACアドレスはグレーアウトの状態で表示されています。
これを「静的」に変更すると、管理者が手動にてMACアドレスを設定できます。静的割り当ての場合、設定するMACアドレスは管理者の任意であり、Hyper-Vホストに設定された割り当て範囲外のMACアドレスも設定可能です(画面5)。
動的割り当ての場合は、重複してMACアドレスを割り当てないようHyper-Vホストで管理しますが、静的割り当ての場合は管理者が重複割り当てしないように管理する必要があります。同一のMACアドレスを持つ仮想マシンを設定することは可能で、同時起動も可能です。同一のVLAN(バーチャルLAN)に接続した場合は通信障害が発生しますので注意してください。
MACアドレスの静的設定は、GUI(グラフィカルユーザーインタフェース)ツールである「Hyper-Vマネージャー」から設定できますが、Windows PowerShellでも設定可能です。使用するコマンドレットは「Set-VMnetworkAdapter」コマンドレットになります。本コマンドレットによる静的割り当て設定は別連載「Windows PowerShell基本Tips」の第141回で紹介していますので、参考にしてください。
「MACアドレススプーフィング」は「ARPスプーフィング(ポイズニング)」とも呼ばれ、同一セグメント(同一VLAN)上で通信を傍受したり、中間者攻撃を実行したりする、いわゆる“なりすまし”攻撃の一つです。
これはMACアドレスを偽装して行われる攻撃ですが、万が一、この攻撃を許すと、仮想マシンで行われた通信の内容が攻撃者に漏えいする恐れがあります。MACアドレススプーフィング(ARPスプーフィング)については、以下記事も参考にしてください。
Hyper-Vでは、これ防止するためにデフォルトで仮想ネットワークアダプターに設定されたMACアドレスを唯一の送信元MACとして通信を許可する、という設定になっています。つまり、ゲストOS上でMACアドレスを追加し、それを用いて通信できないようになっています。
これはセキュリティ上正しいことですが、特定のシナリオ、例えば「ネスト(入れ子)構成のHyper-V」などでは、仮想マシン上でHyper-Vを動かすことになるので、前項で説明した通り、仮想マシンに割り当てられるMACアドレスは新たに採番するものになるため、仮想マシンのMACアドレスとは異なります。
そのため「同一の仮想マシン上で複数のMACアドレスが使用される」状況となるので、Hyper-Vの挙動としては「仮想マシンに設定されたMACアドレス以外のMACアドレスによる通信は、すべて拒否する」動きとなり、結果として「ネスト(入れ子)構成のHyper-V」上の仮想マシンの通信は全て拒否されてしまいます(図1)。
そのため、こうした構成の場合は、Hyper-Vホストの管理者が「仮想マシンに割り当てたMACアドレス以外のMACアドレスによる通信を許可する」必要があります。これが「MACアドレススプーフィング」の有効化設定になります。
別のハイパーバイザーでも同様の設定がありますが、これにより仮想ネットワークアダプターに設定されたMACアドレス以外も通信が可能になります。
MACアドレススプーフィングは、MACアドレス設定画面にある「MACアドレスのスプーフィングを有効にする」のチェックをオンにすることで有効になります(画面6)。
Windows PowerShellでは、「Set-VMnetworkAdapter」コマンドレットで「-MacAddressSpoofing」オプションを使用します。
MACアドレススプーフィングの有効化については、そのリスクを十分に理解した上で設定してください。
DHCP(Dynamic Host Configuration Protocol:動的ホスト構成プロトコル)サーバは、ネットワーク上で動作するサーバであり、クライアントに対してIPアドレスを割り当てる便利なサービスです。
管理者によって適切に管理されていれば非常に便利なサービスですが、管理されていないDHCPサーバや、悪意を持って設置されたDHCPサーバが存在した場合、適切なIPアドレスおよびオプションがクライアントに割り当てられず、セキュリティリスクを抱えることにもなりかねません。
「DHCPガード」は、仮想マシン上でDHCPサーバを稼働させたとしても、DHCPサービスに必要なパケットを仮想スイッチでフィルタリングすることで、他の仮想マシンもしくは同一ネットワークに接続しているノードに対するDHCPによるIPアドレス配布を阻止する機能になります。
本機能の確認のために、DHCPガードを有効化した「Test-VM01」上でDHCPサーバを設定し、DHCPクライアントとして同じ仮想スイッチに「Test-VM03」を接続して、それぞれのゲストOS上でパケットキャプチャーを実施しました。
結果、Test-VM01に到達したDHCP Discoverに対してTest-VM01のDHCPサーバはDHCP Offerを返答するものの、DHCPクライアントであるTest-VM03にはDHCP Offerが到達せずにTest-VM01上のDHCPサーバからのIPアドレスリースに失敗していることが確認できました(画面7)。
このように、DHCPガードはDHCPサーバから送出されるDHCP Offerをフィルタリングすることで実現しており、DHCPガードを無効化するとDHCPサーバからIPアドレスがリースされるようになります。
DHCPガードはデフォルトでは無効になっています。本機能は「高度な設定」画面で「DHCPガードを有効にする」のチェックボックスをオンにすることで有効になります(画面8)。
Windows PowerShellでは、「Set-VMnetworkAdapter」コマンドレットで「-DhcpGuard」オプションを使用します。
Hyper-V上の仮想マシンでDHCPサーバを稼働させる予定がない場合は、Hyper-Vホストの管理者側で本機能を有効化することで、予期しないDHCPサーバ由来のトラブルを避けられるでしょう。
「ルーターガード」と聞くと、仮想マシン上でのルーター機能の提供を防ぐ機能に聞こえますが、機能を正しく表現しているのは「ルーターアドバタイズガード」であり、仮想マシンからのICMP(Internet Control Message Protocol:インターネット制御メッセージプロトコル)によるルーターアドバタイズメント(ICMPv4 Type 9/ICMPv6 Type 134)とリダイレクト(ICMPv4 Type 5/ICMPv6 Type 137)の送信をフィルターする機能になります。
リダイレクトやルーターアドバタイズは、悪意を持ってルーター機能を仮想マシン上で稼働させ、それらのメッセージをクライアントに送信することで、不正なルーターへパケットを誘導することが可能になります。
Hyper-Vホストの管理者が、認識していないルーターがそれらのパケットをネットワークへ送信しないように仮想スイッチでフィルターを設定する機能が「ルーターガード」になります。
ルーターガードはデフォルトでは無効になっています。本機能は「高度な設定」画面で「ルーターアドバタイズガードを有効にする」のチェックボックスをオンにすることで有効になります(画面9)。
Windows PowerShellでは、「Set-VMnetworkAdapter」コマンドレットで「-RouterGuard」オプションを使用します。
筆者の環境で検証したところ、ルーターガードを有効化した場合、ICMP4v Type5(リダイレクト)とICMPv6 Type134(ルーターアドバタイズメント)が外部ノードで受信できないことを確認できました。ICMPv4 Type 9(ルーターアドバタイズメント)とICMPv6 Type 137(リダイレクト)は筆者の環境の都合で確認できませんでしたが、同様にフィルターされると考えられます。
繰り返しますが、本機能はルーターとしての動作に関わる幾つかの通信に対してフィルターを設定する機能であり、仮想マシンをルーターとして利用することを妨げる機能ではありません。
ルーターガードを有効化した仮想マシン上でWindows Serverの役割である「RRAS」(ルーティングとリモートアクセス)のルーティング機能やサードパーティーのソフトウェアルーターを動作させた場合、クライアントもしくは同一VLANに接続している仮想マシンが明示的にデフォルトルートなどで当該仮想マシンのIPアドレスを指定した場合には、ルーターとして利用可能です。
本機能は、あくまでもルーターからの予期しない広報を防ぐ機能であると覚えておくとよいでしょう。
「保護されているネットワーク」の設定は、別の回で紹介する高可用性構成時に利用される設定になります。
仮想ネットワークアダプターに接続されている仮想スイッチのアップリンクとして使用している物理ネットワークアダプターでネットワーク断が発生すると、仮想マシンはネットワーク接続を失い、他のネットワークノードと通信できなくなります。
「保護されているネットワーク」の設定は、そうした事象が発生した際に高可用性構成(クラスタ)を組んでいる他のHyper-Vホストへ自動移動するかどうかの設定となります。
「保護されているネットワーク」が有効化されている場合、仮想スイッチでネットワーク断が発生すると、画面10のようなエラーログをイベントログに出力し、仮想マシンを他のHyper-Vホストへ自動的に移動します。これにより、仮想マシンはネットワーク接続を回復できます。
高可用性構成の環境のみで有効な設定ですが、仮想マシンが主に使用するネットワーク(仮想スイッチ)に接続している仮想ネットワークアダプターでは有効にすべき設定です。
本設定はデフォルトで有効になっていますが、有効であることは「高度な設定」画面の「保護されているネットワーク」のチェックボックスを確認します。無効にする場合はチェックボックスを外します(画面11)。
Windows PowerShellでは、「Set-VMnetworkAdapter」コマンドレットで「-NotMonitoredInCluster」オプションを使用し、有効にする場合は「$false」を設定します。本オプションを使用する場合、有効/無効が他のオプションとは逆(「保護されているネットワーク」を無効にしたい場合は「$true」)である点に注意が必要です。
なお、高可用性構成を組んでいる他のHyper-Vホストでも、仮想マシンが接続する仮想スイッチのネットワーク接続が切断されていた場合には、画面12のようなエラーが発生し仮想マシンの移動に失敗します。
仮想スイッチのアップリンクのネットワーク断には十分注意する必要があり、ネットワークの冗長化を実施することをお勧めします。ネットワーク構成の冗長化については、高可用性設定の回で紹介します。
「ポートミラーリング」はネットワークスイッチのあるポートでやりとりされているパケットを他のポートに複製して転送することを指します。これは物理ネットワークの世界だけではなく、Hyper-V仮想スイッチでも同じことができます。仮想マシンがやりとりするパケットを他の仮想マシンに転送することで、仮想マシンで発生するトラブルシューティングの一助にすることが可能です。
Hyper-V仮想スイッチでも同じことが可能で、仮想マシンがやりとりするパケットを他の仮想マシンに転送することで、仮想マシンでネットワーク的なトラブルが発生している場合のトラブルシューティングの一助にすることが可能です。
「ポートミラーリング」は、2台の同一仮想スイッチ、同一VLANに接続した仮想マシンで設定します。パケットキャプチャーしたい仮想マシンと、実際にパケットを参照する仮想マシンの2台です。後者の仮想マシンにはパケットをキャプチャーするソフトウェアのインストールが必要になります。
パケットキャプチャーしたい仮想マシン(今回の例ではTest-VM01)の仮想ネットワークアダプターの「高度な設定」画面を開き、「ポートミラーリング」の「ミラーリングモード」を「移行元」に設定します(画面13)。
次にパケットキャプチャーを実行する仮想マシン(今回の例ではTest-VM03)の仮想ネットワークアダプターでは、「ミラーリングモード」を「移行先」とします(画面14)。
以上でポートミラーリングの設定は完了です。
この状態で、Test-VM03でパケットキャプチャーを実行してみます。画面15の通り、Test-VM01(192.168.100.111)が送受信するパケットをTest-VM03のパケットキャプチャーソフトウェアでキャプチャーできていることが分かります。
ポートミラーリングの設定は仮想マシンが起動していても変更可能なため、何かしらのネットワークに絡んだトラブルが発生した場合に、被疑仮想マシンのゲストOS上の設定を変更することなく即座にパケットキャプチャーが可能です。
本設定はHyper-Vマネージャーの他、Windows PowerShellからも設定可能です。設定は「Set-VMnetworkAdapter」コマンドレットを使用し、「-PortMirroring」オプションで送信元/送信先を指定します。送信元仮想ネットワークアダプターでは「-PortMirroring Source」を、送信先仮想ネットワークアダプターでは「-PortMirroring Destination」を設定します。
なお、パケットキャプチャーを終了する場合は、「ミラーリングモード」を「なし」に変更することをお勧めします(Windows PowerShellを使用する場合は「-PortMirroring None」です)。
「NICチーミング」は、複数のネットワークアダプターを束ねて仮想的な1つのネットワークアダプターを構成し、あるネットワークアダプターでネットワーク断を伴う障害が発生した場合に、チームを組む他のネットワークアダプターで通信を引き継いて仮想マシンとしての通信断を防ぐ、ネットワークアダプターの高可用性設定となります。
Windows Serverでは「LBFO(Load Balancing and Failover)チーム」と呼ばれるNICチーミングがサポートされており、これを設定することでネットワークアダプターの高可用性を維持できます。
Hyper-Vの仮想スイッチでアップリンクを冗長化していない場合、仮想マシンに2つの仮想ネットワークアダプターを接続し、異なる仮想スイッチに接続して、さらに仮想マシン上のゲストOSでもLBFOを設定することでネットワーク接続を冗長化できます(図2)。
しかし、仮想ネットワークアダプターで「NICチーミング」を有効化していない場合、チームに参加しているあるネットワークアダプターでネットワーク断などの障害が発生した際、他の仮想ネットワークアダプターでもエラーが発生し、結果として接続断になってしまう場合があります。
画面16は「イーサネット7」が接続している仮想スイッチのアップリンクである物理ネットワークアダプターで接続断が発生した際のものになります。正常であるはずの「イーサネット6」でもエラーが発生し、結果としてLBFOインタフェースでも障害が発生し、ネットワーク断になっています。
この事象に対応するためには、ゲストOSでLBFOを構成する全ての仮想ネットワークアダプターに対し、「高度な設定」画面の「NICチーミング」で「このネットワークアダプターがゲストオペレーティングシステムで作成されたチームに参加できるようにする」のチェックボックスをオンにする必要があります(画面17)。
本設定はデフォルトでは無効になっているため、LBFOを構成する場合は必ず有効に変更してください。
画面17の「NICチーミング」の項に、画面16で発生したような事象が起きる可能性があることも記載されており、ゲストOSでLBFOを構成する場合には必須の設定となっています。
本設定を有効化した仮想マシンで、同じようにチームに参加しているネットワークアダプターが接続している仮想スイッチのアップリンクで障害を発生させましたが、他方の仮想ネットワークアダプターで通信が引き継がれてネットワーク断が発生しないことが確認できました(画面18)。
本設定をWindows PowerShellで実施する場合は、「Set-VMnetworkAdapter」コマンドレットを使用して「-AllowTeaming」オプションを使用して「On」と設定します。
仮想マシンに接続した仮想ネットワークアダプターをゲストOS上で見た場合、複数の仮想ネットワークアダプターが接続されていると、どのネットワークアダプターがどの仮想スイッチに接続されているか分からなくなることが往々にしてあります。
唯一の識別子がMACアドレスになりますが、MACアドレスであっても見間違えなどが発生してオペレーションミスを引き起こす可能性を秘めています。
そうしたときのために、仮想ネットワークアダプターの名前をゲストOS上から確認できる設定が、この「デバイスの名前付け」になります。
設定自体は対象の仮想ネットワークアダプターの「高度な構成」画面から「デバイスの名前付けを有効にする」にチェックを入れるだけで完了します(画面19)。
この設定がゲストOS上のどこに反映されるかというと、ゲストOS上のネットワークアダプターのプロパティ値になります。ネットワークアダプターの「Hyper-V Network Adapter Name」というプロパティの値に、仮想ネットワークアダプターの名前が反映されます(画面20)。
仮想ネットワークアダプター名が分かりやすければ、ゲストOSからも容易に識別が可能となり、オペレーションミスの可能性を低減できます。
気を付けなければならないのが、仮想ネットワークアダプターの名前がデフォルトでは、全て「ネットワーク アダプター」となってしまい見分けがつかない点です。
ですので、仮想ネットワークアダプターの名前は分かりやすいものに変更した方がよいでしょう。仮想ネットワークアダプターの名前変更については、別連載「Windows PowerShell基本Tips」の第139回「Rename-VMNetworkAdapter」コマンドレットで紹介していますので、参考にしてください。
本設定もWindows PowerShellの「Set-VMnetworkAdapter」コマンドレットの「-DeviceNaming」オプションで設定可能です。
今回は仮想ネットワークアダプターの「高度な設定」画面で設定可能なセキュリティ機能やその他の機能について見てきました。次回はHyper-V仮想スイッチが提供する大きな機能であるネットワーク仮想化について見ていきます。
株式会社ネットワールド所属。Microsoft MVP for Cloud and Datacenter Management(2012-2025)。現業の傍ら、コミュニティーイベントでの登壇や著作にてMicrosoftテクノロジーに関する技術情報の発信、共有を続けている。ネットワークやハードウェアといった物理層に近いところが大好きな、昔ながらのインフラ屋さん。得意技はケーブル整線。近著は『詳解! Windows Server仮想ネットワーク』(日経BP社)。
Copyright © ITmedia, Inc. All Rights Reserved.