Metonymical Deflection

ゆるく日々のコト・たまにITインフラ

Windows10 VLAN aware VMs

Windows10上の仮想マシンにVLAN Tagを付けて外部NWと疎通させる方法を記載します。
補足として、仮想マシンで付加したVLAN TagがIntelNICで剥がされないようにするための方法となります。

1.構成

1-1.環境
OS                               : Windows10pro Ver:1809 Build:17763.503
NIC                              : Intel I350, I219-V(OnboardNIC)
Driver                           : Intel PROSet 23.5.2
VMWare              : VMware(R) Workstation 15 Pro 15.1.0 build-13591040  
1-2.構成概要

f:id:metonymical:20190520092200p:plain
(1)でレジストリをいじることによって、Guest9で付加したVLAN Tagが物理スイッチまで剥がされないようになります。
これにより、Guest9上でCumulusVXやNexus9000v、OpenStack Netronなどを稼働させ、外部NWとの間でTag付きEtherフレームのやり取りができるようになります。
今回は例として、VMWare上で仮想マシンを稼働させていますが、当然、GNS3上の仮想NW機器にも応用できると考えています。

ちなみに、(2)については、過去記事
Windows10 VLAN Interface設定 - Metonymical Deflection
を参照してください。

2.NICの詳細設定

NICのプロパティで802.1qを無効化します。
以下の画面で構成をクリックします。
VMWare Bridge Protocolにチェックが入っていることを確認してください。*1
f:id:metonymical:20190520093220p:plain

詳細設定タブをクリックします。
パケット優先度とVLANのプロパティから、パケット優先度とVLAN無効を選択し、OKをクリックします。
f:id:metonymical:20190520094142p:plain

次に左の画面でドライバ>ドライバーの詳細をクリックします。
右の画面が表示されます。
ドライバ名が「e1r」から始まっていることを確認しておいてください。*2
f:id:metonymical:20190520093706p:plain

3.レジストリの設定

この設定により、IntelNIC上でVLAN Tagが剥がされずに仮想マシンと物理スイッチ間でTag付きEtherフレームのやり取りができるようになります。
レジストリエディタを起動してください。*3
以下のパスに移動してください。

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\00nn

以下の画面となります。
00nnの「nn」は、下図のようにNICごとに割り当てられています。
このため、nnを識別するためには、中身を一つづつ参照してください。そして、DriverDescにNIC名が表示されていますので、その名前で該当するNICを判断します。下図の例では「0002」となります。
f:id:metonymical:20190520094818p:plain

「0002」上で右クリック>新規>文字列(dword)をクリックします。
名前(レジストリキー)は以下に従ってください。
今回の例では、ドライバ名が「e1r」から始まっているため、「MonitorMode」となります。
dwordのデータ(値)は「1」としてください。

Adapter Driver					Registry Key
e1g, e1e, e1y					MonitorModeEnabled
e1c, e1d, e1k, e1q, e1r, ixe, ixn, ixt		MonitorMode

設定が完了したら、Win10を再起動してください。

4.仮想ネットワークエディタの設定

VMWareの仮想ネットワークエディタを起動します。
設定の変更をクリックして編集モードに移行します。
ネットワークの追加をクリックし、任意のVMnet(ここでは、VMnet9)を選択します。
下図のようにブリッジ先を前項で設定した物理NICを選択します。
f:id:metonymical:20190520100209p:plain

5.補足

構成概要図より、

  • (1)ゲストOS(仮想マシン)側でVLAN Tagを付与したい場合に使用
  • (2)ホストOS側でVLAN Tagを付与したい場合に使用

といった使い分けができるようになります。

以上です。

6.最後に

以下のサイトを参考にさせて頂きました。
Wireshark + Intel NIC で tagVLAN の VLAN-ID を含めてキャプチャする方法 - ..たれろぐ..
My Sniffer Isn't Seeing VLAN, 802.1q, or QoS Tagged Frames

元々、VMWare上でOpenStack Neutronのお勉強をしていたのですが、外部NWとの疎通時にVLAN Tagが使えず困り果てていたため、今回の記事をアップしました。
DL360にLinux入れてやれば造作もない話なのですが、最近メインPCのリプレースに伴いMem64GBにしたので、Win10+VMWare上でもそこそこな構成は組めるようになったため、ちょっと詳しく調べました。

私個人的にですが、この辺のノウハウのことを「足回りの技術」などと呼んでおり、私の中で、この足回りの技術は極めて重要な技術だと考えています。
なぜなら、足回りをしっかり理解しておかないと、自分のやりたい構成が組めなかったり、本来やらなければならない検証などができないからです。
加えて、ネットワークエンジニアとしては外部NWとの接続や疎通が必須となってくるため、ブリッジ(L2レベルの)技術は、かなり重要だなと思っています。

しかしながら、この辺の詳細について解説されているサイトが少ないと個人的には感じているため、このサイトではLinuxに加えてWindowsについても深掘りし過ぎたいなと考えています。

ちなみに、VMWareではなく、Hyper-Vの仮想スイッチマネージャを使うと、レジストリをいじらなくてもできるっぽいので、時間があれば検証してみようかなと思っています。

*1:ちなみに、画面に表示されているNpcapは、WiresharkでPcapするためのものなので気にしないでください。また、IPv4IPv6はチェックが入っていてもいなくても、レイヤが異なるため今回の設定には関係ありません。

*2:後述するレジストリをいじる際、レジストリの名前で使用します。

*3:お決まりですが、レジストリの編集は自己責任でお願いします。