🗂

JANOG50 NETCON問題解説Level5

2022/07/15に公開

今回NETCONの問題作成に参加しましたので問題解説します。

Disclaimer

本投稿はJANOGという団体組織の開催するNETCONイベントに際して投稿していますが、あくまで個人の作成した参考情報であり、本投稿の情報は各自の責任と判断の上ご活用ください。
 本投稿ではいかなる機能や品質の保証も行えません。そのため本投稿の情報を活用した上で発生する問題やその被害などに関して全く責任を負いません。
 また、投稿は2022年7月時点のものであり、今後のプロトコル標準化やNOS実装変更などによりつかえなくなることがあります。

背景と目的

前回JANOG49のNETCONのアンケートで「EVPN-VxLAN」の問題を出して欲しい!というご意見を複数頂きました。また一般的なIPルーティングやL2スイッチングはWEB上に沢山の情報がありますが、EVPN-VxLANに関してはまだまだ情報が少ない状況です。

沢山の方にEVPN-VxLANという技術を知ってもらい、設計やコンフィグレーションのユースケースを提示するために今回問題作成を行いました。

なお本投稿内容の設計や設定上イケてない部分などあるかと思いますので、お気づきの方は是非ご意見やフィードバックを頂けると嬉しいです。

トポロジー

今回の問題のトポロジーはこちらです

  • vEOS * 8 / EOS Version: 4.28.0F
  • VPCS * 2

Spine&Leafで構成されるCLOS構成、ToRはBGPを喋れないエンドノードを収容し、LeafとLAG接続します。

Spine&Leafのアンダーレイは全て異なるAS番号でノード間はeBGP接続しています。 BGPではIPv6 UnnumberedによりIPv6 Link Localを使用してBGPピアを自動検出し、各ノードのLoopbackアドレスのIPv4 Prefixを交換しています。

アンダーレイで交換されたIPv4 Prefixを使用してノード間のオーバーレイeBGP接続とVxLANトンネル接続を行なっています。

オーバーレイネットワークは異なるL2VNIをL3VNIで接続するIRB:Integrated Routing and BridgingデザインでRFC9135で規定されるSymmetric IRBモデルに基づくコンフィグとなっています。

各LeafスイッチではEVPNマルチホーミングAll-Activeを使用してLACPによりToRとLAG接続を行い、さらにLeafでEVPN Anycast Gatewayを組み合わせて使用することによってVRRP/HSRPライクな冗長構成を実現しています。

またこのようなEVPN IRBでは大きく2つの設計パターンがあります。

  • Centralized型
  • Distributed型

Anycast GW機能をどのノードに持たせるか?その結果トラフィックフローやARP/NDフラッディングがどうなるか?を要件に応じて選択することが出来ます。
今回は後者のDistributed型構成となり、全てのLeaf SwitchがAnycast Gateway機能を持つよう設計しています。そのためSpineはBGP-EVPN情報の伝播は行いますがVxLANルーティングには参加しておらず、VxLANとは知らず単にUDPパケットを転送していることになります。

またこのネットワークでは以下のように全リンクでAct-Actのロードバランスが行われます。

  • Spine&Leaf間アンダーレイBGPによるECMP
  • Leaf間のオーバーレイBGPによるEVPNエイリアシング
  • Leaf〜ToR間のLAG

NETCONではEVE-NGというネットワークエミュレーターを使用しており、この問題では全ノードでArista社のvEOSを使用しています。vEOSは動作も軽く非常に扱いやすいNOSです。

問題文

あなたは有洲田,Inc.でデータセンターネットワークの構築を担当しています。
チームに新しくJoinした同僚の伊夫巣さんがEVPN-VxLANを使用したデータセンターネットワークの検証を行なっていますが、どうやらうまく動いていないようで助けてほしいと頼まれています。
あなたは伊夫巣さんに変わり、このデータセンターネットワークが正常に動くよう改善する必要があります。
現状のネットワークで発生している問題を解決するため、以下問いに答えて下さい。

Q1 PC01/02からそれぞれ上位LeafのAnycast GWIPにはPingが飛びますが、対向LeafのAnycast GWIPや対向PCへのPingが飛びません。
どうやらspineノードのアンダーレイルーティングの関連コンフィグに誤りがありIPv6 Nexthopを解決出来ないことが原因のようです。spineノードのコンフィグを修正しPingが飛ぶようにしてください。(配点100点)

Q2 Q1でPingが飛ぶようになりましたが、本来All-Activeで動作させたいLeaf03/04のEVPNマルチホーミングがAct-Sby状態になっています。
 All-Activeで動作するようコンフィグを修正して下さい。(配点100点)

Q3 Q2まででPingは飛ぶようになりましたが、leaf3/4〜tor02間リンクの障害復旧後にPingが飛ばなくなることがあるようです。
 コンフィグを修正してこの問題を解決して下さい。(配点100点)

Q4 Q3でPingが飛ばない理由をプロトコル観点を含めて説明してください。(配点200点)
 ※単に「コンフィグが間違ってるから」、「入ってないから」のみの説明はNGとなります

解答と問題解説

Q1解答

spine01/02で「ip routing ipv6 interfaces」設定を追加してipv6 next-hopなipv4 packetを転送できるようにする。

spine01(config)# ip routing ipv6 interfaces
spine01(config)#
spine02(config)# ip routing ipv6 interfaces
spine02(config)#

Q1問題解説

今回の構成ではBGP IPv6 Unnumberedを使用しており、Spine&Leaf間のNext-hopがIPv6 Link Localアドレスとなっています。

leaf01#show ip bgp 100.64.100.13
BGP routing table information for VRF default
Router identifier 100.64.100.11, local AS number 65011
BGP routing table entry for 100.64.100.13/32
 Paths: 2 available
  65001 65013
    fe80::5200:ff:fe00:5183%Et1 from fe80::5200:ff:fe00:5183%Et1 (100.64.100.1) <<<
      Origin IGP, metric 0, localpref 100, IGP metric 1, weight 0, tag 0
      Received 19:35:03 ago, valid, external, ECMP head, ECMP, best, ECMP contributor
      Rx SAFI: Unicast
  65002 65013
    fe80::5200:ff:fe87:d6b1%Et2 from fe80::5200:ff:fe87:d6b1%Et2 (100.64.100.2) <<<
      Origin IGP, metric 0, localpref 100, IGP metric 1, weight 0, tag 0
      Received 19:34:54 ago, valid, external, ECMP, ECMP contributor
      Rx SAFI: Unicast

問題の初期状態ではこのコマンドが入力されていないため、spineノードはIPv6 Link-LocalアドレスをNetxhopとしたパケットを転送することが出来ません。

切り分けの着目点は各ノード間でBGP経路交換が出来ていながらPC01〜PC02間のみならずLeaf間のPingなどSpineを介したパケット転送が出来ていない点です。

leaf01#ping 100.64.100.13
PING 100.64.100.13 (100.64.100.13) 72(100) bytes of data.

--- 100.64.100.13 ping statistics ---
5 packets transmitted, 0 received, 100% packet loss, time 43ms

show ipコマンドによって状態確認することも出来ますが、WEB上に情報も少なくNOS固有の考え方・設定であるためこの状況に気づきづらいと思います。
私も問題作成時にこれでハマりました、、

spine01#show ip

IP Routing : Enabled
IP Multicast Routing : Disabled
IPv6 Multicast Routing : Disabled
IPv6 Interfaces Forwarding : False <<<

IPv6 Unicast Routing : Enabled

そのため、問題文に どうやらspineノードのアンダーレイルーティングの関連コンフィグに誤りがありIPv6 Nexthopを解決出来ないことが原因のようです。spineノードのコンフィグを修正しPingが飛ぶようにしてください。と記載し、本来この設定が不要である各leafノードへこの設定を盛り込むことによって気づき易くしています。

設定変更後にIPv6 Interface Forwardingが有効化され、Spineを介したパケット転送ができるようになります。

spine01#show ip

IP Routing : Enabled
IP Multicast Routing : Disabled
IPv6 Multicast Routing : Disabled
IPv6 Interfaces Forwarding : True <<< 

IPv6 Unicast Routing : Enabled

Q2回答

leaf03/04のpo22で同値のlacp system-idを入力してtor02向けにleaf03/04が同ノードであるように見せる

leaf03(config)#int po22
leaf03(config-if-Po22)#lacp system-id 0022.0022.0022
leaf04(config)#int po22
leaf04(config-if-Po22)#lacp system-id 0022.0022.0022

Q2問題解説

EVPNマルチホーミングはベンダー独自実装やMulti Chassis LAG(MLAG)を置き換える標準化された冗長ソリューションでありEVPNの目玉機能です。同一冗長グループに参加する複数のPEデバイス(今回の構成ではLeaf)をCEデバイス(今回の構成ではToR)に向けて単一のノードであるかのように振る舞うことが出来ます。
今回の構成ではEVPNマルチホーミングAll-Activeを使用していますが、その他もいくつか方式があり要件に応じて最適な方式を選択することが出来ます。

方式名 特徴 対応RFC
All-Active Act-Act転送、高速コンバージェンス、QoS相性悪い 7432
Single-Active Act-Sby転送、高速コンバージェンス、QoS相性良い、CE側のLAG設定に工夫が必要 7432
Port-Active Act-Sby転送、コンバージェンスは他に劣る、QoS相性良い draft-ietf-bess-evpn-mh-pa

またLeaf〜ToR間でLACPを使用しており、Leaf/ToR共にLACPにより自動的にLAG Peerを検出します。

EVPN以前にLACPでは自身の単一LAGバンドルへ複数のデバイスを接続してしまった場合、LACPで交換されるSystem ID識別によりどれか一つのデイバスのみしか接続を有効化することが出来ません。

多くの実装ではデフォルトで自身のMACアドレスがLACP System IDとして設定されます。そのためLACP System IDを設定しない場合、tor02から見てleaf03とleaf04は別のデバイスとして見えてしまい、LACPによりLAGを構成できるのはどちらか片方のためtor側との接続がAct-Sby化してしまいます。

tor02#sh lacp peer
--- snip ---
 Port    Status  | Sys-id                    Port#   State     OperKey  PortPri
------ ----------|------------------------- ------- --------- --------- -------
Port Channel Port-Channel22:
 Et1     Bundled | 8000,50-00-00-f4-25-3d        3   ALGs+CD    0x0016    32768

切り分けの観点としてはtor02でのLACP状態確認とleaf03/leaf04でleaf01/leaf02とのコンフィグ差分チェックを行うことによって気づけるのではと思います。System IDの設定値は動作するものであれば解答例と同値である必要はありません。

leaf03とleaf04にて同じLACP Sytemd IDを設定することによって正常にLAGを組めるようになります。

tor02#sh lacp peer
--- snip ---
 Port    Status  | Sys-id                    Port#   State     OperKey  PortPri
------ ----------|------------------------- ------- --------- --------- -------
Port Channel Port-Channel22:
 Et1     Bundled | 8000,00-22-00-22-00-22        3   ALGs+CD    0x0016    32768
 Et2     Bundled | 8000,00-22-00-22-00-22        3   ALGs+CD    0x0016    32768

またEVPNマルチホーミング設定ではBGPを使用してEVPN網内でLAG Peerを検出するために必要なESI値と、CE(tor)側との接続で必要なLACP System IDの2種類があり煩雑ですが、NOS実装によってはLACP System IDからEVPN ESI値を自動生成するものもあるようですので、他NOSで設定を行う場合は是非そのような機能をご活用頂ければと思います。

Q3回答

leaf03/04へVLAN200のL2VNI設定を追加する

leaf03(config)#int vxlan 1
leaf03(config-if-Vx1)#vxlan vlan 200 vni 200
leaf04(config)#int vxlan 1
leaf04(config-if-Vx1)#vxlan vlan 200 vni 200

初期設定ではleaf100のl2VNI設定が入っていますが、こちらは削除してもしなくてもどちらでも構いません。

no vxlan vlan 100 vni 100

Q3問題解説

Q3ではクリア条件をコンフィグを修正してこの問題を解決して下さい。としており、Pingが飛ばなくなることの動作確認や原理説明がなくともコンフィグ修正させ完了していれば正解となります。

詳細な切り分けの観点は次のQ4にて説明しますが、こちらも基本的なコンフィグ差分チェックをleaf01/leaf02と行うことによって何かおかしい??と気づけるのではと思います。

Q4回答例

表現は異なれど「設定漏れ、ARP Sync、非対称ルーティング」の観点があれば正解です。

  • leaf03とleaf04でVLAN200のVNI設定が入っていないため、leaf03とleaf04でEVPN MAC/IP routeが交換出来ずArp Sync出来ない。
  • そのためleaf01/02からのECMPハッシング結果として届いたleafノード上にPC02のARPエントリーが存在しない場合にPingが飛ばない状態となる。

Q4問題解説

Q3の設問でleaf3/4〜tor02間リンクの障害復旧後にPingが飛ばなくなることがあるようですとあります。
試しにleaf3やleaf4のインターフェースeth3を何度かshutdown/no shutdownしてみましょう、MH-LAG切り替わり時の一時的なパケットドロップではなく継続的なPingロスが発生するはずです。

PC02> ping 192.168.21.100

192.168.21.100 icmp_seq=1 timeout
192.168.21.100 icmp_seq=2 timeout

切り分け方法の一例を紹介するとともに、プロトコルや設計の観点から何故このような事象になるのかを紐解きます。

切り分け方法
切り分けの一例を紹介します。

1.ドロップ箇所の見極め
まずはトラフィックがドロップしている箇所を各ノードでのIFカウンター確認とパケットキャプチャーによって見極めます。IFカウンターはshow interafceコマンドで、パケットキャプチャーはWiresharkで確認します。

例えばPC02からPC01へのPingが失敗しており、PC01まではICMP Requestが届いており、PC02へのICMP Reply返送が届いていない状況だとします。
ICMP RequestはPC02 > tor02 > leaf04 > spine02 > leaf02 > tor02 > PC01の順で到達しています。
ICMP ReplyはPC01 > tor01 > leaf01 > spine01 > leaf03の順で転送され、tor02までは到達していないため、leaf03でパケットがドロップしていることがわかります。

この状況は一例であり、各ノードのハッシング次第ではドロップ箇所が異なる可能性があります。

2.ドロップ理由の見極め
続いて何故leaf03でパケットがドロップしてしまうか?を切り分けていきます。ここで確認すべきなのは以下です。

  • MACアドレステーブル
leaf03#show mac address-table dynamic vlan 200
Vlan    Mac Address       Type        Ports      Moves   Last Move
----    -----------       ----        -----      -----   ---------
Total Mac Addresses for this criterion: 0

leaf04#show mac address-table dynamic vlan 200
Vlan    Mac Address       Type        Ports      Moves   Last Move
----    -----------       ----        -----      -----   ---------
 200    0050.7966.6810    DYNAMIC     Po22       1       0:02:23 ago
Total Mac Addresses for this criterion: 1
  • ARPテーブル
leaf03#sh ip arp vrf v100
Address         Age (sec)  Hardware Addr   Interface

leaf04#sh ip arp vrf v100
Address         Age (sec)  Hardware Addr   Interface
192.168.22.100    0:00:01  0050.7966.6810  Vlan200, Port-Channel22
  • ルーティングテーブル
leaf03#show ip route vrf v100

VRF: v100
 B E      192.168.21.100/32 [200/0] via VTEP 100.64.100.11 VNI 10100 router-mac 50:00:00:6f:20:c3 local-interface Vxlan1
                                    via VTEP 100.64.100.12 VNI 10100 router-mac 50:00:00:a1:7a:a7 local-interface Vxlan1
 B E      192.168.21.0/24 [200/0] via VTEP 100.64.100.11 VNI 10100 router-mac 50:00:00:6f:20:c3 local-interface Vxlan1
                                  via VTEP 100.64.100.12 VNI 10100 router-mac 50:00:00:a1:7a:a7 local-interface Vxlan1
 C        192.168.22.0/24 is directly connected, Vlan200

leaf04#show ip route vrf v100

VRF: v100
 B E      192.168.21.100/32 [200/0] via VTEP 100.64.100.11 VNI 10100 router-mac 50:00:00:6f:20:c3 local-interface Vxlan1
                                    via VTEP 100.64.100.12 VNI 10100 router-mac 50:00:00:a1:7a:a7 local-interface Vxlan1
 B E      192.168.21.0/24 [200/0] via VTEP 100.64.100.11 VNI 10100 router-mac 50:00:00:6f:20:c3 local-interface Vxlan1
                                  via VTEP 100.64.100.12 VNI 10100 router-mac 50:00:00:a1:7a:a7 local-interface Vxlan1
 C        192.168.22.0/24 is directly connected, Vlan200

これらの確認を行うとルーティングテーブル的にはleaf03/04共に192.168.21.100/32もしくは192.168.21.0/24のエントリーがあるため問題無さそうです。一方でleaf03上のMACアドレステーブルとARPテーブルのエントリーが空となっているため、このあたりが怪しいことが分かります。

また上記「トポロジー」項での説明のようにこのネットワークはトラフィックがAct-Act転送されるように設計されています。そのため、PC02からのARPやICMP Requestがtor02のLAGハッシングによってleaf04経由で転送されるのに対して、PC01からのICMP ReplyはSpineのBGP ECMPハッシングによってleaf03経由で返送されます。

よってleaf03に返送されるも、ARPテーブルやMACアドレステーブルが空であるためleaf03はPC02宛のICMPを転送出来ずドロップされることが分かります。

何故ARPテーブルが空なのか?
そもそも何故leaf03上でAPRテーブルとMACアドレステーブルが空になっているのか?は解答例の通りVNI設定漏れによりARP Syncされていないことが原因となりますが、その動作原理を説明します。

今回のIRB設計では以下の論理空間が存在します。

  • L2VNI100(VLAN100用VNI)
  • L2VNI200(VLAN200用VNI) <<< 初期設定で不足、Q3で投入
  • L3VNI10100(vrf v100用のVNI)

各leafペア配下のL2VNIがL3VNIによってL3接続される設計となっています。

またleaf1/2〜leaf3/4間はL3VNIを介してパケット転送されます。このIPルーティングを実現するためにL3VNIではBGP EVPNにてIP Prefix routeというEVPN NLRIを用いて経路情報やVxLAN VNI値などが交換されます。このIP Prefix routeはRFC9136で標準化されており、RFC4364で定義されるVPNv4などMPLS-VPNライクな構造となっています。

以下はleafノードでのIP Prefix route確認結果です
「entry for ip-prefix 192.168.21.0/24」が読み取れます

leaf04#sh bgp evpn route-type ip-prefix 192.168.21.0/24
BGP routing table information for VRF default
Router identifier 100.64.100.14, local AS number 65014
BGP routing table entry for ip-prefix 192.168.21.0/24, Route Distinguisher: 100.64.100.11:10100
 Paths: 2 available
  65001 65011
    100.64.100.11 from 100.64.100.1 (100.64.100.1)
      Origin IGP, metric -, localpref 100, weight 0, valid, external, ECMP head, ECMP, best, ECMP contributor
      Extended Community: Route-Target-AS:65000:10100 TunnelEncap:tunnelTypeVxlan EvpnRouterMac:50:00:00:6f:20:c3
      VNI: 10100
--- snip ---

またQ2解説の通り、EVPNマルチホーミングは同一の冗長グループに参加するleafらがtorに向けに単一のノードであるかのように振る舞う機能です。従って同一冗長グループに属するleaf03とleaf04は単一ノードとして動作するために、同一LAGに関するMACアドレスやARP/NDエントリーを同期する必要があります。

同動作を実現するため、L2VNI内でBGP EVPNにてMAC/IP routeというEVPN NLRIを用いてMACアドレスやIPアドレス、VxLAN VNI値などを交換する必要があります。

以下はleafノードでMAC/IP route確認結果です
「entry for mac-ip 0050.7966.680f 192.168.21.100」が読み取れます

--- snip ---
BGP routing table entry for mac-ip 0050.7966.680f 192.168.21.100, Route Distinguisher: 100.64.100.11:100
 Paths: 2 available
  65001 65011
    100.64.100.11 from 100.64.100.1 (100.64.100.1)
      Origin IGP, metric -, localpref 100, weight 0, valid, external, ECMP head, ECMP, best, ECMP contributor
      Extended Community: Route-Target-AS:65000:100 Route-Target-AS:65000:10100 TunnelEncap:tunnelTypeVxlan EvpnRouterMac:50:00:00:6f:20:c3 EvpnNdFlags:pflag
      VNI: 100 L3 VNI: 10100 ESI: 0021:0021:0021:0021:0021
--- snip ---

EVPNではこのMAC/IP route中のMACアドレスやIPアドレス情報を元にMACやARP/NDテーブルを冗長グループ内で同期します。例えば、PC02からのパケットがtor2のLAGハッシングによってleaf04側に到達した場合、leaf04はローカルのMACテーブルにエントリー追加すると共にBGP EVPNでMAC/IPルートを網内広報します。
さらにleaf03が同MAC/IPルートを受信することによって、leaf03は自身で直接PC02からのパケットを受けていないにも関わらず、PC02の情報をあたかもローカル学習したかのように自身のMACアドレステーブルとARP/NDテーブルに書き込むことが出来ます。

今回はleaf03/leaf04共にL2VNI設定が抜けているためMAC/IP routeの交換が行われません。従って、ARPテーブルの同期も行われないため「leaf03上でAPRテーブルとMACアドレステーブルが空になっている」状態が発生してしまいます。

leaf03/leaf04へL2VNI設定を追加することによってMAC/IP routeが交換されleaf03のARPテーブルにPC02のエントリーが生成されるため、PC01からのICMP ReplyがSpineのBGP ECMPハッシングによってleaf03経由となった場合でも正しくPC02向けとしてtor02へ転送することができるようになります。

今回の構成ではECMPハッシング的にパケット受信したleaf03もしくはleaf04がPC02のARPエントリーを持っていた場合、正常にPingが通ってしまうためこの問題を発見しづらくなっています。また、ネットワーク内に同L2VNIを持つleafノード、例えばleaf05/leaf06などが存在しL2VNI間通信が発生する場合はそもそも同ブロードキャストドメイン内の通信ができないためこの問題に気づくかもしれませんが、今回IRB環境で基本的にL3VNIを経由して他L2VNIと通信する設計のためさらに問題を発見しづらくなっていたかと思います。

参考 各スイッチのコンフィグレーション

spine01#sh run
! Command: show running-config
! device: spine01 (vEOS-lab, EOS-4.28.0F)
!
! boot system flash:/vEOS-lab.swi
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model multi-agent
!
hostname spine01
!
spanning-tree mode mstp
!
interface Ethernet1
mtu 9124
no switchport
ipv6 enable
!
interface Ethernet2
mtu 9124
no switchport
ipv6 enable
!
interface Ethernet3
mtu 9124
no switchport
ipv6 enable
!
interface Ethernet4
mtu 9124
no switchport
ipv6 enable
!
interface Loopback0
ip address 100.64.100.1/32
!
interface Management1
!
#ip routing ipv6 interfaces

#初期デプロイ時はここをip routing(ipv6 int抜きとしておく)

ip routing
!
ipv6 unicast-routing
!
router bgp 65001
router-id 100.64.100.1
no bgp default ipv4-unicast
bgp default ipv4-unicast transport ipv6
maximum-paths 4
neighbor eth1 peer group
neighbor eth2 peer group
neighbor eth3 peer group
neighbor eth4 peer group
neighbor evpn peer group
neighbor evpn update-source Loopback0
neighbor evpn send-community extended
neighbor 100.64.100.11 peer group evpn
neighbor 100.64.100.11 remote-as 65011
neighbor 100.64.100.12 peer group evpn
neighbor 100.64.100.12 remote-as 65012
neighbor 100.64.100.13 peer group evpn
neighbor 100.64.100.13 remote-as 65013
neighbor 100.64.100.14 peer group evpn
neighbor 100.64.100.14 remote-as 65014
redistribute connected
neighbor interface Et1 peer-group eth1 remote-as 65011
neighbor interface Et2 peer-group eth2 remote-as 65012
neighbor interface Et3 peer-group eth3 remote-as 65013
neighbor interface Et4 peer-group eth4 remote-as 65014
!
address-family evpn
neighbor 100.64.100.11 activate
neighbor 100.64.100.12 activate
neighbor 100.64.100.13 activate
neighbor 100.64.100.14 activate
!
address-family ipv4
neighbor eth1 activate
neighbor eth1 next-hop address-family ipv6 originate
neighbor eth2 activate
neighbor eth2 next-hop address-family ipv6 originate
neighbor eth3 activate
neighbor eth3 next-hop address-family ipv6 originate
neighbor eth4 activate
neighbor eth4 next-hop address-family ipv6 originate
!
address-family ipv6
neighbor eth1 activate
neighbor eth2 activate
neighbor eth3 activate
neighbor eth4 activate
!
end

spine02#sh run
! Command: show running-config
! device: spine02 (vEOS-lab, EOS-4.28.0F)
!
! boot system flash:/vEOS-lab.swi
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model multi-agent
!
hostname spine02
!
spanning-tree mode mstp
!
interface Ethernet1
mtu 9124
no switchport
ipv6 enable
!
interface Ethernet2
mtu 9124
no switchport
ipv6 enable
!
interface Ethernet3
mtu 9124
no switchport
ipv6 enable
!
interface Ethernet4
mtu 9124
no switchport
ipv6 enable
!
interface Loopback0
ip address 100.64.100.2/32
!
interface Management1
!
#ip routing ipv6 interfaces

#初期デプロイ時はここをip routing(ipv6 int抜きとしておく)

ip routing


!
ipv6 unicast-routing
!
router bgp 65002
router-id 100.64.100.2
no bgp default ipv4-unicast
bgp default ipv4-unicast transport ipv6
maximum-paths 4
neighbor eth1 peer group
neighbor eth2 peer group
neighbor eth3 peer group
neighbor eth4 peer group
neighbor evpn peer group
neighbor evpn update-source Loopback0
neighbor evpn send-community extended
neighbor 100.64.100.11 peer group evpn
neighbor 100.64.100.11 remote-as 65011
neighbor 100.64.100.12 peer group evpn
neighbor 100.64.100.12 remote-as 65012
neighbor 100.64.100.13 peer group evpn
neighbor 100.64.100.13 remote-as 65013
neighbor 100.64.100.14 peer group evpn
neighbor 100.64.100.14 remote-as 65014
redistribute connected
neighbor interface Et1 peer-group eth1 remote-as 65011
neighbor interface Et2 peer-group eth2 remote-as 65012
neighbor interface Et3 peer-group eth3 remote-as 65013
neighbor interface Et4 peer-group eth4 remote-as 65014
!
address-family evpn
neighbor 100.64.100.11 activate
neighbor 100.64.100.12 activate
neighbor 100.64.100.13 activate
neighbor 100.64.100.14 activate
!
address-family ipv4
neighbor eth1 activate
neighbor eth1 next-hop address-family ipv6 originate
neighbor eth2 activate
neighbor eth2 next-hop address-family ipv6 originate
neighbor eth3 activate
neighbor eth3 next-hop address-family ipv6 originate
neighbor eth4 activate
neighbor eth4 next-hop address-family ipv6 originate
!
address-family ipv6
neighbor eth1 activate
neighbor eth2 activate
neighbor eth3 activate
neighbor eth4 activate
!
end
leaf01#sh run
! Command: show running-config
! device: leaf01 (vEOS-lab, EOS-4.28.0F)
!
! boot system flash:/vEOS-lab.swi
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model multi-agent
!
hostname leaf01
!
spanning-tree mode mstp
no spanning-tree vlan-id 1-4094
!
vlan 100
!
vrf instance v100
!
interface Port-Channel21
switchport trunk allowed vlan 100
switchport mode trunk
!
evpn ethernet-segment
identifier 0021:0021:0021:0021:0021
route-target import 00:21:00:21:00:21
lacp system-id 0021.0021.0021
!
interface Ethernet1
no switchport
ipv6 enable
!
interface Ethernet2
no switchport
ipv6 enable
!
interface Ethernet3
channel-group 21 mode active
!
interface Ethernet4
!
interface Loopback0
ip address 100.64.100.11/32
!
interface Management1
!
interface Vlan100
vrf v100
ip address virtual 192.168.21.1/24
!
interface Vxlan1
vxlan source-interface Loopback0
vxlan udp-port 4789
vxlan vlan 100 vni 100
vxlan vrf v100 vni 10100
!
ip virtual-router mac-address 00:00:00:00:00:21
!
ip routing ipv6 interfaces
ip routing vrf v100
!
ipv6 unicast-routing
!
router bgp 65011
router-id 100.64.100.11
no bgp default ipv4-unicast
bgp default ipv4-unicast transport ipv6
maximum-paths 4
neighbor eth1 peer group
neighbor eth2 peer group
neighbor evpn peer group
neighbor evpn update-source Loopback0
neighbor evpn send-community extended
neighbor 100.64.100.1 peer group evpn
neighbor 100.64.100.1 remote-as 65001
neighbor 100.64.100.2 peer group evpn
neighbor 100.64.100.2 remote-as 65002
redistribute connected
neighbor interface Et1 peer-group eth1 remote-as 65001
neighbor interface Et2 peer-group eth2 remote-as 65002
!
vlan 100
rd 100.64.100.11:100
route-target both 65000:100
redistribute learned
!
address-family evpn
neighbor 100.64.100.1 activate
neighbor 100.64.100.2 activate
!
address-family ipv4
neighbor eth1 activate
neighbor eth1 next-hop address-family ipv6 originate
neighbor eth2 activate
neighbor eth2 next-hop address-family ipv6 originate
!
address-family ipv6
neighbor eth1 activate
neighbor eth2 activate
!
vrf v100
rd 100.64.100.11:10100
route-target import 65000:10100
route-target export 65000:10100
redistribute connected
!
end
leaf02#sh run
! Command: show running-config
! device: leaf02 (vEOS-lab, EOS-4.28.0F)
!
! boot system flash:/vEOS-lab.swi
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model multi-agent
!
hostname leaf02
!
spanning-tree mode mstp
no spanning-tree vlan-id 1-4094
!
vlan 100
!
vrf instance v100
!
interface Port-Channel21
switchport trunk allowed vlan 100
switchport mode trunk
!
evpn ethernet-segment
identifier 0021:0021:0021:0021:0021
route-target import 00:21:00:21:00:21
lacp system-id 0021.0021.0021
!
interface Ethernet1
no switchport
ipv6 enable
!
interface Ethernet2
no switchport
ipv6 enable
!
interface Ethernet3
channel-group 21 mode active
!
interface Ethernet4
!
interface Loopback0
ip address 100.64.100.12/32
!
interface Management1
!
interface Vlan100
vrf v100
ip address virtual 192.168.21.1/24
!
interface Vxlan1
vxlan source-interface Loopback0
vxlan udp-port 4789
vxlan vlan 100 vni 100
vxlan vrf v100 vni 10100
!
ip virtual-router mac-address 00:00:00:00:00:21
!
ip routing ipv6 interfaces
ip routing vrf v100
!
ipv6 unicast-routing
!
router bgp 65012
router-id 100.64.100.12
no bgp default ipv4-unicast
bgp default ipv4-unicast transport ipv6
maximum-paths 4
neighbor eth1 peer group
neighbor eth2 peer group
neighbor evpn peer group
neighbor evpn update-source Loopback0
neighbor evpn send-community extended
neighbor 100.64.100.1 peer group evpn
neighbor 100.64.100.1 remote-as 65001
neighbor 100.64.100.2 peer group evpn
neighbor 100.64.100.2 remote-as 65002
redistribute connected
neighbor interface Et1 peer-group eth1 remote-as 65001
neighbor interface Et2 peer-group eth2 remote-as 65002
!
vlan 100
rd 100.64.100.12:100
route-target both 65000:100
redistribute learned
!
address-family evpn
neighbor 100.64.100.1 activate
neighbor 100.64.100.2 activate
!
address-family ipv4
neighbor eth1 activate
neighbor eth1 next-hop address-family ipv6 originate
neighbor eth2 activate
neighbor eth2 next-hop address-family ipv6 originate
!
address-family ipv6
neighbor eth1 activate
neighbor eth2 activate
!
vrf v100
rd 100.64.100.12:10100
route-target import 65000:10100
route-target export 65000:10100
redistribute connected
!
end
leaf03#sh run
! Command: show running-config
! device: leaf03 (vEOS-lab, EOS-4.28.0F)
!
! boot system flash:/vEOS-lab.swi
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model multi-agent
!
hostname leaf03
!
spanning-tree mode mstp
no spanning-tree vlan-id 1-4094
!
vlan 200
!
vrf instance v100
!
interface Port-Channel22
switchport trunk allowed vlan 200
switchport mode trunk
!
evpn ethernet-segment
identifier 0022:0022:0022:0022:0022
route-target import 00:22:00:22:00:22
# lacp system-id 0022.0022.0022
#初期デプロイ時はこの行を抜いておく
!
interface Ethernet1
no switchport
ipv6 enable
!
interface Ethernet2
no switchport
ipv6 enable
!
interface Ethernet3
channel-group 22 mode active
!
interface Ethernet4
!
interface Loopback0
ip address 100.64.100.13/32
!
interface Management1
!
interface Vlan200
vrf v100
ip address virtual 192.168.22.1/24
!
interface Vxlan1
vxlan source-interface Loopback0
vxlan udp-port 4789
#vxlan vlan 200 vni 200
#初期デプロイ時はこの行を抜いて代わりに下記vni100の行を入れておく
vxlan vlan 100 vni 100
vxlan vrf v100 vni 10100
!
ip virtual-router mac-address 00:00:00:00:00:22
!
ip routing ipv6 interfaces
ip routing vrf v100
!
ipv6 unicast-routing
!
router bgp 65013
router-id 100.64.100.13
no bgp default ipv4-unicast
bgp default ipv4-unicast transport ipv6
maximum-paths 4
neighbor eth1 peer group
neighbor eth2 peer group
neighbor evpn peer group
neighbor evpn update-source Loopback0
neighbor evpn send-community extended
neighbor 100.64.100.1 peer group evpn
neighbor 100.64.100.1 remote-as 65001
neighbor 100.64.100.2 peer group evpn
neighbor 100.64.100.2 remote-as 65002
redistribute connected
neighbor interface Et1 peer-group eth1 remote-as 65001
neighbor interface Et2 peer-group eth2 remote-as 65002
!
vlan 200
rd 100.64.100.13:200
route-target both 65000:200
redistribute learned
!
address-family evpn
neighbor 100.64.100.1 activate
neighbor 100.64.100.2 activate
!
address-family ipv4
neighbor eth1 activate
neighbor eth1 next-hop address-family ipv6 originate
neighbor eth2 activate
neighbor eth2 next-hop address-family ipv6 originate
!
address-family ipv6
neighbor eth1 activate
neighbor eth2 activate
!
vrf v100
rd 100.64.100.13:10100
route-target import 65000:10100
route-target export 65000:10100
redistribute connected
!
end
leaf04#sh run
! Command: show running-config
! device: leaf04 (vEOS-lab, EOS-4.28.0F)
!
! boot system flash:/vEOS-lab.swi
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model multi-agent
!
hostname leaf04
!
spanning-tree mode mstp
no spanning-tree vlan-id 1-4094
!
vlan 200
!
vrf instance v100
!
interface Port-Channel22
switchport trunk allowed vlan 200
switchport mode trunk
!
evpn ethernet-segment
identifier 0022:0022:0022:0022:0022
route-target import 00:22:00:22:00:22
# lacp system-id 0022.0022.0022
#初期デプロイ時はこの行を抜いておく
!
interface Ethernet1
no switchport
ipv6 enable
!
interface Ethernet2
no switchport
ipv6 enable
!
interface Ethernet3
channel-group 22 mode active
!
interface Ethernet4
!
interface Loopback0
ip address 100.64.100.14/32
!
interface Management1
!
interface Vlan200
vrf v100
ip address virtual 192.168.22.1/24
!
interface Vxlan1
vxlan source-interface Loopback0
vxlan udp-port 4789
#vxlan vlan 200 vni 200
#初期デプロイ時はこの行を抜いて代わりに下記vni100の行を入れておく
vxlan vlan 100 vni 100
vxlan vrf v100 vni 10100
!
ip virtual-router mac-address 00:00:00:00:00:22
!
ip routing ipv6 interfaces
ip routing vrf v100
!
ipv6 unicast-routing
!
router bgp 65014
router-id 100.64.100.14
no bgp default ipv4-unicast
bgp default ipv4-unicast transport ipv6
maximum-paths 4
neighbor eth1 peer group
neighbor eth2 peer group
neighbor evpn peer group
neighbor evpn update-source Loopback0
neighbor evpn send-community extended
neighbor 100.64.100.1 peer group evpn
neighbor 100.64.100.1 remote-as 65001
neighbor 100.64.100.2 peer group evpn
neighbor 100.64.100.2 remote-as 65002
redistribute connected
neighbor interface Et1 peer-group eth1 remote-as 65001
neighbor interface Et2 peer-group eth2 remote-as 65002
!
vlan 200
rd 100.64.100.14:200
route-target both 65000:200
redistribute learned
!
address-family evpn
neighbor 100.64.100.1 activate
neighbor 100.64.100.2 activate
!
address-family ipv4
neighbor eth1 activate
neighbor eth1 next-hop address-family ipv6 originate
neighbor eth2 activate
neighbor eth2 next-hop address-family ipv6 originate
!
address-family ipv6
neighbor eth1 activate
neighbor eth2 activate
!
vrf v100
rd 100.64.100.14:10100
route-target import 65000:10100
route-target export 65000:10100
redistribute connected
!
end
tor01#sh run
! Command: show running-config
! device: tor01 (vEOS-lab, EOS-4.28.0F)
!
! boot system flash:/vEOS-lab.swi
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model ribd
!
hostname tor01
!
spanning-tree mode mstp
no spanning-tree vlan-id 1-4094
!
vlan 100
!
interface Port-Channel21
switchport trunk allowed vlan 100
switchport mode trunk
!
interface Ethernet1
channel-group 21 mode active
!
interface Ethernet2
channel-group 21 mode active
!
interface Ethernet3
switchport access vlan 100
!
interface Management1
!
no ip routing
!
end
tor02#sh run
! Command: show running-config
! device: tor02 (vEOS-lab, EOS-4.28.0F)
!
! boot system flash:/vEOS-lab.swi
!
no aaa root
!
transceiver qsfp default-mode 4x10G
!
service routing protocols model ribd
!
hostname tor02
!
spanning-tree mode mstp
no spanning-tree vlan-id 1-4094
!
vlan 200
!
interface Port-Channel22
switchport trunk allowed vlan 200
switchport mode trunk
!
interface Ethernet1
channel-group 22 mode active
!
interface Ethernet2
channel-group 22 mode active
!
interface Ethernet3
switchport access vlan 200
!
interface Management1
!
no ip routing
!
end

参考URL

JANOG45 ルーティングのためのIPアドレス?
https://www.janog.gr.jp/meeting/janog45/application/files/2015/7964/7529/janog45-shtsuchi-routingip-00.pdf

EOS 4.28.1F User Manual
https://www.arista.com/en/um-eos/eos-vxlan-configuration#topic_sr2_zd4_ynb

Discussion