Nexus9000v で VxLAN+EVPN (MAC Mobility Extended Community 簡易動作確認編)
最初に
やること
先日の記事(Nexus9000v で VxLAN+EVPN (anycast gateway 編)) で、EVPN で学習した MAC アドレステーブルを見た僕が「Seq No があるってことは MAC Mobility Extended Community が使えるんじゃないのか!?」と口走っていたので、その簡易動作確認をします。
EVPN MAC Mobility ?
RFC 7432 (BGP MPLS-Based Ethernet VPN) / 15. MAC Mobility に書かれています。
EVPN PE を跨ぐような LiveMigration や Flapping が発生した際に、網内の PE 達が当該 MAC アドレスの最新の居場所(どの PE 配下にあるか)を正しく把握するために Sequence No を埋め込んで使う Extended Community ... それが MAC Mobility Extended Community です。 今回は確認できませんでしたが、RFCによれば同じ Sequence No が複数 PE から来た場合には PE の IP アドレスが小さい方を選択...てなルールもあるようです。
なーんて、僕の拙い日本語よりも、"EVPN MAC Mobility" で Google 画像検索でもすれば、Juniper さんあたりの分かりやすい図面が出てきますよ(雑)。
環境情報 / 事前準備
先日の記事(Nexus9000v で VxLAN+EVPN (anycast gateway 編)) のまま、完全シングルホーム環境。
なお、後述のシナリオのために torsw101a
と torsw201a
の Et 1/3
に以下設定をした上で、
torsw101a# show run int et 1/3 !Command: show running-config interface Ethernet1/3 !Time: Sun Oct 22 17:31:42 2017 version 7.0(3)I6(1) interface Ethernet1/3 description DEV=ostinato IF=Port0 switchport access vlan 100
torsw201a# show run int et 1/3 !Command: show running-config interface Ethernet1/3 !Time: Sun Oct 22 17:31:49 2017 version 7.0(3)I6(1) interface Ethernet1/3 description DEV=ostinato IF=Port1 switchport access vlan 100
トラフィックジェネレータとして Ostinato を接続してあります。
一応軽く GNS3 で手っ取り早く準備できるトラフィックジェネレータである Ostinato の参考資料も以下に載せておきます。
- OSTINATO
- OSTINATO 公式 / HOME
- OSTINATO 公式 / Download / vDrone Appliance
- GNS3 用のアプライアンス
Community member Bernhard has created a custom vDrone appliance for use with GNS3 based on TinyCore Linux - see Ostinato for GNS3 for download and detailed usage instructions.
- GNS3 用のアプライアンス
- Bernhard's Homepage / Ostinato for GNS3
- 前述の通りなので、ありがたく使わせて頂こう
- OSTINATO 公式 / Python API Guide
- GNS3
簡易動作確認
シナリオ
こんな風に様子を見ます。
- EVPN PE である
torsw101a
とtorsw201a
それぞれのEt 1/3
(VNI 10100 にマッピングされる VLAN を割当済)に、同一 Src MAC address(11:11:11:11:11:11
) の ARP トラフィックを流し続ける - 以下を見る
torsw101a
とtorsw201a
間に流れるパケット(主にEVPN 周りの UPDATE)torsw101a
とtorsw201a
での EVPN MAC アドレス学習情報 遷移
結果
MAC Mobility Extended Community シーケンス
拾ったパケットを追っていくと、以下の感じ (thanks WebSequenceDiagrams)
今回 PE x2 のみで Ostinato でチンタラトラフィックを流している環境では、Sequence No 2 以上が使われることはなかったです。
各 loop の最後に MAC Mobility Extended Community なしの(= Sequence No 0 扱い) UPDATE が出るのは RFC で以下の記載があるからかも知れません。
In order to process mobility events correctly, an implementation MUST handle scenarios in which sequence number wraparound occurs.
上記の loop を 4 回繰り返した後、30s 程度の間は一切の UPDATE を双方が出さなくなりました。
これはどうやら「180s の間に 5 回 move が発生したら 30s の hold timer を発動する(カスタマイズ可能)」というデフォルト値動作によるものみたいです。(以下の本いわく)
Building Data Centers with VXLAN BGP EVPN: A Cisco NX-OS Perspective (Networking Technology)
- 作者: David Jansen,Lukas Krattiger,Shyam Kapadia
- 出版社/メーカー: Cisco Press
- 発売日: 2017/04/04
- メディア: Kindle版
- この商品を含むブログを見る
こんな syslog も出ていた
2017 Oct 22 11:40:17 torsw101a %USER-2-SYSTEM_MSG: Detected duplicate host 1111.1111.1111, topology 100, during Local update, with host located at remote VTEP 198.18.1.21, VNI 10100 - l2rib
次に MAC Mobility Extended Community で Sequence No = 1 で UPDATE 吐いているパケットをピックアップすると以下の感じ
RFC 7432 (BGP MPLS-Based Ethernet VPN) / 7.7. MAC Mobility Extended Community にある format を見ると、Sticky/static
を示す Flags
が 0 になっています。この Flags
の用途は RFC 7432 (BGP MPLS-Based Ethernet VPN) / 15.2. Sticky MAC Addresses の通り、MAC address の移動が起こりえない環境で 1 をたててアラートをあげるような使い方を想定している模様。
NX-OS の設定で変更できるのかは調査した限りでは分からずです。余談ですが、例えば Juniper の実装だと Juniper 公式 / EVPN MAC Pinning Overview のように、この Flags を有効化する設定で MAC アドレス遷移事故を防ぐようなことも出来る(当然、ライブマイグレーションを使わないなどの制約と引き換えに)ようです。
MAC アドレス学習状況
先のシーケンス図と比較しながら見ていきましょう。(余談ですがこれ、拾うタイミングが結構シビアでした。)
torsw101a (VTEP 用の lo IP アドレス = 198.18.1.11)
配下に当該 MAC address があると思っている torsw201a
だったが
torsw201a# show l2route evpn mac all Flags -(Rmac):Router MAC (Stt):Static (L):Local (R):Remote (V):vPC link (Dup):Duplicate (Spl):Split (Rcv):Recv (AD):Auto-Delete(D):Del Pending (S):Stale (C):Clear (Ps):Peer Sync (O):Re-Originated Topology Mac Address Prod Flags Seq No Next-Hops ----------- -------------- ------ ------------- ---------- ---------------- 100 1111.1111.1111 BGP Rcv 0 198.18.1.11
自分配下から同 MAC address を学習し、それを Sequence No = 1
として扱い
torsw201a# show l2route evpn mac all Flags -(Rmac):Router MAC (Stt):Static (L):Local (R):Remote (V):vPC link (Dup):Duplicate (Spl):Split (Rcv):Recv (AD):Auto-Delete(D):Del Pending (S):Stale (C):Clear (Ps):Peer Sync (O):Re-Originated Topology Mac Address Prod Flags Seq No Next-Hops ----------- -------------- ------ ------------- ---------- ---------------- 100 1111.1111.1111 Local L, 1 Eth1/3 100 1111.1111.1111 BGP D 0 198.18.1.11
多分 torsw101a
が WithDrawn を送ってくれたタイミングで、Next-Hops 198.18.1.11
の経路を削除しつつ、自分が持っている経路の Sequence No
を 0 にリセットして再度 UPDATE を送っている。
torsw201a# show l2route evpn mac all Flags -(Rmac):Router MAC (Stt):Static (L):Local (R):Remote (V):vPC link (Dup):Duplicate (Spl):Split (Rcv):Recv (AD):Auto-Delete(D):Del Pending (S):Stale (C):Clear (Ps):Peer Sync (O):Re-Originated Topology Mac Address Prod Flags Seq No Next-Hops ----------- -------------- ------ ------------- ---------- ---------------- 100 1111.1111.1111 Local L, 0 Eth1/3 torsw201a#
なお、タイミング次第では Dup
フラグを観測できたこともありました。
torsw101a# show l2route evpn mac all Flags -(Rmac):Router MAC (Stt):Static (L):Local (R):Remote (V):vPC link (Dup):Duplicate (Spl):Split (Rcv):Recv (AD):Auto-Delete(D):Del Pending (S):Stale (C):Clear (Ps):Peer Sync (O):Re-Originated Topology Mac Address Prod Flags Seq No Next-Hops ----------- -------------- ------ ------------- ---------- ---------------- 100 1111.1111.1111 Local L,Dup, 1 Eth1/3 100 1111.1111.1111 BGP Dup,Rcv 0 198.18.1.21
完
「Seq No があるってことは MAC Mobility Extended Community が使えるんじゃないのか!?」という自分自身の問いに対して「何となく動いていそうな雰囲気はあるぞ」と答えておきます。
それはそれとして、この Sequence No がリセットする間もなくブリバリカウントアップしていくような環境を今回は作れずでしたが、まぁそんな恐ろしい環境には関わりたくないお気持ちでございます。