2016年2月7日日曜日

NSX for vSphereのVXLANの通信をWiresharkで見てみる

さて、VXLANの通信は、UDPでカプセル化される。カプセル化とカプセルを解く作業は、VTEPといわれる、ESXiごとに展開されるカーネルモジュールで行われるというお話をしました。

では、以下のような環境で、実際に仮想マシン同士の通信を見てみましょう。

この環境下で、VM1からVM2にPINGを投げてみましょう。
尚、VM1とVM2は、VNIが異なっており、DLRを別途用意し、ルーティングが正常に行われる環境下です。また、レプリケーションモードはユニキャストで設定されています。

実際にDataPlainである、VXLAN通信が流れる物理スイッチにミラーポートを設定して、Wiresharkを利用して、パケットをのぞいてみましょう。
(図で言うと紫色のラインの部分で流れる通信を見ることになります)


実際の仮想マシンのIPは、「172.16.1.11」と「172.16.0.12」であるにもかかわらず、Wiresharkでみると、通信は「10.0.0.1」と「10.0.0.2」となっています。

図を見るとわかるとおり「10.0.0.X」は、ESXiに搭載されたVTEPが保有しているIPアドレスとなります。そのため、この通信はUDPでカプセル化されたVXLANの通信であることがわかります。

また、Infoのところを見るとわかるように、宛先は「8472」になっています。これも、NSX for vSphereが、IANAに登録される前のドラフト時代のポートである8472をVXLANの通信として利用することがわかります。

ここでわかることは、VXLANの通信は、物理ネットワークの層から見ると全部カプセル化されていますので、デバッグが難しいと言うことです。仮想マシンが何の通信をしているかはこれだけではわかりません。

ただし、前のお話の通りVXLANは、IPSECのような暗号化はしておらず、単純にL2フレームを包んでUDPパケットに変換をしているだけです。では、VXLANのヘッダーを外せば元のパケットの中身が見られるのではと想像できます。

このヘッダーを外す機能は、Wiresharkに機能として搭載されています。
その機能をご紹介します。

1.まずは、Wiresharkの「分析」メニューから「...としてデコード」を選択します。


2.「+」マークをクリックします。


3.行が追加されますので、以下の通りに設定をします。
  • フィールドに「UDP Port」
  • 値に「8472」
  • 現在に「VXLAN」
 を選択し、OKをクリックします。


4.するとVXLANヘッダーが外され、仮想マシン間の通信パケットが表示されます。
(図で言うと、緑の矢印で書かれた仮想マシン間の通信になります。)
この場合、「172.16.1.11」と「172.16.0.12」の仮想マシン間でICMPで、PINGのリクエストと応答が行われていることがわかります。



手順は簡単ですし、これでNSX for vSphereを利用した際の、VXLANトラブルシュート行う場合に非常に便利な手法ですので、押さえておくとよいかと思います。






0 件のコメント:

コメントを投稿