コンテンツにスキップ

VXLAN / VNET / EVPN の概要

SONiC の overlay 周りは、「VXLAN」「VNET」「EVPN」という 3 つの単語がほぼ同じ文脈で使われるのに役割が違うため、最初に分けて理解しないと混乱します。VXLAN は data plane の encapsulation、VNET は SONiC 内部の設定オブジェクト、EVPN はその上に乗る control plane です。

SONiC overlay は何の問題を解決するか

データセンタや CSP は、物理ネットワークの上に テナントごとの仮想ネットワーク を載せたい、L3 fabric の上で L2 が必要なホストを越境させたい、という要件を抱えます。SONiC overlay はこれを以下の道具で解きます。

  • VXLAN: L2 / L3 トラフィックを UDP/IP に encapsulate して L3 fabric 上を運ぶ。
  • VNET: SONiC が tenant / VRF / VNI を 1 つのオブジェクトとして扱うための設定単位。controller 直書きにも EVPN 学習にも使える。
  • EVPN: BGP の AFI として MAC / IP / prefix の到達情報を配り、VXLAN tunnel を自動的に張る。

「VXLAN を有効化する」と言うとき、実際には VTEP を作るだけの場合、VLAN-VNI を作る場合、VNET route を作る場合、EVPN で経路を受ける場合があります。最初にどの層を触っているかを分けると、設定の迷子になりにくくなります。

SONiC の中での位置

担当
Management plane config vxlan, config vnet, FRR vty, VXLAN_* / VNET_* CONFIG_DB
Control plane FRR bgpd (l2vpn evpn AFI)、vxlanmgrd、VNetOrch、VNetRouteOrch
Data plane orchagent (TunnelOrch / VxlanTunnelOrch)、syncdSAI tunnel / bridge-port

VXLAN は data plane、EVPN は control plane、VNET は management/control の境界にいる、という整理が役に立ちます。

まず分けて考える

用語 読み方 SONiC での主な入口
VXLAN UDP/IP 上に VNI を載せる data plane VXLAN_TUNNEL, VXLAN_TUNNEL_MAP, config vxlan
VNET VXLAN tunnel と VNI を使う仮想ネットワーク VNET, VNET_ROUTE, VNET_ROUTE_TUNNEL, config vnet
EVPN BGP で overlay 到達性を配る control plane FRR BGP-EVPN, VXLAN_EVPN_NVO, show evpn ...
VTEP VXLAN を終端する tunnel endpoint VXLAN_TUNNEL.src_ip
VNI tenant / segment を識別する 24 bit ID VLAN-VNI map、VRF-VNI map、VNET.vni
NVO Network Virtualization Overlay。EVPN が VXLAN を使うことを宣言する設定 VXLAN_EVPN_NVO
L2VNI / L3VNI MAC を運ぶ VNI / prefix を運ぶ VNI EVPN Type-2 / Type-5 で対応

L2 overlay と L3 overlay

L2 overlay は VLAN と VNI を対応させ、remote MAC を VXLAN の向こうへ送ります。SONiC では VXLAN_TUNNEL_MAP が VLAN-VNI 対応を持ち、EVPN を使う場合は Type-2 route が MAC/IP 到達性を配ります。

L3 overlay は VRF / VNET と VNI を対応させ、prefix を overlay nexthop へ送ります。EVPN では Type-5 route が IP prefix を配り、VNET route では VNET_ROUTE_TUNNEL_TABLE に endpoint と prefix が入ります。

flowchart LR
  HostA[Host / VLAN / VRF] --> LeafA[Leaf A VTEP]
  LeafA -. EVPN Type-2: MAC/IP .-> LeafB[Leaf B VTEP]
  LeafA -. EVPN Type-5: Prefix .-> LeafB
  LeafA == VXLAN packet<br/>outer IP + UDP + VNI ==> LeafB
  LeafB --> HostB[Remote Host / Prefix]

典型的な使用シーン

シーン 1: EVPN-VXLAN multi-tenant fabric

flowchart LR
  subgraph Tenant_A
    HA1[Host A1<br/>VRF-A] --- L1[Leaf 1]
    HA2[Host A2<br/>VRF-A] --- L2[Leaf 2]
  end
  subgraph Tenant_B
    HB1[Host B1<br/>VRF-B] --- L1
    HB2[Host B2<br/>VRF-B] --- L2
  end
  L1 ===|VXLAN: VNI-A / VNI-B<br/>EVPN Type-2/5| L2

各 Leaf が VTEP になり、VRF-A は VNI-A、VRF-B は VNI-B にマップされます。EVPN がない場合は controller が VNET / VNET_ROUTE_TUNNEL を直接書きます(次のシーン)。

シーン 2: SDN controller 直書きの VNET (DASH / SmartSwitch 系)

flowchart LR
  Ctrl[SDN Controller] -->|gNMI/CONFIG_DB| VNet[(VNET / VNET_ROUTE / VNET_ROUTE_TUNNEL)]
  VNet --> Orch[VNetOrch / VNetRouteOrch]
  Orch --> ASIC[(ASIC_DB)]

FRR EVPN を介さず、controller が直接 VNET route を書く構成です。EVPN を使わないことで control plane の挙動が単純になり、tenant 規模を集中管理しやすくなります。

VNET は EVPN の別名ではない

VNET は SONiC の configuration / orchestration 単位です。VNETvxlan_tunnelvni を持ち、VNET_ROUTE は local / subnet route、VNET_ROUTE_TUNNEL は remote endpoint へ encapsulate する route を表します。EVPN がある場合は control plane からこれらに相当する情報が供給されますが、VNET 自体は EVPN に限定されません。

このため、コントローラが直接 VNET route を書く設計と、FRR EVPN が Type-2 / Type-5 を受けて SONiC 側へ反映する設計は、同じ VXLAN data plane に収束しても、運用上の入口が異なります。

似た / 混同しやすい機能との違い

比較対象 違い
NVGRE encapsulation が GRE + VSID。SONiC NVGRE HLD は decap 受信側中心で、EVPN control plane を持たない
Subnet decap VLAN subnet 宛 IPinIP を T0 が decap して Netscan へ戻す platform 機能。tenant overlay ではない
GENEVE SONiC では encapsulation 対象として一般には扱っていない
MPLS L3VPN control plane に BGP-VPNv4/v6、data plane に MPLS label を使う。SONiC では限定的
VLAN trunk のみ L2 を物理リンクで運ぶ。fabric を越えられない

NVGRE は VXLAN と同じ「L2 over L3」系の overlay ですが、カプセル化に GRE と VSID を使います。詳細は NVGRE トンネル を参照してください。

Subnet decap は overlay tenant を作る機能ではなく、VLAN subnet 宛の IPinIP probe を T0 が decap して Netscan へ戻す platform 機能です。tunnel decap object を使うため同じ章で触れますが、VXLAN/VNET の data plane とは目的が違います。

読み終わったあとにできるようになること

  • 「VXLAN を設定する」という曖昧な要求を、VTEP / VLAN-VNI / VNET / EVPN のどの層の話かに分解できる。
  • EVPN を使う構成と controller 直書きの構成の使い分けがイメージできる。
  • NVGRE や subnet decap が overlay tenant とは別の話だと区別できる。
  • BGP-EVPN のセッションがあるのに data plane が来ない問題を「FRR EVPN」「VxlanTunnelOrch」「SAI tunnel」のどこで止まったかで切れる。

CONFIG_DB の主要テーブル

VXLAN / VNET / EVPN まわりで把握しておくべき CONFIG_DB は次のとおりです。

Table 用途
VXLAN_TUNNEL VTEP(src IP)と peer 種別を定義
VXLAN_TUNNEL_MAP VLAN ↔ VNI / VRF ↔ VNI 対応
VXLAN_EVPN_NVO EVPN を VXLAN 上で動かす宣言(FRR EVPN 接続点)
VNET VRF + VNI + vxlan_tunnel をまとめた SONiC 内オブジェクト
VNET_ROUTE / VNET_ROUTE_TUNNEL VNET の local / remote endpoint route
EVPN_NVO / EVPN_RT_TBL EVPN 系の補助 table(FRR との接続側)

vxlanmgrd は CONFIG_DB と Linux netlink を仲立ちし、VNetOrch / VxlanTunnelOrch / TunnelDecapOrch が SAI tunnel / bridge port を作ります。EVPN を使う構成では FRR 側で受けた Type-2 / Type-5 が APPL_DB / VNET_ROUTE_TUNNEL に降りてきます。

EVPN と VNET 直書きのデータパスは同じ

flowchart LR
  subgraph Control_Plane
    FRR[FRR bgpd<br/>l2vpn evpn] -.->|Type-2 / Type-5| APPL[(APPL_DB)]
    Ctrl[SDN controller] -->|CONFIG_DB 直書き| CFG[(CONFIG_DB.VNET_*)]
    CFG --> APPL
  end
  APPL --> Orch[VxlanTunnelOrch /<br/>VNetOrch /<br/>VNetRouteOrch]
  Orch --> ASIC[(ASIC_DB)]
  ASIC --> SAI[SAI tunnel / bridge-port]

control plane は EVPN(FRR 経路)か controller 直書きの 2 系統に分かれますが、SAI tunnel / bridge port を作る orchagent 側はほぼ共通です。問題切り分けでは「EVPN セッションは張れているか」「VNET object は CONFIG_DB に居るか」「APPL_DB の TUNNEL/VNET_ROUTE まで来ているか」「ASIC_DB に tunnel object が居るか」を順に追います。

EVPN Type と SONiC 側の受け口

Type 意味 SONiC で書き込まれる先
Type-2 MAC / MAC+IP 到達性 bridge-port / FDB / NEIGH / VNET_ROUTE_TUNNEL(L2 端末向け)
Type-3 inclusive multicast tunnel endpoint head-end replication 用 tunnel member
Type-5 IP prefix VNET_ROUTE_TUNNEL / VRF route

Type-2 が来ても bridge-port が作られていない場合は vlan-vni map が抜けていることが多く、Type-5 が来ても VNET_ROUTE_TUNNEL に乗らない場合は VRF-VNI mapnvo の設定漏れが原因になりがちです。

SmartSwitch / DASH の VNET との関係

DASH / SmartSwitch の SDN data path は VNET スキーマを再利用し、ENI 単位の policy(ACL / mapping)と組み合わせて DPU 上に展開します。EVPN を介さず controller が VNET_ROUTE 系を直書きする使い方は、SmartSwitch ENI と相性が良い構成です。詳細は 13 章 DASH / SmartSwitch を参照してください。

関連ページ

この章の前提知識

この章を読み進める前に、次の章を押さえておくと迷子になりにくい。