FJCT Tech blog

富士通クラウドテクノロジーズ公式エンジニアブログです

富士通クラウドテクノロジーズ

FJCT/Tech blog

EVPN L2VPN All-Active MultihomingにおけるRoute Typeと経路迂回

この記事は富士通クラウドテクノロジーズ Advent Calendar 2020 23日目です。

はじめに

ネットワークサービス部でネットワークの設計/構築/運用を担当しているid:foobaronです。

本記事では、EVPN L2VPN All-Active MultihomingにおけるRoute Typeと経路迂回についてまとめています。

EVPNの概要については、次の記事「EVPN-VXLANのAll-Active Multihomingによる拠点間の接続を試しました」もご参照ください。



AFI/SAFI

EVPNでは、仮想ネットワークの到達性情報を交換するための制御プロトコルとしてMP-BGP (Multiprotocol BGP) を使用します。

IPv4以外のaddress familyの到達性情報の交換のために、MP-BGPではMP_REACH_NLRIMP_UNREACH_NLRIの2つのpath attributeを定義しています。 BGP UPDATEメッセージにより、到達性情報 (NLRI: Network Layer Reachability Information) をこれら2つのpath attributeで広報します。

+---------------------------------------------------------+
| Address Family Identifier (2 octets)                    |
+---------------------------------------------------------+
| Subsequent Address Family Identifier (1 octet)          |
+---------------------------------------------------------+
| Length of Next Hop Network Address (1 octet)            |
+---------------------------------------------------------+
| Network Address of Next Hop (variable)                  |
+---------------------------------------------------------+
| Reserved (1 octet)                                      |
+---------------------------------------------------------+
| Network Layer Reachability Information (variable)       |
+---------------------------------------------------------+

MP-BGPでは、これら2つのpath attributeでサポートするネットワークプロトコルの識別子としてAFI (Address Family Identifier) を使用します。 例えばIPv4はAFI = 1、IPv6はAFI = 2と定義されています。 同一のAFIの中で更に区別するための識別子として、SAFI (Subsequent Address Family Identifier) があります。 例えば、unicastとmulticastの到達性情報の区別にSAFIを使用します。

AFI SAFI 内容
1 1 IPv4 unicast
1 2 IPv4 multicast
2 1 IPv6 unicast
2 2 IPv6 multicast
25 70 EVPN L2VPN

AFI/SAFIの組み合わせの例

MP-BGPでは、EVPNのAFI/SAFIの組み合わせとしてAFI = 25 (L2VPN) 、SAFI = 70 (BGP EVPNs) を使用します。

f:id:foobaron:20201222220749p:plain
EVPNのMP_REACH_NLRIのAFI/SAFI

EVPN Route Type

ほとんどのAFI/SAFIの組み合わせでは、NLRIの構造と内容はそのAFI/SAFIの組み合わせ全体で同じです。 しかしEVPNでは、交換される情報が「特定のMACアドレスへの到達性」や「Multihomingのために利用するESI (Ethernet Segment Identifier) 」等と多岐にわたり、その構造と内容もバラバラです。 そこでEVPN NLRIでは、情報の細分化とエンコードのためにRoute Typeを使用します。

EVPN L2VPNのRoute Typeは次のとおりです。

Route Type 内容 主な用途
1 Ethernet Auto-Discovery EVPN Multihomingの対の検出
2 MAC/IP Advertisement 仮想ネットワーク内の特定のMACアドレスへの到達性
3 Inclusive Multicast BUMトラフィックを転送するトンネルエンドポイントへの到達性
4 Ethernet Segment Multihomingの対のうちBUMトラフィックを転送するノードの選出

各Route Typeと、それぞれのRoute Typeの経路広報を撤回 (MP_UNREACH_NLRIを広報) したときの挙動を見ていきます。

Type-1: Ethernet AD Route

Type-1は、EVPNのMultihomingに利用します。 図のように同一ESI (Ethernet Segment Identifier) を設定したProvider Edge (PE) Router (= EVI: EVPN Instance) の対は、CE deviceに対して論理的に1台の機器として動作します。

f:id:foobaron:20201223001639p:plain
Type-1: Ethernet Auto-Discovery

f:id:foobaron:20201223011619p:plain
MultihomingとESI

Type-1 Routeの広報を停止すると、対向および対のPE RouterからはMultihomedノードとして認識されなくなります。 そのため、known unicastトラフィックが対向のPE RouterからそのPE Routerへ流入しなくなります。

Type-2: MAC Advertisement

Type-2は、仮想ネットワーク内の特定のMACアドレスへの到達性 (およびそのIPアドレスの情報) の広報に利用します。 あるESIに属するMACアドレスへの到達性を示すもので、Type-1 Routeとともに機能します。

仮想ネットワークに属するホストのMACアドレスへの到達性を、各トンネルエンドポイントがMP-BGPで学習することで、unknown unicastのfloodingを削減します。

f:id:foobaron:20201223005635p:plain
EVPN NLRI Type-2: MAC Advertisement

f:id:foobaron:20201223011527p:plain
MACアドレスとESI

Type-2 Routeを撤回すると、仮想ネットワークに属するホストへの通信において、対向のPE RouterからそのPE Routerへトラフィック流入がなくなります。

Type-3: Inclusive Multicast

Type-3は、BUMトラフィックを転送するトンネルエンドポイントのIPアドレスの広報に利用します。

Type-3 Routeを撤回したPE Routerには、BUMトラフィックが転送されなくなります。 BUMトラフィックの観点では他のPE Routerから認識されなくなるためです。

f:id:foobaron:20201223010345p:plain
EVPN Type-3: Inclusive Multicast

Type-4: Ethernet Segment

Type-4は同一ESIに所属しMultihomingの対となっているPE Routerのうち、BUMトラフィックを転送するDF (Designated Forwarder) の選出に利用します。

f:id:foobaron:20201223011026p:plain
EVPN NLRI Type-4: Ethernet Segment Route

次の図のように、EVPN MultihomingではDFのみがCEにBUMフレームを転送することで、CEがBUMフレームを重複して受信することを防止します。

f:id:foobaron:20201223013320p:plain
BUMフレームの転送におけるDFとBDFの挙動

Type-4 Routeを撤回すると、同一ESIでMultihomingを組んでいるPE Routerからは、DF選出に使用されなくなります。 Type-4 Routeを撤回したPE Router自身が(1)DFの場合と(2)BDFの場合で、DF再選出時の挙動が異なります。

(1)の場合、BDFからはDFが認識できなくなり、BDFがDFに昇格します。しかし、Type-4 Routeを撤回したPE Router自身はDFのままです。 両者がDFになるので、CEにはBUMフレームが重複して転送されてしまいます。

f:id:foobaron:20201223014918p:plain
(1) DFがType-4 Routeを撤回

(2)の場合、DFがBDFを認識できなくなってもDFのままです。また、Type-4 Routeを撤回したBDFもBDFのままとなります。

f:id:foobaron:20201223192433p:plain
(2) BDFがType-4 Routeを撤回

(1)の事象を防ぐためには、Type-3 Routeも同時に撤回する必要があります。

EVPN Multihomingにおける経路迂回 (drain traffic)

Route Typeごとに広報を撤回したときの挙動に基づき、EVPN L2VPN MultihomingにおけるPE Routerの経路迂回を考えます。

経路迂回は、ネットワーク機器の計画メンテナンス (ファームウェア更新等) で必要になります。 その機器にトラフィックが流れないようにすることで、通信断なしで機器をネットワークから外すことができます。 例えばeBGPではas-path prependを使うことで経路迂回を実現します。

L2プロトコルでは経路迂回はできないため、リンクをダウン (= インタフェースをダウン) させることでトラフィック流入を停止させる必要があります。 そのため、リンクをシャットダウンした際に通信断が発生します。

EVPN L2VPN Multihomingの場合、PE Routerへ流れてくるトラフィックは、次の図のように2種類あります。 (1) remote PE RouterからのL2 over L3トラフィックと(2)local CE deviceからのL2トラフィックです。

f:id:foobaron:20201223195121p:plain
PE Routerへのトラフィックは2種類ある

(2)は単なるL2のため経路迂回はできず、リンクダウンによる切り離しが必要となってしまいます。 しかし(1)はEVPNのcontrol planeであるMP-BGPの制御により実現可能です。

Juniper NetworksのJunosの設定例として、EVPNのMP-BGPによる経路迂回を見ていきます。

remote PE Routerからのトラフィックのうち、known unicastはType-1 Routeの撤回で実現できます。 Type-1 Routeさえ撤回できればknown unicastが流れてくることが無くなります。Type-2 Routeの撤回は必須ではありません。

余談ですが、EVPNではPE Router - CE Device間のリンク障害発生時の高速収束のために、Type-1 Routeを優先的に撤回します。 ただし、remote PE Router側の転送テーブルの状態が収束するまでは、remote PE Routerからlocal PE Routerへトラフィックが流れ続けてしまい通信断が発生します。 そのため、remote PE Routerからのトラフィックは事前に流れこないように経路迂回しておきます。

BUMトラフィックの迂回は、Type-3 Route, Type-4 Routeの撤回により実現します。 Type-3 Routeを撤回することで、remote PE Routerから自身に対してBUMトラフィックが流れてこなくなります。 Type-4 Routeを撤回することで、Multihomingを組んでいる別のlocal PE RouterがDFになるため、CE Deviceへは問題なくBUMトラフィックが流れ続けます。

よって、Route-Type 1, 3, 4を撤回する経路フィルタをBGPに設定することで、remote PE Routerからlocal PE Routerトラフィックが流れなくなります。 Junosではpolicy-options policy-statementにより経路フィルタのpolicyを定義します。

policy-statement deny-evpn-rt1rt3rt4-policy {
    term 1 { # EVPN Route Type-1
        from {
            family evpn;
            nlri-route-type 1;
        }
        then reject;
    }
    term 3 { # EVPN Route Type-3
        from {
            family evpn;
            nlri-route-type 3;
        }
        then reject;
    }
    term 4 { # EVPN Route Type-4
        from {
            family evpn;
            nlri-route-type 4;
        }
        then reject;
    }
    term last-term { # それ以外は許可
        then accept;
    }
}

作成したpolicyをMP-BGPに適用します。Junosの場合はpolicy適用にvpn-apply-exportが必要な点に注意です。

protocols {
    bgp {
        export deny-evpn-rt1rt3rt4-policy; # 経路広報 (= RIBからBGPへexportする経路) に対してpolicyを適用
        group evpn {
            type internal;
            local-address <local IP address>;
            family evpn {
                signaling;
            }
            vpn-apply-export; # VRF(vrf-name.evpn.0)でのbgp export policyを有効化
            local-as <local ASN>;
            multipath;
            neighbor <neighbor’s IP address>;
            neighbor <neighbor’s IP address>;
            ...
            ...
            ...
        }
    }
}

policyを適用すると、Type-1, Type-3, Type-4 Routeが到達不能であるという情報がBGP UPDATEのMP_UNREACH_NLRIにより広報されます。

f:id:foobaron:20201223214034p:plain
policy適用後のMP_UNREAH_NLRI (Type-3 Routeは上記画像のパケットでは表示されていない)

その後にremote PE Routerの経路情報が収束すると、policyを適用したPE Routerには、次の図のようにremote PE Routerからの流入トラフィックがなくなります。

f:id:foobaron:20201223214646p:plain
policy適用後はRemote PE Routerからの流入がなくなる

最後にCE Device向けリンクをダウンさせることで、PE Routerの切り離しが完了します。 CE Deviceからの流入は単なるL2のため迂回できず、リンクダウン時には瞬間的に通信断が発生しますが、 remote PE Routerからのトラフィックは事前に迂回しているため通信影響は小さくなりました。

終わりに

EVPNでは、MP-BGPでRoute Typeを用いて様々な到達性情報を交換します。 このMP-BGPの制御により、PE Router間で経路迂回ができます。 remote PE Routerからのトラフィック流入をなくすことで、 local PE Routerのネットワークからの切り離しの影響を極小化できます。