どうも、Tです。
vSphereのNested環境を作成するときの仮想スイッチの設定で忘れぬように覚書です。
目次
環境
- 物理:VMware ESXi, 7.0.2, 17867351
- Netsted:VMware ESXi, 7.0.2, 17867351
上図のように「物理のESXiホスト-仮想のESXiホスト-仮想マシン」のようなNested(ESXiの上に仮想のESXiを構築する)構成をとっているものとします。仮想スイッチは、標準仮想スイッチ(vSS)を想定しています。
ここでは「物理ESXiを物理ホスト」「仮想マシンのESXiホストをNestedホスト」と呼ぶようにします。
問題・原因
この時、vSphereの外側のノートPCや物理ホストの仮想マシンたちから、Nestedホスト上の仮想マシンへの通信経路を表すと上図のようになります。
ここで意識するのは、物理ホストの仮想スイッチとNestedホストの仮想スイッチを経由してはじめてNested上の仮想マシンと通信できるということです。
ここで発生する問題は、vSphereの仮想スイッチは、ネットワークセキュリティを高めるため、有効なMACアドレス情報を持っておりフィルタリングを行っております。通常、ホスト上にある仮想マシンのvNICのMACアドレス達が有効なMACアドレスとして扱われます。
図の通り、物理ホストの仮想スイッチは、Nestedホスト上の仮想マシンのMACアドレスを知らないため有効なMACアドレスとはならずに通信がDROPされてしまいます。
回避方法
vSphereの設定により下記2つの方法があります。セキュリティを確保しつつネットワーク通信量の増加を抑えることを考えると方法2のほうがよいでしょう。
この設定は、物理ホストに対して行います。
方法1 Netstedホストが所属する仮想スイッチの設定を変更する
仮想スイッチの「無差別モード」「偽装転送」を「承諾」で設定します。
方法2 Netstedホストが所属する仮想マシンポートグループの設定を変更する
仮想マシンポートグループの「無差別モード」「偽装転送」を「承諾」でオーバーライド(仮想スイッチの設定を上書き設定)します。
偽装転送を承諾
偽装転送を許可することにより、有効でないMACアドレスのフレームもDROPされず仮想スイッチ(と仮想マシンポートグループ)を通過できるようになります。
原因時の図と反対になりますが、偽装転送はアウトバンドトラフィック(Netstedホストから発信のトラフィック)に対しての制御になります。
無差別モード(プロミスキャスモード)を承諾
デフォルト(無差別モード拒否)では、仮想マシンのvNIC(NestedホストのvNIC)は、そのアダプタ向けのフレームのみ受信します。しかし、今回の経路ではNestedホスト上の仮想マシン宛てのフレームのためデフォルトでは、NestedホストのvNICはフレームを受け取ることができません。
無差別モードを承諾することにより、仮想スイッチに到着したフレームすべてを仮想マシンのvNICで受け取れるようになります。
ただし、無差別モードを設定した所属する仮想マシンのvNICが受け取れるようになっているため、仮想スイッチに設定するより仮想マシンポートグループに設定したほうが影響範囲が小さくなります。
一般的にはパケットキャプチャが必要(障害のログ取得やIDSなど)な場合に、承諾するものです。
おまけ
インターネット上を見ていると今回のような構成で「MACアドレスの変更も承諾する」という手順が多く見つかります。MACアドレスの変更が拒否は、有効MACアドレスと実際のアドレスが異なる(vNICとゲストOSのMACアドレス)場合に、インバウンドトラフィック(仮想スイッチから仮想マシン)を行わないようになります。
今回の構成では、無差別モードでトラフィックは送信されるため、MACアドレスの変更は拒否でも問題ないかなと思っています。
まぁvCenter経由で仮想スイッチ作成したら、デフォルトMACアドレスは承諾されてるので、そんなに気にすることもないと思いますが・・・。
参考
まとめ
今ままでなんとなくざっくりで設定しっぱなしだったけど、検証環境を新規構築したので、詳しく調べてみた。大きくは間違ってない!・・・・と思う。