GENEVE と NVGRE:オーバーレイカプセル化の比較
VXLANの固定ヘッダで詰まる場面の打開策が腑に落ちる。可変長TLVでメタデータを運ぶGENEVEの拡張性、GREを土台にしたNVGREとの設計差、SDNコントローラとの連携までを原理から押さえられる。
- 1.GENEVE(RFC 8926)はVXLANと同じL2 over L3だが、ヘッダに可変長TLVのオプション領域を持ち、トンネル種別をProtocol Typeで示すことでL2に限らず任意ペイロードを運べる。UDP宛先ポートは6081。
- 2.NVGRE(RFC 7637)はUDPではなくGREで包み、GREのKeyフィールドの下位24ビットをVSID(仮想サブネットID)に流用する。固定ヘッダで拡張余地がなく、UDPポートが無いためECMP分散にはFlowIDの工夫が要る。
- 3.GENEVEのTLVはSDNコントローラ(OVN/NSX等)がメタデータをデータプレーンに注入する受け皿になる。VNI/VSIDはどれも24ビットでセグメント数は同等だが、拡張性とSDN親和性でGENEVEが新規採用の主流。
VXLAN の固定ヘッダが抱える限界
VXLAN(/network/vxlan-overlay/)は、イーサネットフレームをUDPで包んでL3ファブリック上に論理L2を重ねる、オーバーレイの定番です。しかしそのヘッダは8バイト固定で、中身は実質24ビットのVNI(VXLAN Network Identifier)だけ。残りはフラグと予約領域で、カプセル化の途中で「VNI以外の情報」を運ぶ余地がありません。
これが問題になるのは、論理ネットワークの識別だけでは足りなくなる現代のSDN環境です。たとえば「このパケットはどのファイアウォール規則を通過済みか」「どのテナントのどのセキュリティグループに属するか」「パケットの色付け(QoSメタデータ)はどうか」といった情報を、トンネルの入口で付与し出口で読み取りたい。VXLANにはその器がなく、ベンダーは予約ビットを独自解釈で使うしかありませんでした。結果として方言が乱立し、相互運用が崩れます。
カプセル化そのものの構造は /network/protocol-encapsulation/ の階層封入の延長で、各層が自分のヘッダを前置していく点は変わりません。違いは「将来の用途のために、ヘッダ自身が拡張可能か」です。VXLANは拡張不能な固定封筒、GENEVEは中に仕切りを足せる可変封筒、と捉えると差が明確になります。
GENEVE:可変長 TLV でメタデータを運ぶ
GENEVE(Generic Network Virtualization Encapsulation, RFC 8926)は、この拡張性の問題を正面から解いた設計です。外側の封入順は 外側イーサネット → 外側IP → UDP → GENEVEヘッダ → 内側フレーム でVXLANと同型ですが、UDP宛先ポートは 6081(IANA割り当て)で、GENEVEヘッダの後半に 可変長のオプション領域 を持つ点が決定的に違います。
[外側イーサネット] 宛先MAC | 送信元MAC | EtherType
[外側IP] 送信元IP=送信トンネル端 | 宛先IP=受信トンネル端
[UDP] 送信元ポート=ハッシュ値 | 宛先ポート=6081
[GENEVEヘッダ(8B+可変)]
Ver(2bit) | Opt Len(6bit) | O | C | 予約
Protocol Type(16bit, 例 0x6558=Ethernet)
VNI(24bit) | 予約(8bit)
--- 可変長オプション(TLV列, Opt Len×4バイト) ---
[Opt Class | Type | Length | Variable Data] を必要な数だけ並べる
[内側フレーム] Protocol Typeで示した中身(イーサ/IP/...)
ヘッダの要点は3つです。第一に Protocol Type で内側ペイロードの種類を明示するため、L2フレームに限らずIPパケットなど任意の中身を運べます(VXLANは内側が常にイーサネット前提)。第二に Opt Len が示す長さだけ TLV(Type-Length-Value)形式のオプション が並び、各TLVは Option Class(ベンダーや用途の名前空間)と Type、長さ、データから成ります。第三に Cビット(Critical) が「このTLVを理解できない機器は破棄せよ」を示し、未知の拡張を安全に扱う規約を与えます。
TLVの強みは「未知のオプションを長さ情報だけで読み飛ばせる」ことです。Length を見ればそのTLVのバイト数が分かるので、解釈できないオプションは中身を無視して次のTLVへ進める。これにより、新しいメタデータ種別を後から追加してもヘッダ全体の構造を壊さず、世代の違う機器が混在しても破綻しません。BGPの可変長パスアトリビュートと同じ「拡張可能なTLV」設計思想です。
NVGRE:GRE を土台にした別系統
NVGRE(Network Virtualization using GRE, RFC 7637)は、まったく別の出自を持つオーバーレイです。UDPで包むVXLAN/GENEVEと違い、GRE(Generic Routing Encapsulation) を土台にします。GREヘッダの Key フィールドを24ビットの VSID(Virtual Subnet ID)と8ビットの FlowID に分割 して流用するのが特徴です。
[外側イーサネット]
[外側IP] Protocol=47 (GRE)
[GREヘッダ] K=1(Key存在) | Protocol Type=0x6558(Ethernet)
Key = VSID(24bit) | FlowID(8bit)
[内側フレーム] 元のイーサネットフレーム
NVGREの設計上の弱点は2つあります。ひとつは 拡張領域が無い こと。GREのKeyは固定32ビットで、GENEVEのようなTLVを足せません。もうひとつは L4ポートが存在しない ことです。GREは外側IPのプロトコル番号47で直接運ばれるため、UDP/TCPの送信元/宛先ポートがありません。中継網のECMP(/network/ecmp-flow-hashing/)は通常5タプル(IPとポート)でフローを分散しますが、ポートが無いNVGREでは外側IPの2タプルしか散らす材料がなく、同一VTEP間の全トラフィックが1経路に集中 しがちです。NVGREはこれを補うためKey内に8ビットのFlowIDを置き、中継機器がそれをハッシュ材料に使えるよう規定しましたが、対応する機器が限られ普及の足かせになりました。
三方式の構造比較
| 観点 | VXLAN | GENEVE | NVGRE |
|---|---|---|---|
| RFC | 7348 | 8926 | 7637 |
| 外側トランスポート | UDP(4789) | UDP(6081) | GRE(IPプロトコル47) |
| セグメント識別子 | VNI 24bit | VNI 24bit | VSID 24bit |
| 論理セグメント数 | 約1677万 | 約1677万 | 約1677万 |
| 拡張メタデータ | なし(固定8B) | 可変長TLV(あり) | なし(GRE Key固定) |
| 内側ペイロード | イーサのみ | Protocol Typeで任意 | イーサのみ |
| ECMP分散の容易さ | UDP送信元ポートで容易 | UDP送信元ポートで容易 | ポート無し→FlowID頼み |
セグメント数はどれも24ビットで同等(2^24、約1677万)です。差が出るのは 拡張性・ペイロードの自由度・経路分散 の3点で、いずれもGENEVEが優位、NVGREが不利という構図になります。NVGREはGRE資産との親和性を狙いましたが、ポート不在によるECMPの不利が実務で重く、現在は新規採用がほぼ途絶えています。
カプセル化である以上、外側ヘッダ分のオーバーヘッドはどの方式でも発生します。VXLAN/GENEVE(オプション無し)はIPv4で約50バイト、GENEVEはTLVを足すほど増え、NVGREはUDP8バイトが無い分わずかに小さい程度です。テナントが1500バイトを送れば外側は1550バイト超に膨れ、途中で破棄やフラグメントを招きます。アンダーレイをジャンボフレーム化してこの増分を吸収するのは三方式共通の定石で、MTUの基礎は /network/mtu/ を参照してください。
SDN コントローラとの連携
GENEVEが新規採用の主流になった最大の理由は、SDNコントローラとの親和性 です。Open vSwitch系のOVNや、VMware NSXといったコントローラは、トンネル端(VTEPに相当)にフローテーブルを配り、データプレーンの振る舞いを集中制御します。このとき「パケットに付随する論理メタデータ」をトンネルをまたいで運べるかどうかが、機能の幅を直接左右します。
GENEVEのTLVは、まさにこのメタデータの受け皿です。たとえばOVNは、論理ポートの識別子や、入口で評価済みのACL状態などをGENEVEオプションに載せ、出口側がそれを読んでパイプラインの続きを実行します。これにより 「分散したスイッチ群を、あたかも1台の論理スイッチのように」 振る舞わせられます。VXLANやNVGREのように識別子しか運べないと、こうしたメタデータは別の手段(パケット外の制御チャネルや、IPヘッダの一部流用)で補うしかなく、設計が歪みます。
GENEVEのTLVが運ぶのは「このパケットに付随するメタデータ」であり、「どのMACがどのトンネル端にいるか」という到達情報とは別物です。後者はVXLANと同じくEVPN(MP-BGP)で配るのが一般的で、BGPがL2到達性を広告する枠組みは /network/vxlan-overlay/ のEVPNの節と共通です。つまり「セグメント識別とメタデータはデータプレーンのヘッダで、MAC到達情報はコントロールプレーンのBGPで」と役割が分かれます。
「GENEVEのUDPポートと拡張機構は」→ 宛先6081、可変長TLVオプション。「NVGREの土台とセグメントIDは」→ GRE(プロトコル47)、GRE KeyのVSID 24ビット。「NVGREの弱点は」→ ポート不在でECMP分散が苦手(FlowIDで補う)、拡張領域が無い。「GENEVEがSDNで好まれる理由は」→ TLVで論理メタデータをトンネル越しに運べる。「セグメント数の差は」→ 三方式とも24ビットで同等、差は拡張性とペイロード自由度。この5点を構造で言えれば上級。
まとめ
GENEVEとNVGREは、VXLANの「固定ヘッダで識別子しか運べない」限界に対する2つの異なる回答です。GENEVE(RFC 8926, UDP 6081)は、可変長TLVのオプション領域とProtocol Typeを備え、任意のペイロードと将来拡張可能なメタデータをトンネル越しに運べる「拡張可能な封筒」です。NVGRE(RFC 7637)はGREを土台にKeyの24ビットをVSIDに流用しますが、拡張領域が無く、L4ポートが無いためECMPの経路分散に弱く、普及は伸び悩みました。セグメント数はどれも24ビットで横並びで、本質的な差は 拡張性・ペイロードの自由度・経路分散 にあります。SDNコントローラがメタデータをデータプレーンへ注入する受け皿としてTLVが効くため、OVNやNSXを含む新規設計ではGENEVEが事実上の標準です。「識別子だけならVXLAN、拡張するならGENEVE、GRE資産前提の特殊解がNVGRE」——この三分法で捉えれば、オーバーレイ方式の選択は一本の筋で読み解けます。
ネットワーク Article
GENEVE と NVGRE:オーバーレイカプセル化の比較を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
GENEVE
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 6
導入後に効く点
NVGRE(RFC 7637)はUDPではなくGREで包み、GREのKeyフィールドの下位24ビットをVSID(仮想サブネットID)に流用する。固定ヘッダで拡張余地がなく、UDPポートが無いためECMP分散にはFlowIDの工夫が要る。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 6
判断チェックリスト
- 自社の用途が「GENEVE / NVGRE」に近いか確認する。
- 強みである「GENEVE(RFC 8926)はVXLANと同じL2 over L3だが、ヘッダに可変長TLVのオプション領域を持ち、トンネル種別をProtocol Typeで示すことでL2に限らず任意ペイロードを運べる。UDP宛先ポートは6081。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。