理系学生日記

おまえはいつまで学生気分なのか

Layer2 over Layer3 たる VXLAN

VXLAN というのは、その名前 Virtual eXtensible Local Area Network が指す通り、VLAN (Virtual Local Area Network) を拡張する技術です。この VXLAN について、RFC7348 をはじめとする資料を読み漁ったので、その内容をまとめてみました。

VXLAN の必要性

VXLAN の必要性は、現在の VLAN 技術のスケーラビリティ不足の裏返しです。

以下のような理由から、現在、VLAN を使用して L2 ネットワークを分離していく流れが高まっています。

  1. 仮想化環境を前提とすると、物理サーバの上で多数の VM が動作することになり、いわゆるトップオブラック(ToR) スイッチの MAC アドレステーブルのエントリ数が枯渇する
  2. クラウドをマルチテナントで利用するといった場合は、同一の物理ネットワーク上で個々のテナント用の論理ネットワークを構成する必要性が強くなる

一方 VLANは、その仕様上、VLAN を識別する VLAN ID が 12 bit であるが故に、4094 *1 以上の数が構成できないという制約が存在しています。 4094 個もブロードキャストドメインが定義できれば良いじゃんという見方も確かにありはするのですが、仮想化がここまで進んでいる現在、社内クラウドを持つような企業の基盤、あるいはパブリッククラウドプロバイダといったマルチテナントを収容するクラウド基盤としては「4094 個しか」構成できないという VLAN の仕様は現実的な制約として効いてきます。

VXLAN

このような必要性を前にして、VLAN を「延伸」するための技術として VXLAN が生まれました。 VXLAN は、既存のネットワークインフラを前提とした、L3 の上で動作する L2 のオーバレイネットワークになります。言い換えると、同じ VXLAN のセグメント上に存在するサーバ同士は、たとえ異なる L3 ネットワーク上にいようとも、「あたかも同じ VLAN 上に存在するかのように」通信が可能になります。

これを表現するのが上の図です。VM#1、VM#2 が所属する Subnet A と、VM#3、VM#4 が所属する Subnet B は異なる L3 ネットワークですが、VM#1 と VM#3、VM#2 と VM#4 はそれぞれ「同一の VXLAN セグメント」に存在するため、あたかも同一 VLAN 上にいるかのように通信が可能です。また、VM#1 と VM#4、VM#2 と VM#3 は、それぞれ「異なる VXLAN セグメント」に存在するノードであるため、通信ができません。おもしろいですね。

これを実現しているのは「VXLAN の終端である端末(VTEP: VXLAN Tunnel End Point) による、Ethernet フレームのカプセル化」です。 ちょっと図が小さくて恐縮ですが、以下の VXLAN のパケットを参照ください。 オリジナルの L2 フレーム (ここに VLAN ID も格納される) に対し以下の順でヘッダが付与されています。

  1. VXLAN Header
  2. UDP Header
  3. IP Header
  4. Mac Header

要するに、VTEP は、オリジナルの Ethernet フレームにVXLAN のヘッダを付与し、さらにそれを UDP のパケットのペイロードにします。このようにして、元々の Ethernet フレームが、UDP パケットとしてカプセル化され、L3 の壁を越えるわけです。L3 の壁を越えた UDP パケットは、越えた先にある VTEP によってカプセル化を解かれ、オリジナルの Ethernet フレームとして転送されるということになります。VTEP の先にいるサーバは、VXLAN が使われていることなど知らず、通常通り Ethernet フレームを送受していれば問題ないというところが良いですね。たぶん。

おやおや、それじゃぁ VTEP の先にいるサーバは、VXLAN を意識することなく、L3 の先にいるサーバに対して ARP 要求だったり ARP 応答だったりを出しまくるわけですが、これはどうやって実現しているんでしょう。このあたりは同じ VXLAN セグメントにいる VTEP 同士が、同一の IP マルチキャストグループを構成することで解決しています。 このあたりは文章で説明するよりか、http://blogs.cisco.com/perspectives/a-summary-of-cisco-vxlan-control-planes-multicast-unicast-mp-bgp-evpn-2 を図入りで見る方が分かりやすいので、そちらを参照しましょう。そうしましょう。

*1:VLAN ID 0 と 4095 が特別扱いされるので、4096 ではない