[Multi-AS Segment Routing 検証連載 #2] SR-MPLS L3VPN in Multi-AS

サマリ

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

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

概要

イノベーションセンターの岩田です。普段の業務では Multi-AS Segment Routing に関する技術検証や、ベンチャー企業への技術支援でスマートフォンアプリケーション開発業務などを行なっています。

本記事では我々の検証のメインターゲットである Multi-AS/Multi-domain SR-MPLS を用いた L3VPN についてご紹介します。

第 0 回の記事 でもご紹介した通り、我々は Multi-AS/Multi-domain SR により拡張性のあるネットワークの実現について検討、検証しています。本記事の流れとしては、まずアンダーレイを複数の AS やドメインに分割する利点について述べ、分割した AS をどのように接続するかについて検討します。その後、Multi-AS/Multi-domain SR-MPLS を用いた L3VPN の Multi-vendor 環境における検証例を、サンプルトポロジーや設定例を添えながら紹介します。

L3VPN や Segment Routing については 第 1 回の記事 で説明しているので、あわせてご確認ください。

アンダーレイを Multi-AS/Multi-domain に分ける利点

本節では、Multi-AS/Multi-domain で アンダーレイ(Underlay)を構築する利点について説明します。

アンダーレイを Multi-AS/Multi-domain に分けて構築する最大の利点は、アンダーレイの拡張性や保守性が担保される点です。

アンダーレイ の拡張性の観点では、単一の SR domain を構築する際に IP 重複できない制約があるため、プライベート IP を使用している場合だと規模の拡大とともに設計の制約が増加する、という課題への対処が必要になります。AS を分割することによって AS 間での IP 重複を考えずにすみます。

また保守性の観点からも、大規模ネットワークを IGP で管理している場合、機器トラブルなどが発生しルーティングに影響があった際の罹障範囲が大きくなるという課題があります。こちらも AS や SR domain を分割することで罹障範囲を局所化できます。

このように AS や SR domain を複数に分割することで、設計の自由度を保ち IGP や IBGP の影響範囲を局所化できるため、拡張性と保守性のあるネットワークが構築できます。

Inter-AS の接続方式について

Multi-AS で MPLS VPN を行うためには Inter-AS の接続方式について考える必要があります。 本節では、RFC にて標準化されている 3 つの接続方式とそれらを組み合わせた方式について説明し、今回どの方式を採用するかについて説明します。

接続方式の選定方針は前節で説明した通り、設計の自由度を保ち IGP や IBGP の影響範囲を局所化し、拡張性と保守性のあるネットワークが構築できるかどうかとします。

Multi-AS で MPLS VPN を実現する方法としては RFC4364 で標準化されている Option A、B、C の3つの方式と、A と B を組み合わせた方式 D が知られています。

それぞれ以下のような特徴があります。

Option A

  • ASBR で顧客毎に サブインタフェースと VRF を作成し EBGP セッション経由で経路を交換する
  • ASBR 間の各サブインタフェース間では単純な IP パケットを転送し AS を接続する
  • ASBR 間に顧客の数だけサブインターフェースを作成する必要がある
  • EBGP セッションは各 VRF で行うため、各サブインタフェースに設定が必要になる

Option B

  • ASBR で単一のインタフェースを用いて EBGP セッションを張り VPN 経路を交換する
  • ASBR で VPN ラベルを Swap し ASBR 間を別のラベルを用いて転送し AS を接続する

Option C

  • VPN 経路を RR 経由で交換し、互いのアンダーレイ情報を共有する
  • ASBR に VRF が不要
  • Multi-AS で 単一の SR domain を構築できる
  • アンダーレイを共有するため制約が増え、前述の Multi-AS の利点のうちの拡張性は減少する

Option D(A+B)

  • ASBR で単一のインタフェースを用いて EBGP セッションを張り VPN 経路を交換する (B と同様)
  • ASBR 間は顧客毎に作成したサブインタフェース間で単純な IP パケットの転送をすることで AS を接続する (A と同様)
  • ASBR 間に顧客の数だけサブインターフェースを作成する必要がある(A と同様)
  • VPN 経路の交換は単一インタフェースを用いて行うため各インタフェースへの設定が不要(A ではインタフェース毎)

まとめますと以下のようになります。

  • A : ASBR に顧客ごとのサブインターフェースや EBGP セッションなどの設定が必要
  • B : AS が制限少なく独立して存在でき、 ASBR 間も単一のセッションになる
  • C :アンダーレイ が AS 間で広告されるため、今回の目的に不向き
  • A+B(D): A の状況のうちサブインターフェースの設定が同様に残る

その中でも、今回は Option B を採用しました。IGP、IBGP の責任範囲を疎に分離して運用できる方式であり、拡張性・保守性が他の Option に比べて高いことが選択理由です。

ただし機器と SR、VPN、Option-B を組み合わせて ASBR として用いるにはサポート状況に差があります。 L3VPN については、我々が検証を始めた時点での ASR9901(IOS XR 7.3.1) や MX204(Junos 21.2)で既にサポートされています。 しかし L2VPN(EVPN)は IOS XR 7.4.1 1 からの対応で、Junos は 2022 年 6 月時点で未対応です。

検証例の紹介

以降は L3VPN の検証例を実際の設定例を添えつつ紹介します。

サンプルトポロジー&想定するユースケース

検証のため、下記のようなトポロジーを作成します。

3 つのルーターによる AS を 2 つ接続したコア網で、顧客 A と B を収容します。 検証環境は Multi-vendor に構成します。使用する機器は下記の通りです。

  • SR Domain 1

    • PE1、ASBR1: Cisco IOS XR 7.4.1
    • ASBR2: Junos OS 21.3R1.9
  • SR Domain 2

    • ASBR3: Cisco IOS XR 7.4.1
    • PE2、ASBR4: Junos OS 21.3R1.9

この後は下記の流れに従って設定を紹介します。

  • IS-IS 設定と状態確認
  • VRF と MP-BGP 設定と状態確認
  • PE 間の ping 疎通試験

IS-IS - 設定

IS-IS の SR 拡張を利用し、SR-MPLS の SID 情報を広告します。 また、運用効率化のため MPLS OAM の設定もしておきます。

IOS XR(例: PE1)

router isis 1
 is-type level-2-only
 net 49.0000.0000.0aff.0001.00
 segment-routing global-block 16000 23999
 address-family ipv4 unicast
  metric-style wide
  segment-routing mpls
 !
 interface Loopback0
  address-family ipv4 unicast
   prefix-sid index 1
  !
 !
 interface GigabitEthernet0/0/0/0
  point-to-point
  address-family ipv4 unicast
  !
 !
 interface GigabitEthernet0/0/0/1
  point-to-point
  address-family ipv4 unicast
  !
 !
!
segment-routing
!

Junos(例: PE2)

set protocols isis interface ge-0/0/0.0 level 2 metric 10
set protocols isis interface ge-0/0/0.0 point-to-point
set protocols isis interface ge-0/0/1.0 level 2 metric 10
set protocols isis interface ge-0/0/1.0 point-to-point
set protocols isis interface lo0.0 passive
set protocols isis source-packet-routing srgb start-label 16000
set protocols isis source-packet-routing srgb index-range 8000
set protocols isis source-packet-routing node-segment ipv4-index 1
set protocols isis level 1 disable
set protocols isis level 2 wide-metrics-only

set interfaces ge-0/0/0 unit 0 family inet address 10.0.0.1/30
set interfaces ge-0/0/0 unit 0 family iso
set interfaces ge-0/0/0 unit 0 family mpls

set interfaces ge-0/0/1 unit 0 family inet address 10.0.1.1/30
set interfaces ge-0/0/1 unit 0 family iso
set interfaces ge-0/0/1 unit 0 family mpls

set interfaces lo0 unit 0 family inet address 10.255.0.1/32
set interfaces lo0 unit 0 family iso address 49.0000.0000.0aff.0001.00

SR Global Block(SRGB)の変更後は再起動が必要です。

IS-IS - 動作確認

IS-IS ネイバーの状態と SID Table を確認します。

IOS XR

RP/0/RP0/CPU0:pe1#show isis neighbors
Fri Jun 17 13:37:40.431 JST

IS-IS 1 neighbors:
System Id      Interface        SNPA           State Holdtime Type IETF-NSF
asbr1          Gi0/0/0/0        *PtoP*         Up    24       L2   Capable
asbr2          Gi0/0/0/1        *PtoP*         Up    20       L2   Capable

Total neighbor count: 2
RP/0/RP0/CPU0:pe1#show mpls forwarding
Fri Jun 17 13:37:45.932 JST
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
16002  Pop         SR Pfx (idx 2)     Gi0/0/0/0    10.0.0.2        0
16003  Pop         SR Pfx (idx 3)     Gi0/0/0/1    10.0.1.2        324511
24000  Pop         SR Adj (idx 1)     Gi0/0/0/0    10.0.0.2        0
24001  Pop         SR Adj (idx 3)     Gi0/0/0/0    10.0.0.2        0
24004  Pop         SR Adj (idx 1)     Gi0/0/0/1    10.0.1.2        0
24005  Pop         SR Adj (idx 3)     Gi0/0/0/1    10.0.1.2        0

Junos

user@pe2> show isis adjacency
Interface             System         L State        Hold (secs) SNPA
ge-0/0/0.0            asbr3          2  Up                   28
ge-0/0/1.0            asbr4          2  Up                   26

user@pe2> show route protocol isis table mpls.0

mpls.0: 14 destinations, 14 routes (14 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

18                 *[L-ISIS/14] 1d 03:49:30, metric 0
                    >  to 10.0.1.2 via ge-0/0/1.0, Pop
18(S=0)            *[L-ISIS/14] 1d 03:49:30, metric 0
                    >  to 10.0.1.2 via ge-0/0/1.0, Pop
19                 *[L-ISIS/14] 1d 03:48:12, metric 0
                    >  to 10.0.0.2 via ge-0/0/0.0, Pop
19(S=0)            *[L-ISIS/14] 1d 03:48:12, metric 0
                    >  to 10.0.0.2 via ge-0/0/0.0, Pop
16002              *[L-ISIS/14] 00:08:15, metric 20
                    >  to 10.0.0.2 via ge-0/0/0.0, Pop
16002(S=0)         *[L-ISIS/14] 00:08:15, metric 20
                    >  to 10.0.0.2 via ge-0/0/0.0, Pop
16003              *[L-ISIS/14] 1d 03:49:30, metric 10
                    >  to 10.0.1.2 via ge-0/0/1.0, Pop
16003(S=0)         *[L-ISIS/14] 1d 03:49:30, metric 10
                    >  to 10.0.1.2 via ge-0/0/1.0, Pop

Static Route(IOS XR) - 機器設定

※こちらハマりポイントなのでご注意ください。

IOS XR で Inter-AS を行う際には、ASBR のピアの片方で /32 の Static Route を設定する必要があります。 これを行わないとコントロールプレーンは立ち上がりますがトラフィックが転送されません。 詳しくはこちらをご参照ください。

router static
 address-family ipv4 unicast
  10.100.0.2/32 GigabitEthernet0/0/0/2
 !
!

Static Route(IOS XR) - 動作確認

RP/0/RP0/CPU0:asbr1#show route static
Fri Jun 17 13:29:28.349 JST

S    10.100.0.2/32 is directly connected, 1d02h, GigabitEthernet0/0/0/2

VRF、MP-BGP VPNv4 - 機器設定

顧客 A、B の VRF 設定と、経路を広告する MP-BGP L3VPN を設定します。 VPN の各パラメータは下記の通りです。

  • SR Domain 1

    • AS 番号: 65000
    • VRF 100:
      • RD/RT 65000:100
      • AS 間での VPN 経路広告用 RT: 64999:100
    • VRF 200:
      • RD/RT 65000:200
      • AS 間での VPN 経路広告用 RT: 64999:200
  • SR Domain 2

    • AS 番号: 65001
    • VRF 100:
      • RD/RT 65001:100
      • AS 間での VPN 経路広告用 RT: 64999:100
    • VRF 200:
      • RD/RT 65001:200
      • AS 間での VPN 経路広告用 RT: 64999:200

PE(IOS XR : PE1)

vrf 100
 description for simple L3VPN
 rd 65000:100
 address-family ipv4 unicast
  import route-target
   64999:100
   65000:100
  !
  export route-target
   64999:100
   65000:100
  !
 !
!
vrf 200
 description for simple L3VPN
 rd 65000:200
 address-family ipv4 unicast
  import route-target
   64999:200
   65000:200
  !
  export route-target
   64999:200
   65000:200
  !
 !
!
interface GigabitEthernet0/0/0/2
 vrf 100
 ipv4 address 192.168.0.254 255.255.255.0
!
interface GigabitEthernet0/0/0/3
 vrf 200
 ipv4 address 192.168.0.254 255.255.255.0
!
router bgp 65000
 bgp router-id 10.255.0.1
 address-family vpnv4 unicast
 !
 neighbor-group ibgp
  remote-as 65000
  update-source Loopback0
  address-family vpnv4 unicast
  !
 !
 neighbor 10.255.0.2
  use neighbor-group ibgp
 !
 neighbor 10.255.0.3
  use neighbor-group ibgp
 !
 vrf 100
  rd 65000:100
  address-family ipv4 unicast
   label mode per-vrf
   redistribute connected
  !
 !
 vrf 200
  rd 65000:200
  address-family ipv4 unicast
   label mode per-vrf
   redistribute connected
  !
 !
!

PE(Junos : PE2)

set policy-options policy-statement EXPORT-POLICY-100 term ROUTE-TARGET then community add VRF100-65001-RT
set policy-options policy-statement EXPORT-POLICY-100 term ROUTE-TARGET then community add SHARED-100-RT
set policy-options policy-statement EXPORT-POLICY-100 term REDIST-DIRECT from protocol direct
set policy-options policy-statement EXPORT-POLICY-100 term REDIST-DIRECT then accept
set policy-options policy-statement EXPORT-POLICY-200 term ROUTE-TARGET then community add VRF200-65001-RT
set policy-options policy-statement EXPORT-POLICY-200 term ROUTE-TARGET then community add SHARED-200-RT
set policy-options policy-statement EXPORT-POLICY-200 term REDIST-DIRECT from protocol direct
set policy-options policy-statement EXPORT-POLICY-200 term REDIST-DIRECT then accept
set policy-options policy-statement IMPORT-POLICY-100 term ROUTE-TARGET-65001 from community VRF100-65001-RT
set policy-options policy-statement IMPORT-POLICY-100 term ROUTE-TARGET-65001 then accept
set policy-options policy-statement IMPORT-POLICY-100 term ROUTE-TARGET-SHARED from community SHARED-100-RT
set policy-options policy-statement IMPORT-POLICY-100 term ROUTE-TARGET-SHARED then accept
set policy-options policy-statement IMPORT-POLICY-200 term ROUTE-TARGET-65001 from community VRF200-65001-RT
set policy-options policy-statement IMPORT-POLICY-200 term ROUTE-TARGET-65001 then accept
set policy-options policy-statement IMPORT-POLICY-200 term ROUTE-TARGET-SHARED from community SHARED-200-RT
set policy-options policy-statement IMPORT-POLICY-200 term ROUTE-TARGET-SHARED then accept

set policy-options community SHARED-100-RT members target:64999:100
set policy-options community SHARED-200-RT members target:64999:200
set policy-options community VRF100-65001-RT members target:65001:100
set policy-options community VRF200-65001-RT members target:65001:200

set routing-instances 100 instance-type vrf
set routing-instances 100 protocols bgp family inet unicast
set routing-instances 100 interface ge-0/0/2.0
set routing-instances 100 route-distinguisher 65001:100
set routing-instances 100 vrf-import IMPORT-POLICY-100
set routing-instances 100 vrf-export EXPORT-POLICY-100
set routing-instances 100 vrf-table-label
set routing-instances 200 instance-type vrf
set routing-instances 200 protocols bgp family inet unicast
set routing-instances 200 interface ge-0/0/3.0
set routing-instances 200 route-distinguisher 65001:200
set routing-instances 200 vrf-import IMPORT-POLICY-200
set routing-instances 200 vrf-export EXPORT-POLICY-200
set routing-instances 200 vrf-table-label
set routing-options router-id 10.255.0.1
set routing-options autonomous-system 65001

set protocols router-advertisement interface fxp0.0
set protocols bgp family inet unicast
set protocols bgp family inet-vpn unicast
set protocols bgp group ibgp type internal
set protocols bgp group ibgp local-address 10.255.0.1
set protocols bgp group ibgp family inet-vpn unicast
set protocols bgp group ibgp neighbor 10.255.0.2
set protocols bgp group ibgp neighbor 10.255.0.3

ASBR(IOS XR : ASBR1)

vrf 100
 description for simple L3VPN
 rd 65000:100
 address-family ipv4 unicast
  import route-target
   64999:100
   65000:100
  !
  export route-target
   64999:100
   65000:100
  !
 !
!
vrf 200
 description for simple L3VPN
 rd 65000:200
 address-family ipv4 unicast
  import route-target
   64999:200
   65000:200
  !
  export route-target
   64999:200
   65000:200
  !
 !
!
router bgp 65000
 bgp router-id 10.255.0.2
 address-family vpnv4 unicast
 !
 neighbor-group ibgp
  remote-as 65000
  update-source Loopback0
  address-family vpnv4 unicast
   next-hop-self
  !
 !
 neighbor-group 65001
  remote-as 65001
  address-family vpnv4 unicast
   route-policy pass-all in
   route-policy pass-all out
  !
 !
 neighbor 10.100.0.2
  use neighbor-group 65001
 !
 neighbor 10.255.0.1
  use neighbor-group ibgp
 !
 neighbor 10.255.0.3
  use neighbor-group ibgp
 !
 vrf 100
  rd 65000:100
  address-family ipv4 unicast
   label mode per-vrf
  !
 !
 vrf 200
  rd 65000:200
  address-family ipv4 unicast
   label mode per-vrf
  !
 !
!

ASBR(Junos : ASBR4)

set policy-options policy-statement EXPORT-POLICY-100 term ROUTE-TARGET then community add VRF100-65001-RT
set policy-options policy-statement EXPORT-POLICY-100 term ROUTE-TARGET then community add SHARED-100-RT
set policy-options policy-statement EXPORT-POLICY-200 term ROUTE-TARGET then community add VRF200-65001-RT
set policy-options policy-statement EXPORT-POLICY-200 term ROUTE-TARGET then community add SHARED-200-RT
set policy-options policy-statement IMPORT-POLICY-100 term ROUTE-TARGET-65001 from community VRF100-65001-RT
set policy-options policy-statement IMPORT-POLICY-100 term ROUTE-TARGET-65001 then accept
set policy-options policy-statement IMPORT-POLICY-100 term ROUTE-TARGET-SHARED from community SHARED-100-RT
set policy-options policy-statement IMPORT-POLICY-100 term ROUTE-TARGET-SHARED then accept
set policy-options policy-statement IMPORT-POLICY-200 term ROUTE-TARGET-65001 from community VRF200-65001-RT
set policy-options policy-statement IMPORT-POLICY-200 term ROUTE-TARGET-65001 then accept
set policy-options policy-statement IMPORT-POLICY-200 term ROUTE-TARGET-SHARED from community SHARED-200-RT
set policy-options policy-statement IMPORT-POLICY-200 term ROUTE-TARGET-SHARED then accept

set policy-options community SHARED-100-RT members target:64999:100
set policy-options community SHARED-200-RT members target:64999:200
set policy-options community VRF100-65001-RT members target:65001:100
set policy-options community VRF200-65001-RT members target:65001:200

set routing-instances 100 instance-type vrf
set routing-instances 100 protocols bgp family inet unicast
set routing-instances 100 route-distinguisher 65001:100
set routing-instances 100 vrf-import IMPORT-POLICY-100
set routing-instances 100 vrf-export EXPORT-POLICY-100
set routing-instances 100 vrf-table-label
set routing-instances 200 instance-type vrf
set routing-instances 200 protocols bgp family inet unicast
set routing-instances 200 route-distinguisher 65001:200
set routing-instances 200 vrf-import IMPORT-POLICY-200
set routing-instances 200 vrf-export EXPORT-POLICY-200
set routing-instances 200 vrf-table-label

set routing-options router-id 10.255.0.3
set routing-options autonomous-system 65001

set protocols router-advertisement interface fxp0.0
set protocols bgp family inet-vpn unicast
set protocols bgp group ibgp type internal
set protocols bgp group ibgp local-address 10.255.0.3
set protocols bgp group ibgp neighbor 10.255.0.1
set protocols bgp group 65000 type external
set protocols bgp group 65000 peer-as 65000
set protocols bgp group 65000 neighbor 10.100.1.1

MP-BGP VPNv4 - 動作確認

下記3ステップで L3VPN の経路学習と転送動作を確認します。 今回は各ベンダーの ASBR の組で動作確認がしたいので、選択させたくない ASBR 間のリンクを落とすことで選択させます。

  1. 動作確認したい ASBR の組以外の ASBR 間のリンクを落とす
  2. BGP から受信した経路を確認
  3. ping による疎通確認

IOS XR の ASBR(ASBR1->ASBR3)を利用する場合

顧客 A(VRF100)が利用する場合を想定し動作確認をしていきます。

Junos の ASBR 間(ASBR2<->ASBR4)のリンクを落とします。

user@asbr2> configure
Entering configuration mode

[edit]
user@asbr2# set interfaces ge-0/0/2 disable

[edit]
user@asbr2# show | compare
[edit interfaces ge-0/0/2]
+   disable;

[edit]
user@asbr2# commit
commit complete

user@asbr2# exit
Exiting configuration mode

user@asbr2> ping 10.100.1.2 count 5
PING 10.100.1.2 (10.100.1.2): 56 data bytes
^C
--- 10.100.1.2 ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss

次に、PE1(IOS XR) が受信した経路を確認します。

RP/0/RP0/CPU0:pe1#show bgp vpnv4 unicast vrf 100 192.168.1.0/24 detail
Mon Jun 20 14:14:13.121 JST
BGP routing table entry for 192.168.1.0/24, Route Distinguisher: 65000:100
Versions:
  Process           bRIB/RIB  SendTblVer
  Speaker                 62          62
    Flags: 0x00001001+0x00000000;
Last Modified: Jun 20 14:12:27.073 for 00:01:46
Paths: (1 available, best #1)
  Not advertised to any peer
  Path #1: Received by speaker 0
  Flags: 0x2000000005060005, import: 0x80
  Not advertised to any peer
  65001
    10.255.0.2 (metric 20) from 10.255.0.2 (10.255.0.2), if-handle 0x00000000
      Received Label 24007
      Origin IGP, localpref 100, valid, internal, best, group-best, import-candidate, imported
      Received Path ID 0, Local Path ID 1, version 62
      Extended community: RT:64999:100 RT:65001:100
      Source AFI: VPNv4 Unicast, Source VRF: default, Source Route Distinguisher: 65001:100

RP/0/RP0/CPU0:pe1#show route vrf 100
Mon Jun 20 12:35:07.389 JST

Codes: C - connected, S - static, R - RIP, B - BGP, (>) - Diversion path
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
       i - ISIS, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, su - IS-IS summary null, * - candidate default
       U - per-user static route, o - ODR, L - local, G  - DAGR, l - LISP
       A - access/subscriber, a - Application route
       M - mobile route, r - RPL, t - Traffic Engineering, (!) - FRR Backup path

Gateway of last resort is not set

C    192.168.0.0/24 is directly connected, 22:01:15, GigabitEthernet0/0/0/2
L    192.168.0.254/32 is directly connected, 22:01:15, GigabitEthernet0/0/0/2
B    192.168.1.0/24 [200/0] via 10.255.0.2 (nexthop in vrf default), 00:08:01

経路が受信できている事と、ASBR1(IOS XR)が選択されていることが確認できました。 ping で疎通確認を行なってみます。

RP/0/RP0/CPU0:pe1#ping 192.168.1.254 vrf 100
Mon Jun 20 12:33:13.840 JST
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.1.254, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 2/6/12 ms

パケットが転送でき、VPN が構築できていることが確認できました。

Junos の ASBR(ASBR2->ASBR4)を利用する場合

今度は顧客 B(VRF200)が利用する場合を想定し動作確認をしていきます。

まず、IOS XR の ASBR 間(ASBR1<->ASBR3)のリンクを落とします。

RP/0/RP0/CPU0:asbr1#configure
Mon Jun 20 12:40:44.843 JST
RP/0/RP0/CPU0:asbr1(config)#interface gigabitEthernet 0/0/0/2
RP/0/RP0/CPU0:asbr1(config-if)#shutdown
RP/0/RP0/CPU0:asbr1(config-if)#show commit changes diff
Mon Jun 20 12:41:02.632 JST
Building configuration...
!! IOS XR Configuration 7.4.1
+  interface GigabitEthernet0/0/0/2
+   shutdown
   !
end

RP/0/RP0/CPU0:asbr1(config-if)#commit
Mon Jun 20 12:41:06.779 JST
RP/0/RP0/CPU0:asbr1(config-if)#exit
RP/0/RP0/CPU0:asbr1(config)#exit

RP/0/RP0/CPU0:asbr1#ping 10.100.0.2
Mon Jun 20 12:41:56.670 JST
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.100.0.2, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)

次に、Junos が受信した経路を確認します。

user@pe2> show route advertising-protocol bgp 10.255.0.3 detail

100.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
* 192.168.1.0/24 (1 entry, 1 announced)
 BGP group ibgp type Internal
     Route Distinguisher: 65001:100
     VPN Label: 16
     Nexthop: Self
     Flags: Nexthop Change
     Localpref: 100
     AS path: [65001] I
     Communities: target:64999:100 target:65001:100

200.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)

* 192.168.1.0/24 (1 entry, 1 announced)
 BGP group ibgp type Internal
     Route Distinguisher: 65001:200
     VPN Label: 17
     Nexthop: Self
     Flags: Nexthop Change
     Localpref: 100
     AS path: [65001] I
     Communities: target:64999:200 target:65001:200

hanabi@pe2> show route receive-protocol bgp 10.255.0.3 table bgp.l3vpn.0 detail

bgp.l3vpn.0: 2 destinations, 4 routes (2 active, 0 holddown, 0 hidden)
* 65000:100:192.168.0.0/24 (2 entries, 0 announced)
     Import Accepted
     Route Distinguisher: 65000:100
     VPN Label: 16
     Nexthop: 10.255.0.3
     Localpref: 100
     AS path: 65000 ?
     Communities: target:64999:100 target:65000:100

* 65000:200:192.168.0.0/24 (2 entries, 0 announced)
     Import Accepted
     Route Distinguisher: 65000:200
     VPN Label: 17
     Nexthop: 10.255.0.3
     Localpref: 100
     AS path: 65000 ?
     Communities: target:64999:200 target:65000:200

user@pe2> show route 192.168.0.0/24

100.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.168.0.0/24     *[BGP/170] 00:49:52, localpref 100, from 10.255.0.3
                      AS path: 65000 ?, validation-state: unverified
                    >  to 10.0.1.2 via ge-0/0/1.0, Push 16

200.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

192.168.0.0/24     *[BGP/170] 00:49:52, localpref 100, from 10.255.0.3
                      AS path: 65000 ?, validation-state: unverified
                    >  to 10.0.1.2 via ge-0/0/1.0, Push 17

bgp.l3vpn.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both

65000:100:192.168.0.0/24
                   *[BGP/170] 00:49:52, localpref 100, from 10.255.0.3
                      AS path: 65000 ?, validation-state: unverified
                    >  to 10.0.1.2 via ge-0/0/1.0, Push 16
65000:200:192.168.0.0/24
                   *[BGP/170] 00:49:52, localpref 100, from 10.255.0.3
                      AS path: 65000 ?, validation-state: unverified
                    >  to 10.0.1.2 via ge-0/0/1.0, Push 17

経路が受信できている事と、ASBR4(Junos)の ループバックアドレス(10.0.1.2)が nexthop として選択されていることが確認できました。 ping で疎通確認を行なってみます。

user@pe2> ping 192.168.0.254 routing-instance 200 count 5
PING 192.168.0.254 (192.168.0.254): 56 data bytes
64 bytes from 192.168.0.254: icmp_seq=0 ttl=253 time=4.264 ms
64 bytes from 192.168.0.254: icmp_seq=1 ttl=253 time=10.481 ms
64 bytes from 192.168.0.254: icmp_seq=2 ttl=253 time=11.079 ms
64 bytes from 192.168.0.254: icmp_seq=3 ttl=253 time=6.493 ms
64 bytes from 192.168.0.254: icmp_seq=4 ttl=253 time=3.516 ms

--- 192.168.0.254 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 3.516/7.167/11.079/3.114 ms

パケットが転送でき、VPN が構築できていることが確認できました。

これで、ASBR が IOS XR の場合と、Junos の場合共に、VPN が構築できていることが確認できました。

まとめ

本記事では、 Multi-AS/Multi-domain での アンダーレイ 構築の利点、SR-MPLS を用いた L3VPN 実装時の Inter-AS 方式を紹介するとともに、 Multi-vendor 環境における Multi-AS での L3VPN の検証結果を紹介しました。 次回の記事では、SR-MPLS EVPN in Single/Multi-AS について紹介予定です。

(2022/07/11 追記) 公開しました:[Multi-AS Segment Routing 検証連載 #3] SR-MPLS L2VPN (EVPN) in Single-/Multi-AS

参考資料

この検証の一部は弊チームの田島、三島がそれぞれ MPLS JAPAN 2021 、社外勉強会で発表しました。以下に資料を公開していますので併せてご覧ください。

© NTT Communications Corporation All Rights Reserved.