「MAC-VRF って結局なに?」QFX5120 で悩みながら整理した

サムネイル

1. はじめに

こんにちは、ITインフラ本部 インフラ部 ネットワークグループ NREチームの松野です。

Juniper の QFX5120 で EVPN-VXLAN を構築する機会がありましたが、
その中で 「MAC-VRF とは何か?」が一番モヤモヤしたポイント でした。

この記事では、次の 2 点について自分の言葉でまとめてみます。

  • なぜ自分が MAC-VRF でハマったのか
  • 最終的にどう整理したら納得したか

2. EVPN-VXLAN を設計するときのポイント

EVPN-VXLAN を設計するとき、ざっくりこんな要素を考える必要があります。

  • Underlay の構成(BGP unnumbered / iBGP / eBGP など)
  • Overlay(EVPN / VTEP / VNI)
  • MAC-VRF(EVI)の構成
  • Anycast Gateway
  • ESI(マルチホーム)
  • DCI 間接続
  • 経路制御・フィルタリング
  • 障害時の迂回方法
  • DDoS 制御値
  • BFD
  • …etc

Underlay だけでも AS 設計、フィルタ、IPv4/IPv6、iBGP/eBGP … と設計項目が膨大です。
そんな中でも、MAC-VRF の理解だけはなかなか腹落ちしない 状態が続いていました。

3. MAC-VRF に混乱した理由

まず、「なぜそんなに MAC-VRF が分かりにくかったのか?」を整理してみます。

3.1 instance-type mac-vrf を理解しないまま使っていた

今振り返ると、QFX の過去の EVPN 構築方法がどうだったのかを知らない状態で、
instance-type mac-vrf を使うことのメリットをあまり理解しないまま構築してしまったのが、最初のつまずきポイントだったと思います。

当時は、次のようなくらいの感覚で触り始めていました。

  • instance-type mac-vrfを使うと EVPN/VXLAN の設定が楽になるらしい」
  • 「QFX5120 で EVPN/VXLAN を組むときは、とりあえず mac-vrf を使えばよさそう」

EVPN/VXLAN 自体は他ベンダーで構築した経験がありましたが、そのときは主に次のような点に注目していました。

  • L2 延伸
  • Anycast Gateway
  • ESI(マルチホーム)

そのため マルチテナント構成としての EVPN を強く意識しておらず、MAC-VRF を明示的に意識していなくても特に問題になっていませんでした。

その状態で QFX5120 に触れた結果、次のような会話になっていました。

「今回は instance-type mac-vrf を使って構築するんですよ。」
「なんでですか?」
「…そういうものだから…?」

このような雰囲気だったため、「じゃあ MAC-VRF 自体は何なの?」と聞かれても、すぐには答えづらい 状況だったと思います。

3.2 MAC-VRF の概念と設定を混同していた

そこから「そもそも MAC-VRF って何なんだ?」が気になり、
MAC-VRF という単語が出てくる資料を片っ端から読み始めたのですが、ここから沼にハマりました。

  • ある資料では「MAC-VRF = EVPN 上の L2 VRF だよ」という説明
  • 別の資料では「MAC-VRF は EVI と同じようなもの」と読める表現
  • Juniper のドキュメントでは routing-instances mac-vrf の設定例
  • RFC ではもう少し抽象度の高い用語としての MAC-VRF の説明

…という具合に、文脈ごとに「MAC-VRF」という言葉の見え方がコロコロ変わるように 感じていました。

今振り返ると、おそらくどの資料も「そのドキュメントの文脈では正しいこと」を書いていたのだと思います。
ただ当時の自分は、「この資料ではこう書いてあるのに、別の資料では違うことを言っている気がする」と感じてしまっていました。
その結果、資料同士が矛盾しているように見えていた のだと思います。

さらに、頭の中では次の 2 つがきちんと分かれていませんでした。

  • 概念としての MAC-VRF
    • 「テナントごとに L2 の転送領域を分ける」という考え方です。
  • Junos の instance-type mac-vrf(routing-instance)
    • 上記の考え方を QFX5120 上で実際の設定として表現したものです。

これらが整理できておらず、全部ひとまとめに「MAC-VRF 的なもの」 として扱ってしまっていました。

本来この 2 つは次のような関係にあります。

  • RFC や設計書では「概念としての MAC-VRF」
  • QFX5120 の routing-instances mac-vrf では「それを実現するための設定オブジェクト」

このように、同じものを別レイヤから見ているだけ なのですが、当時はその切り分けが自分の中でうまくできていなかったのだと思います。

その結果、何かを読んでも次の点が曖昧なままでした。

  • これは MAC-VRF の概念の話なのか?
  • 設定の話なのか?
  • それとも EVI 周りの話なのか?

このように区別がつかない状態だったため、「MAC-VRF」という単語を見ただけでモヤモヤする 状態になっていました。

3.3 L2 と L3 が混在して混乱していた話

QFX5120 で MAC-VRF を設定する例を見ると、次のような構成になっています。

  • instance-type mac-vrf(L2 側のインスタンス)
  • その中に vlans を定義
  • 各 VLAN に l3-interface irb.xxx を紐付ける

このように MAC-VRF と IRB / L3VRF がセットで登場します。

「L2 の話をしていたはずなのに、いきなり IRB や L3VRF が出てくる」

といった見え方になるため、次のような点が曖昧になってしまいます。

  • MAC-VRF は L2 の箱の話をしているのか
  • L3VRF との連携まで含めた話をしているのか

このように理解が分かれやすく、ここでもさらに混乱してしまいました。

4. そもそも MAC-VRF とは何か

ここからが本題です。
「結局 MAC-VRF って何?」 を、なるべくシンプルに整理してみます。

4.1 いきなり一言で言うと

最初にざっくり一文でいうと、こう理解しています。

MAC-VRF は、「EVPN 上で、テナントごとに L2(MAC)の転送領域を分けるための箱」

  • この箱の中身としては、MAC アドレステーブル / BUM の範囲 / VLAN–VNI のグループ がまとまっている
  • その箱に RD / RT / EVI などの情報がひも付き、EVPN 上でどの箱なのかを識別・配布している
  • この「箱」をテナントごとに分けることで、マルチテナントな L2 ドメインを作れる

このあとで、RFC の定義や QFX5120 の実装を踏まえながら、このイメージをもう少し細かくほぐしていきます。

4.2 RFC における MAC-VRF と EVI の定義

EVPN の標準仕様である RFC 7432 では、
MAC-VRF と EVI をそれぞれ次のように定義しています。1

  • MAC-VRF

    “A Virtual Routing and Forwarding table for MAC addresses on a PE.”

  • EVI (EVPN Instance)

    “An EVPN instance spanning the PE devices participating in that EVPN.”

ここでは細かく分解しすぎず、次の 2 点だけ押さえておけば十分かなと思っています。

  • MAC-VRF = ある PE(スイッチ)の中にある、MAC アドレス用の VRF(L2 の箱)
  • EVI = その EVPN サービスを表す インスタンス名 / ID

「MAC-VRF は“箱の中身そのもの”、EVI は“その箱が属する EVPN サービスの名前”」
くらいのラフさで捉えると、だいぶ気が楽になりました。

4.3 QFX5120 では MAC-VRF をどう表現するか

次に、以下の点について整理します。

その “L2 の箱(MAC-VRF)” は、コンフィグ上では どこに現れるのか?

この疑問について、最低限の範囲で触れておきます。

ベンダーのドキュメント(「EVPN-VXLAN DC IP Fabric – MAC-VRF L2 services」)では、MAC-VRF の例として次のような設定が紹介されています。2

set routing-instances macvrf66-vlan-aware instance-type mac-vrf
set routing-instances macvrf66-vlan-aware service-type vlan-aware
set routing-instances macvrf66-vlan-aware route-distinguisher 172.16.7.7:4
set routing-instances macvrf66-vlan-aware vrf-target target:1:7779
set routing-instances macvrf66-vlan-aware vlans v103 vlan-id 103
set routing-instances macvrf66-vlan-aware vlans v103 l3-interface irb.103
set routing-instances macvrf66-vlan-aware vlans v103 vxlan vni 50103
...

これを、さっきの「箱」のイメージと対応させるとこんな感じになります。

  • routing-instances macvrf66-vlan-aware ...
    この routing-instance 1 個が “MAC-VRF という箱 1 個” に対応

  • instance-type mac-vrf
    → 「この routing-instance は MAC-VRF として動きます」という指定

  • vlans v103 vlan-id 103 / vxlan vni 50103
    → この箱に「どの VLAN / VNI を入れるか」を紐付けている

  • route-distinguisher / vrf-target
    → EVPN から見たときに「この箱をどの EVPN インスタンス(EVI)として扱うか」を決める情報

  • l3-interface irb.103
    → 必要なら、この L2 の箱から L3VRF(IRB)へ抜ける出口を用意する

つまり QFX5120 では次のように考えると分かりやすいです。

「MAC-VRF という L2 の箱」を、routing-instances 配下の instance-type mac-vrf という設定オブジェクトで表現している

このような構造になっているという点を押さえておくと、理解しやすいと思います。

ここで意識しておきたい点は次のとおりです。

  • RFC は、「MAC-VRF という L2 の箱」と「EVI という EVPN インスタンス」という 役割・概念 を定義しています。
  • コンフィグは、それを実現するために routing-instance instance-type mac-vrf という入れ物 を用意しています。

つまり、これは単に役割と実装のレイヤを分けて見ているだけの話です。

自分は最初、ここを全部ごっちゃにしてしまっていました。

  • RFC に出てくる MAC-VRF
  • routing-instances mac-vrf の設定
  • さらに EVI / RD / RT / VNI / IRB …

これらをひとまとめに「MAC-VRF 的な何か」として見てしまった結果、「MAC-VRF って結局どの話のこと?」 と迷子になっていました。

5. MAC-VRF と EVI の整理(まとめ)

ここまでを踏まえて、自分の中では MAC-VRF と EVI を次のように整理しています。

  • MAC-VRF

    • EVPN 上で、テナントごとに L2(MAC)の転送領域を分けるための箱
    • 中身としては MAC テーブル / BUM の範囲 / VLAN–VNI のグループ 等が入る
  • EVI(EVPN Instance)

    • EVPN の中で、「その L2 ドメイン(サービス)」を識別するための インスタンス ID
    • どの MAC-VRF(どのテナント用 L2 ドメイン)が、どの EVPN サービスに属するかを区別する番号

かなりラフに言い切ってしまうと、自分の頭の中ではこんなイメージになりました。

MAC-VRF = PE の中にある「L2(MAC)の転送領域をテナントごとに分ける箱」
EVI     = EVPN の中で、その箱(L2 ドメイン)を識別するための ID

厳密な仕様の話は RFC やベンダー資料に譲りつつ、実務で考えるときはこのくらいの整理をしておくと分かりやすくなります。

  • 「これは MAC-VRF の話をしているのか」
  • 「EVI(EVPN インスタンス)の話をしているのか」
  • 「それともコンフィグの routing-instance の話なのか」

これらの点を区別しやすくなり、自分の中でも理解が整理できるようになったと思います。

6. 最後に

本当はこのあと、MAC-VRF について自分なりに理解を整理できたことで、次のような話にも触れたかったです。

  • routing-instances mac-vrf を利用すると何が良いのか。
  • MAC-VRF が 1 つの EVI しか持てなかった頃にどんな問題があったのか。
  • MAC-VRF を複数使うとどのようなメリットがあるのか。

ただ、このブログを書いているうちに、また「MAC-VRF って本当はこうなんじゃないか?」と考え始めてしまい、何度も書いては消す作業を繰り返してしまいました。

それでも、次の点については自分の中でようやく整理できたと感じています。

「MAC-VRF は、EVPN 上でテナントごとに L2 の転送領域を分ける箱である。」

今回は、冒頭で書いたとおり、「こう考えると少し楽になった」という整理の部分まで をいったんの着地点としたいと思います。
すべてを完全に理解したというよりは、自分の中でのモヤモヤの輪郭がはっきりしてきたくらいの感覚です。

もし、いま現在や過去に自分と同じように MAC-VRF 周りでモヤモヤしていた方 がいれば、X(旧 Twitter)や、はてなブックマークのコメントなどで次のようなことを教えてもらえるとうれしいです。

  • ここも分かりづらかった。
  • 自分はこう理解している。

といったフィードバックをもらえると、とても励みになりますし、今後自分が書き足したい内容のヒントにもなりそうです。

この記事が、「自分も似たようなところで悩んでいた」「MAC-VRF まわりの用語の整理がついていなかった」という方の、少しでも整理のきっかけになればうれしいです。

また機会があれば、ここで触れられなかった話や、QFX5120 の EVPN/VXLAN に触れる中で気づいたことも、あらためてまとめてみたいと思います。


  1. RFC 7432 "BGP MPLS-Based Ethernet VPN", IETF, 2015
    https://datatracker.ietf.org/doc/html/rfc7432
  2. Juniper Networks "EVPN-VXLAN DC IP Fabric – MAC-VRF L2 services"
    https://www.juniper.net/documentation/us/en/software/nce/evpn-vxlan-mac-vrf/EVPN_VxLAN_MAC-VRF.pdf