[Multi-AS Segment Routing 検証連載 #3] SR-MPLS L2VPN (EVPN) in Single-/Multi-AS

サマリ

  • Multi-AS で構成されるネットワークにおいて、 SR-MPLS + EVPN による L2VPN を実現
  • IOS XR + Junos の Multi-vendor 環境で動作検証に成功

この記事は Multi-AS SR 検証連載の第 3 回です。目次は こちら

概要

イノベーションセンターの田島です。 本記事では Single-/Multi-AS SR-MPLS での L2VPN について解説します。

我々の一連の検証では 第 0 回の記事 にもありますように、 Multi-AS でアンダーレイを構築することで拡張性や保守性を担保したまま拡張可能なネットワークを検討しています。 第 2 回の記事 では Multi-AS/Multi-domain SR-MPLS で分割されているアンダーレイを用いて L3VPN を実現しました。 本記事は同様のアンダーレイで L2VPN を実現します。

なお L2VPN という総称は、 2 点間の接続 (point-to-point) を仮想的に L2 レベルで行う Pseudo Wire や VPWS 1 とも呼ばれる E-Line と、複数拠点間 (point-to-multipoint) を仮想的に L2 スイッチングする VPLS 2 とも呼ばれる E-LAN の 2 種類を指すことがあります。 本記事では後者の、複数拠点間の E-LAN を対象にします。

このあとは L2VPN の仕組みについて概説したのち、 Multi-vendor 環境における検証トポロジーや設定例を紹介します。 Segment Routing (SR) や Multi-AS/Multi-domain SR-MPLS についての紹介は 第 0 回の記事の目次 から L3VPN の各記事をご参照ください。

EVPN による L2VPN

L2VPN 実現の手段として EVPN (Ethernet VPN) があります。 EVPN は RFC7432 - BGP MPLS-Based Ethernet VPN で規格化された L2VPN の方式で、経路情報の交換や転送が定められています。 誤解を恐れずに表現すると L2 における経路とはつまり MAC アドレスのことです。 EVPN では、各ルーターは MP-BGP 3 を用いて交換された MAC アドレスを学習し、照合することで各 MAC アドレス宛てのフレームを転送します。

上記の図は L2VPN の模式図で、複数台のルーターからなるコアネットワークがあたかも単一の巨大な L2SW のように転送する様子を表しています。 顧客 A と B それぞれ専用の L2SW が存在し、各 PE からアクセスできるイメージです。 顧客 A と B の間では通信ができず、それぞれ独立しています。

なお先ほど交換する経路とは L2 の MAC アドレスのことであるとしましたが、実際のところ EVPN においては MAC アドレスの他に L3 情報である IP アドレスや Ethernet Segment 識別子 (ESI) なども交換することにより、マルチホーミングなどの単なる L2VPN 以上の機能を実現しています。

機能が広範囲にわたる EVPN では交換する情報を Route Type として定義しています。 この記事内では Type 2 を詳細に見ますが、そのほかにも Type はあります。

  • Type 1 は Ethernet Auto-Discovery とよばれ、 ESI を広告し障害時の高速な収束などのために使われます。
  • Type 2 は MAC アドレスや IP アドレスを扱います。これは文字通り、 CE 側の端末のアドレスを交換します。
  • Type 3 は BUM トラフィックの送信先に使われます。
  • Type 4 は ESI に基づきマルチホーム時のトラフィック制御に使われます。

EVPN においては VLAN との対応付けに際して、 3 つの方式があります。 VPN を識別して転送するために EVPN Instance (EVI) / Bridge Domain (BD) / Broadcast Domain (VLAN) をどう構成するかによって、下記のような 3 方式があります。

  1. VLAN-Based: それぞれ1対1で対応する。単一の EVI には 単一の BD が対応し、それには単一の VLAN のみが対応する。
  2. VLAN Bundle: EVI と BD は 1 対 1 だが、BD には複数の VLAN が所属する。
  3. VLAN-Aware Bundle: EVI には 複数の BD が所属するが、各 BD にはそれぞれ単一の VLAN が対応する。

今回はわかりやすく各インスタンスが 1 対 1 で対応する 1. VLAN-Based を用いて検証します。 なお、方式ごとに設定方法があるため、特に Multi-vendor 環境においてはどの方式がどの設定に対応しているのかは要確認です。 これら3つに相互運用性はなく、同じ方式にそろえる必要があります。 実際に我々も検証中に 1. VLAN-Based と 3. VLAN-Aware が混在し相互接続できなくなり原因調査することがありました。

EVPN と Inter-AS Option B の対応状況

Multi-AS/Multi-domain SR-MPLS で分割されているアンダーレイを通じて VPN を実現する際に、拡張性を求めると Option B での実装が望ましいことは 第 2 回の記事 で示しました。 当該記事中でも言及しましたが、このようなアンダーレイにおいて EVPN を Option B で AS 間接続する実装は始まったばかりです。 具体的には Cisco ASR 9000 シリーズでは IOS XR 7.4.1 から 4 実装されています。

2022年7月現在では、 ASBR として使用できる機器が限られています。

Single-AS での L2VPN

まずは単純な Single-AS でのアンダーレイ環境において L2VPN を実現することで、基本的な設定を紹介します。 トポロジーは下記のような、 IOS XR と Junos それぞれ 1 台ずつ、 PE が P ルーターを介して接続された状態です。

使用した機材および OS バージョンは次の通りです。

  • PE
    • PE1: Cisco ASR9901 (IOS XR 7.6.1)
    • PE2: Juniper MX204 (Junos 21.3R1.9)
  • P
    • P1: Cisco C8201 (IOS XR 7.5.1)
    • P2: Juniper PTX10001 (Junos 21.4R1.15-EVO)

IGP や SR の設定は割愛します。下記の設定および確認を順に行います。

  • CE 接続インターフェースの設定
  • EVI と BD の設定
  • BGP の設定
  • 経路の確認
  • 疎通試験

なお検証の都合上、 PE では顧客 A と B は同じ物理ポートで VLAN で分けて収容することとします。

CE 接続インターフェースの設定

PE1 (IOS XR) 側

後の BD にはタグなしとして見せるため VLAN タグを取り外す設定を入れておきます。

interface TenGigE0/0/0/32.1000 l2transport
 encapsulation dot1q 1000
 rewrite ingress tag pop 1 symmetric
!
interface TenGigE0/0/0/32.2000 l2transport
 encapsulation dot1q 2000
 rewrite ingress tag pop 1 symmetric
!

PE2 (Junos) 側

この時点で既にインターフェースに ESI を設定しておきます。

set interfaces xe-0/1/6 flexible-vlan-tagging
set interfaces xe-0/1/6 encapsulation flexible-ethernet-services
set interfaces xe-0/1/6 esi 00:00:00:00:00:00:00:00:00:02
set interfaces xe-0/1/6 esi all-active
set interfaces xe-0/1/6 unit 1000 encapsulation vlan-bridge
set interfaces xe-0/1/6 unit 1000 vlan-id 1000
set interfaces xe-0/1/6 unit 2000 encapsulation vlan-bridge
set interfaces xe-0/1/6 unit 2000 vlan-id 2000

EVI と BD の設定

PE1 (IOS XR) 側

ESI と RT を設定します。 advertise-mac の有無で EVI ごとに Type-2 経路として MAC を出すかを制御できます。

evpn
 evi 1000
  bgp
   route-target import 65001:1000
   route-target export 65001:1000
  !
  control-word-disable
  advertise-mac
  !
 !
 evi 2000
  bgp
   route-target import 65001:2000
   route-target export 65001:2000
  !
  control-word-disable
  advertise-mac
  !
 !
 interface TenGigE0/0/0/32
  ethernet-segment
   identifier type 0 00.00.00.00.00.00.00.00.01
  !
 !
!

BD を設定します。 顧客 A 用と、顧客 B 用、それぞれの EVI を追加しておきます。

l2vpn
 bridge group EVPN
  bridge-domain 1000
   interface TenGigE0/0/0/32.1000
   !
   evi 1000
   !
  !
  bridge-domain 2000
   interface TenGigE0/0/0/32.2000
   !
   evi 2000
   !
  !
 !
!

PE2 (Junos) 側

EVI 兼 BD の routing-instance を作成します。 RT も設定します。

set policy-options policy-statement EXPORT-POLICY-1000 term ROUTE-TARGET then community add RT1000
set policy-options policy-statement IMPORT-POLICY-1000 term ROUTE-TARGET-iBGP from community RT1000-iBGP
set policy-options policy-statement IMPORT-POLICY-1000 term ROUTE-TARGET-iBGP then accept
set policy-options community RT1000 members target:65001:1000
set policy-options community RT1000-iBGP members target:65001:1000

set policy-options policy-statement EXPORT-POLICY-2000 term ROUTE-TARGET then community add RT2000
set policy-options policy-statement IMPORT-POLICY-2000 term ROUTE-TARGET-iBGP from community RT2000-iBGP
set policy-options policy-statement IMPORT-POLICY-2000 term ROUTE-TARGET-iBGP then accept
set policy-options community RT2000 members target:65001:2000
set policy-options community RT2000-iBGP members target:65001:2000

set routing-instances evpn-1000 instance-type evpn
set routing-instances evpn-1000 protocols evpn
set routing-instances evpn-1000 vlan-id none
set routing-instances evpn-1000 interface xe-0/1/6.1000
set routing-instances evpn-1000 route-distinguisher 10.255.1.2:1000
set routing-instances evpn-1000 vrf-import IMPORT-POLICY-1000
set routing-instances evpn-1000 vrf-target target:65001:1000

set routing-instances evpn-2000 instance-type evpn
set routing-instances evpn-2000 protocols evpn
set routing-instances evpn-2000 vlan-id none
set routing-instances evpn-2000 interface xe-0/1/6.2000
set routing-instances evpn-2000 route-distinguisher 10.255.1.2:2000
set routing-instances evpn-2000 vrf-import IMPORT-POLICY-2000
set routing-instances evpn-2000 vrf-target target:65001:2000

BGP の設定

PE1 (IOS XR) 側

RT の設定などは EVI の項で行ったため、 address-family の宣言のみです。

router bgp 65001
 bgp router-id 10.255.1.1
 address-family l2vpn evpn
 !
 neighbor 10.255.1.2
  remote-as 65001
  update-source Loopback0
  address-family l2vpn evpn
  !
 !
!

PE2 (Junos) 側

こちらもネイバーの定義のみです。

set protocols bgp family evpn signaling
set protocols bgp group blog type internal
set protocols bgp group blog local-address 10.255.1.2
set protocols bgp group blog family evpn signaling
set protocols bgp group blog neighbor 10.255.1.1

経路の確認

まず PE1 から PE2 方向に経路を見ていきます。

PE1 での MAC アドレス学習結果と、それぞれの EVI に対する VPN ラベルがついていることが確認できます。

RP/0/RSP0/CPU0:PE1#show evpn evi vpn-id 1000 mac
Wed Jun 29 15:04:57.503 JST

VPN-ID     Encap      MAC address    IP address                               Nexthop                                 Label    SID
---------- ---------- -------------- ---------------------------------------- --------------------------------------- -------- ---------------------------------------
1000       MPLS       0200.0011.1111 ::                                       TenGigE0/0/0/32.1000                    24010
RP/0/RSP0/CPU0:PE1#show evpn evi vpn-id 2000 mac
Wed Jun 29 15:05:04.384 JST

VPN-ID     Encap      MAC address    IP address                               Nexthop                                 Label    SID
---------- ---------- -------------- ---------------------------------------- --------------------------------------- -------- ---------------------------------------
2000       MPLS       0200.0033.3333 ::                                       TenGigE0/0/0/32.2000                    24000

これらの VPN ラベルが着信すると EVPN として処理されます。

RP/0/RSP0/CPU0:PE1#show mpls forwarding
Wed Jun 29 15:08:24.725 JST
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
(snip)
24000  Pop         EVPN:2000 U        BD=0 E       point2point     8136
(snip)
24010  Pop         EVPN:1000 U        BD=1 E       point2point     0
(snip)

PE2 側では顧客 A の経路を学習しています。相手の VPN ラベルが 24010 であることも認識しています。 PE2 に CE から着信したフレームは VPN ラベルと、 PE1 の SID を付けて網内に転送されます。

user@PE2> show route table evpn-1000.evpn.0 evpn-mac-address 02:00:00:11:11:11 extensive

evpn-1000.evpn.0: 7 destinations, 15 routes (7 active, 0 holddown, 0 hidden)
2:10.255.1.1:1000::0::02:00:00:11:11:11/304 MAC/IP (3 entries, 1 announced)
        *BGP    Preference: 170/-101
                Route Distinguisher: 10.255.1.1:1000
                Next hop type: Indirect, Next hop index: 0
                Address: 0x853435c
                Next-hop reference count: 51
                Source: 10.255.1.1
                Protocol next hop: 10.255.1.1
                Indirect next hop: 0x2 no-forward INH Session ID: 0x0
                State: <Secondary Active Int Ext>
                Local AS: 65001 Peer AS: 65001
                Age: 6:34       Metric2: 20
                Validation State: unverified
                ORR Generation-ID: 0
                Task: BGP_65001.10.255.1.1
                Announcement bits (1): 0-evpn-1000-evpn
                AS path: I
                Communities: target:65001:1000 origin:10.255.1.1:1000 unknown iana evpn 0x60e:0x0:0x3e8
                Import Accepted
                Route Label: 24010
                ESI: 00:00:00:00:00:00:00:00:00:01
                Localpref: 100
                Router ID: 10.255.1.1
                Primary Routing Table: bgp.evpn.0
                Thread: junos-main
                Indirect next hops: 1
                        Protocol next hop: 10.255.1.1 Metric: 20
                        Indirect next hop: 0x2 no-forward INH Session ID: 0x0
                        Indirect path forwarding next hops: 1
                                Next hop type: Router
                                Next hop: 10.1.2.1 via xe-0/1/0.0
                                Session Id: 0x0
                                10.255.1.1/32 Originating RIB: inet.3
                                  Metric: 20 Node path count: 1
                                  Forwarding nexthops: 1
                                        Next hop type: Router
                                        Next hop: 10.1.2.1 via xe-0/1/0.0
                                        Session Id: 0x0

疎通試験

顧客 A の CE に相当する VM を両端で 2 台作成し、その間で ping による通信を確認しました。

ping による通信確認のための 1 台目の IP 設定と ping の実施例です。 L3VPN とは異なり、 L2VPN では途中経路を CE 側から調査する方法がないため、 ping が通ることを確認するのみです。

user@vm01:~$ ip a
(snip)
4: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 02:00:00:11:11:11 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::ff:fe11:1111/64 scope link
       valid_lft forever preferred_lft forever
(snip)
6: ens224.1000@ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 02:00:00:11:11:11 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 scope global ens224.1000
       valid_lft forever preferred_lft forever
    inet6 fe80::ff:fe11:1111/64 scope link
       valid_lft forever preferred_lft forever

user@vm01:~$ ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
64 bytes from 192.168.0.2: icmp_seq=1 ttl=64 time=0.758 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=64 time=0.485 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=64 time=0.440 ms
^C
--- 192.168.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2025ms
rtt min/avg/max/mdev = 0.440/0.561/0.758/0.140 ms

2 台目における IP 設定と、パケットキャプチャによる確認です。

user@vm02:~$ ip a
(snip)
4: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 02:00:00:22:22:22 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::ff:fe22:2222/64 scope link
       valid_lft forever preferred_lft forever
(snip)
6: ens224.1000@ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 02:00:00:22:22:22 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 scope global ens224.1000
       valid_lft forever preferred_lft forever
    inet6 fe80::ff:fe22:2222/64 scope link
       valid_lft forever preferred_lft forever

user@vm02:~$ sudo tcpdump -i ens224.1000 -n -nn -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens224.1000, link-type EN10MB (Ethernet), capture size 262144 bytes
20:18:36.037958 02:00:00:11:11:11 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 60: Request who-has 192.168.0.2 tell 192.168.0.1, length 46
20:18:36.038032 02:00:00:22:22:22 > 02:00:00:11:11:11, ethertype ARP (0x0806), length 42: Reply 192.168.0.2 is-at 02:00:00:22:22:22, length 28
20:18:36.038364 02:00:00:11:11:11 > 02:00:00:22:22:22, ethertype IPv4 (0x0800), length 98: 192.168.0.1 > 192.168.0.2: ICMP echo request, id 1, seq 1, length 64
20:18:36.038394 02:00:00:22:22:22 > 02:00:00:11:11:11, ethertype IPv4 (0x0800), length 98: 192.168.0.2 > 192.168.0.1: ICMP echo reply, id 1, seq 1, length 64
20:18:37.039357 02:00:00:11:11:11 > 02:00:00:22:22:22, ethertype IPv4 (0x0800), length 98: 192.168.0.1 > 192.168.0.2: ICMP echo request, id 1, seq 2, length 64
20:18:37.039405 02:00:00:22:22:22 > 02:00:00:11:11:11, ethertype IPv4 (0x0800), length 98: 192.168.0.2 > 192.168.0.1: ICMP echo reply, id 1, seq 2, length 64
20:18:38.063289 02:00:00:11:11:11 > 02:00:00:22:22:22, ethertype IPv4 (0x0800), length 98: 192.168.0.1 > 192.168.0.2: ICMP echo request, id 1, seq 3, length 64
20:18:38.063320 02:00:00:22:22:22 > 02:00:00:11:11:11, ethertype IPv4 (0x0800), length 98: 192.168.0.2 > 192.168.0.1: ICMP echo reply, id 1, seq 3, length 64
20:18:41.054244 02:00:00:22:22:22 > 02:00:00:11:11:11, ethertype ARP (0x0806), length 42: Request who-has 192.168.0.1 tell 192.168.0.2, length 28
20:18:41.054632 02:00:00:11:11:11 > 02:00:00:22:22:22, ethertype ARP (0x0806), length 60: Reply 192.168.0.1 is-at 02:00:00:11:11:11, length 46
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel

このようにして、 Multi-vendor での Single-AS における L2VPN が実現できました。次にこれを Multi-AS へと拡張します。

Multi-AS での L2VPN

Multi-AS へと拡張すると、トポロジーは次の図のようになります。 ASBR は前述の通り対応している機器が限られるため Multi-vendor の環境ではありません。 PE はそれぞれの AS で IOS XR と Junos を 1 台ずつ、 ASBR と P ルーターを介して接続された状態です。

図中ではループバックアドレスの採番や Node SID の採番が AS 間で重複しないようになっていますが、これは説明のわかりやすさのためで、実際には重複することも可能です。ただしループバックアドレスをルーター ID として使用している場合は、特に EVI の RD に気をつける必要があります。

使用した機材および OS バージョンは次の通りです。

  • PE
    • PE1: Cisco ASR9901 (IOS XR 7.6.1)
    • PE2: Juniper MX204 (Junos 21.3R1.9)
  • P
    • P1: Cisco C8201 (IOS XR 7.5.1)
    • P2: Juniper PTX10001 (Junos 21.4R1.15-EVO)
    • P3: Cisco NCS55A2 (IOS XR 7.5.1)
    • P4: Juniper MX10003 (Junos 21.4R1.12)
  • ASBR
    • ASBR1 および ASBR2:Cisco ASR9902 (IOS XR 7.6.1)

IGP や SR の設定、および前述の CE 接続インターフェースの設定は Single-AS と同等なので割愛します。 下記の各項目で、主に Single-AS との差異を順に示します。

  • EVI と BD の設定
  • BGP の設定
  • 経路の確認
  • 疎通試験

EVI と BD の設定

Route Target を相互に学習するための仮想的な AS: 64999 を設定し、有効にします。 BD の設定は Single-AS と同等なので割愛します。

PE1 (IOS XR) 側

evpn
 evi 1000
  bgp
   route-target import 64999:1000
   route-target import 65001:1000
   route-target export 64999:1000
   route-target export 65001:1000
  !
  control-word-disable
  advertise-mac
  !
 !
 evi 2000
  bgp
   rd 65002:2000
   route-target import 64999:2000
   route-target import 65001:2000
   route-target export 64999:2000
   route-target export 65001:2000
  !
  control-word-disable
  advertise-mac
  !
 !
 interface TenGigE0/0/0/32
  ethernet-segment
   identifier type 0 00.00.00.00.00.00.00.00.01
  !
 !
!

PE2 (Junos) 側

送受信で RT を増やします。

set policy-options policy-statement EXPORT-POLICY-1000 term ROUTE-TARGET then community add RT1000
set policy-options policy-statement IMPORT-POLICY-1000 term ROUTE-TARGET-iBGP from community RT1000-iBGP
set policy-options policy-statement IMPORT-POLICY-1000 term ROUTE-TARGET-iBGP then accept
set policy-options policy-statement IMPORT-POLICY-1000 term ROUTE-TARGET-eBGP from community RT1000-eBGP
set policy-options policy-statement IMPORT-POLICY-1000 term ROUTE-TARGET-eBGP then accept
set policy-options community RT1000 members [ target:64999:1000 target:65001:1000 target:65002:1000 ]
set policy-options community RT1000-iBGP members target:65001:1000
set policy-options community RT1000-eBGP members target:64999:1000

set policy-options policy-statement EXPORT-POLICY-2000 term ROUTE-TARGET then community add RT2000
set policy-options policy-statement IMPORT-POLICY-2000 term ROUTE-TARGET-iBGP from community RT2000-iBGP
set policy-options policy-statement IMPORT-POLICY-2000 term ROUTE-TARGET-iBGP then accept
set policy-options policy-statement IMPORT-POLICY-2000 term ROUTE-TARGET-eBGP from community RT2000-eBGP
set policy-options policy-statement IMPORT-POLICY-2000 term ROUTE-TARGET-eBGP then accept
set policy-options community RT2000 members [ target:64999:2000 target:65001:2000 target:65002:2000 ]
set policy-options community RT2000-iBGP members target:65001:2000
set policy-options community RT2000-eBGP members target:64999:2000

set routing-instances evpn-1000 instance-type evpn
set routing-instances evpn-1000 protocols evpn
set routing-instances evpn-1000 vlan-id none
set routing-instances evpn-1000 interface xe-0/1/6.1000
set routing-instances evpn-1000 route-distinguisher 10.255.1.2:1000
set routing-instances evpn-1000 vrf-import IMPORT-POLICY-1000
set routing-instances evpn-1000 vrf-target target:64999:1000

set routing-instances evpn-2000 instance-type evpn
set routing-instances evpn-2000 protocols evpn
set routing-instances evpn-2000 vlan-id none
set routing-instances evpn-2000 interface xe-0/1/6.2000
set routing-instances evpn-2000 route-distinguisher 10.255.1.2:2000
set routing-instances evpn-2000 vrf-import IMPORT-POLICY-2000
set routing-instances evpn-2000 vrf-target target:64999:2000

BGP の設定

このトポロジーでは下記の 3 つの BGP セッションが最低限必要です。

  1. PE1 <-> ASBR1: AS 65001 内の IBGP
  2. ASBR1 <-> ASBR2: AS 65001 と AS 65002 間の EBGP
  3. PE2 <-> ASBR2: AS 65002 内の IBGP

これらのうち 3. は 1. と同等のため割愛します。 まず 1. について、 ASBR で next-hop-self の設定が必要になります。

ASBR1 (IOS XR) 側

router bgp 65001
 bgp router-id 10.255.1.7
 neighbor 10.255.1.1
  remote-as 65001
  address-family l2vpn evpn
   next-hop-self

次に 2. について、 ASBR 間では Option B を有効にします。また、 EBGP ではデフォルトで経路が拒否されるため検証用にすべてを許可します。 ASBR2 側も同様です。

ASBR1 (IOS XR) 側

router bgp 65001
 bgp router-id 10.255.1.7
 address-family l2vpn evpn
  label mode per-nexthop-received-label
  retain route-target all
  option-b-asbr-only
 !
 neighbor 10.100.2.2
  remote-as 65002
  address-family l2vpn evpn
   route-policy pass-all in
   route-policy pass-all out

route-policy pass-all
  pass
end-policy

経路の確認

Single-AS と同様に PE1 から PE2 方向に経路を見ていきます。

PE1 での MAC アドレス学習結果と、 VPN ラベル 24010 がついていることが確認できます。

RP/0/RSP0/CPU0:PE1#show evpn evi vpn-id 1000 mac
Thu Jun 30 15:11:19.848 JST

VPN-ID     Encap      MAC address    IP address                               Nexthop                                 Label    SID
---------- ---------- -------------- ---------------------------------------- --------------------------------------- -------- ---------------------------------------
1000       MPLS       000c.2915.e72d ::                                       10.255.1.7                              24010
1000       MPLS       000c.2915.e72d 192.168.0.4                              10.255.1.7                              24010
1000       MPLS       0200.0011.1111 ::                                       TenGigE0/0/0/32.1000                    24010
1000       MPLS       0200.0022.2222 ::                                       10.255.1.2                              122
1000       MPLS       0200.0022.2222 192.168.0.2                              10.255.1.2                              122

ASBR1 では Inter-AS の VPN から受信したときに AS 65001 内の VPN へと Swap します。 ここでは Inter-AS 側から 24020 を受け取ったときに 24010 へと Swap して PE1 に送ることから、 Inter-AS ではこの VPN 用に 24020 が使われていることがわかります。

RP/0/RP0/CPU0:ASBR1#show mpls forwarding
Thu Jun 30 15:13:15.420 JST
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
(snip)
24020  24010       No ID                           10.255.1.1      0
(snip)

ASBR2 では AS 65002 内で VPN 識別に使用するラベルを生成し、そのラベルがついたものを 24020 へと Swap し Inter-AS に送り出します。 ここでは Inter-AS 向けの出力で 24020 を使用するルールを探すことで AS 65002 内では 24013 がこの VPN 用に使用されていることがわかります。

RP/0/RP0/CPU0:ASBR2#show mpls forwarding
Thu Jun 30 15:18:38.479 JST
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
(snip)
24013  24020       No ID              Te0/0/0/25   10.100.2.1      0
(snip)

PE2 で学習される経路とラベルを見ると、上記で確認した 24013 であり、 ASBR2 で正しく転送されるラベルが学習されています。

user@PE2> show route table evpn-1000.evpn.0 evpn-mac-address 02:00:00:11:11:11 extensive

evpn-1000.evpn.0: 13 destinations, 22 routes (13 active, 0 holddown, 0 hidden)
2:10.255.1.1:1000::0::02:00:00:11:11:11/304 MAC/IP (2 entries, 1 announced)
        *BGP    Preference: 170/-101
                Route Distinguisher: 10.255.1.1:1000
                Next hop type: Indirect, Next hop index: 0
                Address: 0xc2275dc
                Next-hop reference count: 62
                Source: 10.255.2.5
                Protocol next hop: 10.255.2.1
                Indirect next hop: 0x2 no-forward INH Session ID: 0x0
                State: <Secondary Active Int Ext>
                Local AS: 65002 Peer AS: 65002
                Age: 21:38      Metric2: 30
                Validation State: unverified
                ORR Generation-ID: 0
                Task: BGP_65002.10.255.2.5
                Announcement bits (1): 0-evpn-1000-evpn
                AS path: 65001 I  (Originator)
                Cluster list:  0.0.0.1
                Originator ID: 10.255.2.1
                Communities: target:64999:1000 target:65001:1000 origin:10.255.1.1:1000 unknown iana evpn 0x60e:0x0:0x3e8
                Import Accepted
                Route Label: 24013
                ESI: 00:00:00:00:00:00:00:00:00:01
                Localpref: 100
                Router ID: 10.255.2.1
                Primary Routing Table: bgp.evpn.0
                Thread: junos-main
                Indirect next hops: 1
                        Protocol next hop: 10.255.2.1 Metric: 30
                        Indirect next hop: 0x2 no-forward INH Session ID: 0x0
                        Indirect path forwarding next hops: 1
                                Next hop type: Router
                                Next hop: 10.2.4.1 via et-0/0/1.0 weight 0x1
                                Session Id: 0x0
                                10.255.2.1/32 Originating RIB: inet.3
                                  Metric: 30 Node path count: 1
                                  Forwarding nexthops: 1
                                        Next hop type: Router
                                        Next hop: 10.2.4.1 via et-0/0/1.0 weight 0x1
                                        Session Id: 0x0

疎通試験

Single-AS の時と同様に、顧客 A の CE に相当する VM を両端で 2 台作成し、その間で ping による通信を確認しました。 前述の繰り返しですが、CE 側からは経路を確認できず ping の通信で確かめるため、コマンド出力は全く同じになります。掲載は省略します。

まとめ

本記事では Single-/Multi-AS SR-MPLS での L2VPN について解説しました。 VLAN-based で構築する際の、 EVI 等の設定や確認例を紹介しました。 機能実装に差があり完全な Multi-vendor ではありませんが、 Multi-AS での検証について紹介しました。

次回の記事では、 BGP color による Explicit-path TE を紹介予定です。

(2022/07/25 追記) 公開しました:[Multi-AS Segment Routing 検証連載 #4] Color-Based Steering in Single-AS


  1. Virtual Private Wire Service の略。仮想専用線サービス。

  2. Virtual Private LAN Service の略。仮想専用 LAN サービス。

  3. Multiprotocol BGP の略。BGP の拡張コミュニティを用いて追加情報を交換する仕組み。

  4. Release Notes for Cisco ASR 9000 Series Routers, IOS XR Release 7.4.1 より、 Inter-AS EVPN Option B の新機能。

© NTT Communications Corporation All Rights Reserved.