[Multi-AS Segment Routing 検証連載 #15] IGP Flexible Algorithm Interoperability Updates

サマリ

  • Flexible Algorithm による VPN 経路の TE を SR OS で実現
  • IOS XR + Junos + SR OS の Multi-vendor 環境で TE と Delay metric を含めた Algorithm の定義と動作検証に成功

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

概要

イノベーションセンターの吉田 晴信です。 普段の業務では Multi-AS Segment Routing に関する技術検証をしています。

第 6 回 の記事で IOS XR + Junos の2つのベンダー機器で構成される Flexible Algorithm (以降 Flex-Algorithm と呼びます) についてご紹介しました。

今回新たに Nokia SR OS (Service Router Operating System) を加えた3つのベンダー機器での Flex-Algorithm 相互動作確認をご紹介します。 さらに第 6 回は IGP metric の検証のみでしたが、今回は TE と Delay metric を用いた Flex-Algorithm の作成と動作確認を行いましたので、そちらもご紹介します。

なお、Flex-Algorithm の説明は、第 6 回記事の概要章にてご紹介しましたので、そちらをご参照ください。

Multi-vendor Flex-Algorithm 動作確認検証

本記事では、Nokia SR OS を加えた3つのベンダー機器での Flex-Algorithm 相互動作確認を行います。 その際に、IGP 、TE 、 Delay の 3 つのメトリックを使用します。 次の図で Flex-Algorithm に使用するリンクの color も含めて全体を示します。

各 Algorithm の制約ごとにトポロジーを示します。

  • Algorithm 128: リンク RED を除いた、IGP metric に従ったトポロジー

cust-a は Algorithm 128 のトポロジーを用いて転送するため、以下のような経路を通ります。

  • Algorithm 129: リンク BLUE のみで、TE metric に従ったトポロジー

cust-b は Algorithm 129 のトポロジーを用いて転送するため、以下のような経路を通ります。

  • Algorithm 130: リンク GREEN を除いた、Delay metric に従ったトポロジー

cust-c は Algorithm 130 のトポロジーを用いて転送するため、以下のような経路を通ります。

検証に用いた各ルーターのバージョンは下記の通りです。

  • PE1、PE2: Nokia SR OS 22.7.R1
  • P1: Cisco IOS XR 7.4.1
  • P2: Junos OS 23.1R1.8

事前準備として VPRN (VRF) cust-a、cust-b、cust-c の 3 つの L3VPN を作成します。 詳しくは 第 12 回 に設定例があるので、そちらをご参照ください。 Flex-Algorithm の検証は次のステップで行います。

  1. リンクに対するメトリックの定義
  2. リンクに対する color の定義
  3. FAD の設定
  4. Algorithm に参加するための設定
  5. FAD の確認
  6. BGP Import ポリシーの設定と確認
  7. traceroute による VPN の通信経路確認

1. リンクに対するメトリックの定義

各ルーターのインタフェースに対し IGP、 TE、 Delay のメトリックを指定します。 下記では、 SR OS における 3 種のメトリック、 IOS XR と Junos OS における TE metric と Delay metric の設定方法を示します。 IOS XR と Junos OS における IGP metric の設定方法については、第 6 回 の記事で説明していますので、ご参照ください。

SR OS (PE1)

SR OS における IGP、 TE、 Delay metric の設定方法を示します。 各メトリックは以下の階層にあります。

  • IGP metric は router isis
  • TE metric は router mpls
  • Delay metric は router interface

例では、PE1 の P1 向けインタフェースに IGP metric 10、TE metric 10、Delay metric 10 を設定しています。 他のインタフェースや PE2 も同様の方法で設定します。

[gl:/configure]
A:user@PE1# info router isis interface "to_P1"
    level 2 {
        metric 10
    }

[gl:/configure]
A:user@PE1# info router mpls interface "to_P1"
    te-metric 10

[gl:/configure]
A:user@PE1# info router interface "to_P1"
    if-attribute {
        delay {
            static 10
        }
    }

IOS XR (P1)

IOS XR における TE metric は segment-routing 階層の下にあります。 また、 Delay metric は performance-measurement 階層の下にあります。

例では、PE1 向けインタフェース Gi 0/0/0/0 に TE metric 10 と Delay metric 10、P2 向けインタフェース Gi 0/0/0/1 に TE metric 10 と Delay metric 10、PE2 向けインタフェース Gi 0/0/0/2 に TE metric 100 と Delay metric 10 を設定しています。

RP/0/RP0/CPU0:P1#show running-config segment-routing
Thu Jul 20 14:55:00.724 JST
segment-routing
 traffic-eng
  interface GigabitEthernet0/0/0/0
   metric 10
  !
  interface GigabitEthernet0/0/0/1
   metric 10
  !
  interface GigabitEthernet0/0/0/2
   metric 100
  !
 !
!

RP/0/RP0/CPU0:P1#show running-config performance-measurement
Thu Jul 20 18:42:33.471 JST
performance-measurement
 interface GigabitEthernet0/0/0/0
  delay-measurement
   advertise-delay 10
  !
 !
 interface GigabitEthernet0/0/0/1
  delay-measurement
   advertise-delay 10
  !
 !
 interface GigabitEthernet0/0/0/2
  delay-measurement
   advertise-delay 10
  !
 !
!

Junos OS (P2)

Junos OS における TE metric と Delay metric は protocol isis 階層の下にあります。

例では、PE1 向けインタフェース ge-0/0/0 に TE metric 10 と Delay metric 100、P1 向けインタフェース ge-0/0/1 に TE metric 10 と Delay metric 10、PE2 向けインタフェース ge-0/0/2 に TE metric 10 と Delay metric 10 を設定しています。

set protocols isis interface ge-0/0/0.0 level 2 te-metric 10
set protocols isis interface ge-0/0/0.0 level 2 application-specific attribute-group Flex-Algo advertise-delay-metric
set protocols isis interface ge-0/0/0.0 level 2 application-specific attribute-group Flex-Algo te-metric 10
set protocols isis interface ge-0/0/0.0 delay-metric 100

set protocols isis interface ge-0/0/1.0 level 2 te-metric 10
set protocols isis interface ge-0/0/1.0 level 2 application-specific attribute-group Flex-Algo advertise-delay-metric
set protocols isis interface ge-0/0/1.0 level 2 application-specific attribute-group Flex-Algo te-metric 10
set protocols isis interface ge-0/0/1.0 delay-metric 10

set protocols isis interface ge-0/0/2.0 level 2 te-metric 10
set protocols isis interface ge-0/0/2.0 level 2 application-specific attribute-group Flex-Algo advertise-delay-metric
set protocols isis interface ge-0/0/2.0 level 2 application-specific attribute-group Flex-Algo te-metric 10
set protocols isis interface ge-0/0/2.0 delay-metric 10

2. リンクに対する color の定義

各ルーターにてインタフェースに対し Flex-Algorithm の color を指定します。 本記事では、SR OS におけるリンクに対する color の設定方法を示します。 IOS XR と Junos OS における color の設定方法については 第 6 回 の記事で説明していますので、ご参照ください。

SR OS (PE1)

SR OS における color は router interface 階層の下にあります。 また、color と Administrative Group の紐付けは routing-options if-attribute の階層で行います。 例として、PE1 の P1 向けインタフェースに対して以下のように設定します。 他のインタフェース、PE も同様の方法で設定します。

[gl:/configure]
A:user@PE1# info router interface "to_P1"
    if-attribute {
        admin-group ["BLUE"]
    }

[gl:/configure]
A:user@PE1# info routing-options if-attribute
    admin-group "BLUE" {
        value 2
    }
    admin-group "GREEN" {
        value 3
    }
    admin-group "RED" {
        value 1
    }

3. FAD の設定

各ルーターでメトリックやリンクの color の制約を含む Flexible Algorithm Definition (FAD) を設定し広告します。 また、FAD の設定では Flex-Algorithm を識別する数値 (Algorithm) 128、 129、 130 も定義します。 本検証では、IOS XR、Junos OS、SR OS 間で FAD を広告できるか確認するため、3 種類の FAD をそれぞれ別のルーターで定義します。 組み合わせは以下の通りです。

  • Algorithm 128: P1 (IOS XR)
  • Algorithm 129: P2 (Junos OS)
  • Algorithm 130: PE2 (SR OS)

IOS XR (P1)

P1 ではリンク RED を除いて、IGP metric に従ったトポロジーを算出する Algorithm 128 を定義し広告します。

router isis 1
 flex-algo 128
  advertise-definition
  affinity exclude-any RED
 !
!

Junos OS (P2)

P2 ではリンク BLUE のみで、TE metric に従ったトポロジーを算出する Algorithm 129 を定義し広告します。

set routing-options flex-algorithm 129 definition metric-type te-metric
set routing-options flex-algorithm 129 definition spf
set routing-options flex-algorithm 129 definition admin-group include-any BLUE

SR OS (PE2)

PE2 ではリンク GREEN を除いて、Delay metric に従ったトポロジーを算出する Algorithm 130 を定義し広告します。

[gl:/configure]
A:user@PE2# info router "Base" isis 0
    flexible-algorithms {
        flex-algo 130 {
            participate true
            advertise "FAD-130-DELAY"
        }
    }

[gl:/configure]
A:user@PE2# info routing-options
    flexible-algorithm-definitions {
        flex-algo "FAD-130-DELAY" {
            admin-state enable
            metric-type delay
            priority 100
            exclude {
                admin-group "GREEN" { }
            }
        }
    }

4. Algorithm に参加するための設定

各ルーターで広告している Algorithm へ参加するための設定をします。

SR OS (PE1)

PE1 では Algorithm 128、 129、 130 に参加する設定と各 Algorithm で利用する Node SID を定義します。 PE2 でも同様の設定をします。

[gl:/configure]
A:user@PE1# info router "Base" isis 0 flexible-algorithms
    admin-state enable
    flex-algo 128 {
        participate true
    }
    flex-algo 129 {
        participate true
    }
    flex-algo 130 {
        participate true
    }

[gl:/configure]
A:user@PE1# info router "Base" isis 0 interface "system"
    flex-algo 128 {
        ipv4-node-sid {
            index 1001
        }
    }
    flex-algo 129 {
        ipv4-node-sid {
            index 2001
        }
    }
    flex-algo 130 {
        ipv4-node-sid {
            index 3001
        }
    }

IOS XR (P1)

P1 では Algorithm 128、 129、 130 で利用する Node SID を定義します。

router isis 1
 !
 flex-algo 129
 !
 flex-algo 130
 !
 interface Loopback0
  address-family ipv4 unicast
   prefix-sid algorithm 128 index 1002
   prefix-sid algorithm 129 index 2002
   prefix-sid algorithm 130 index 3002
  !
 !
!

Junos OS (P2)

P2 では Algorithm 128、 129、 130 で利用する Node SID を定義します。

set policy-options policy-statement Flex-Algo-SID term ALGO-SID from route-filter 10.255.0.3/32 exact
set policy-options policy-statement Flex-Algo-SID term ALGO-SID then prefix-segment algorithm 128 index 1003
set policy-options policy-statement Flex-Algo-SID term ALGO-SID then prefix-segment algorithm 128 node-segment
set policy-options policy-statement Flex-Algo-SID term ALGO-SID then prefix-segment algorithm 129 index 2003
set policy-options policy-statement Flex-Algo-SID term ALGO-SID then prefix-segment algorithm 129 node-segment
set policy-options policy-statement Flex-Algo-SID term ALGO-SID then prefix-segment algorithm 130 index 3003
set policy-options policy-statement Flex-Algo-SID term ALGO-SID then prefix-segment algorithm 130 node-segment

set protocols isis source-packet-routing flex-algorithm 128
set protocols isis source-packet-routing flex-algorithm 129
set protocols isis source-packet-routing flex-algorithm 130
set protocols isis source-packet-routing strict-asla-based-flex-algorithm
set protocols isis traffic-engineering advertisement always
set protocols isis export Flex-Algo-SID

5. FAD の確認

各ルーターで設定された FAD が学習されているかを確認します。 はじめに、SR OS (PE1) で IOS XR、 Junos OS、 SR OS の FAD を確認した後、IOS XR (P1) で SR OS の FAD を確認します。

SR OS (PE1)

SR OS では以下のコマンドで学習している FAD を確認できます。 PE1 で IOS XR(P1) で定義された Algorithm 128、Junos OS(P2) で定義された Algorithm 129、SR OS(PE2) で定義された Algorithm 130 を確認できます。

[/]
A:user@PE1# show router isis flex-algo detail

===============================================================================
Rtr Base ISIS Instance 0 Flex-Algos (detail)
===============================================================================
-------------------------------------------------------------------------------
Flex-Algo : 128
-------------------------------------------------------------------------------
Advertising FAD         : None
Participating           : Yes
Micro-Loop-Avoidance    : Disabled
Loop-Free-Alternate     : Disabled
L2 Oper state           : UP

Displaying Level 2 FAD Info
-------------------------------------------------------------------------------
FADs-count              : 1
Selected FAD
  Fad-Owner             : 0000.0AFF.0002
    Supported           : Yes
    Priority            : 128
    Metric Type         : igp
    Calculation Type    : spf(0)
    Exclude             : 0x2
    Include Any         : 0x0
    Include All         : 0x0
    Fad Flags           : 0x0
    Level               : L2

-------------------------------------------------------------------------------
Flex-Algo : 129
-------------------------------------------------------------------------------
Advertising FAD         : None
Participating           : Yes
Micro-Loop-Avoidance    : Disabled
Loop-Free-Alternate     : Disabled
L2 Oper state           : UP

Displaying Level 2 FAD Info
-------------------------------------------------------------------------------
FADs-count              : 1
Selected FAD
  Fad-Owner             : 0000.0AFF.0003
    Supported           : Yes
    Priority            : 0
    Metric Type         : te-metric
    Calculation Type    : spf(0)
    Exclude             : 0x0
    Include Any         : 0x4
    Include All         : 0x0
    Fad Flags           : 0x0
    Level               : L2

-------------------------------------------------------------------------------
Flex-Algo : 130
-------------------------------------------------------------------------------
Advertising FAD         : None
Participating           : Yes
Micro-Loop-Avoidance    : Disabled
Loop-Free-Alternate     : Disabled
L2 Oper state           : UP

Displaying Level 2 FAD Info
-------------------------------------------------------------------------------
FADs-count              : 1
Selected FAD
  Fad-Owner             : 0102.5500.0004
    Supported           : Yes
    Priority            : 100
    Metric Type         : delay
    Calculation Type    : spf(0)
    Exclude             : 0x8
    Include Any         : 0x0
    Include All         : 0x0
    Fad Flags           : M
    Level               : L2
-------------------------------------------------------------------------------
FAD: Flexible Algorithm Definition
Fad Flags:   M = Prefix Metric
===============================================================================

IOS XR (P1)

IOS XR では以下のコマンドで学習している FAD を確認できます。 P1 で Junos OS(P2) で定義された Flex-Algo 129 と SR OS(PE2) で定義された Flex-Algo 130 を確認できます。

RP/0/RP0/CPU0:P1#show isis flex-algo 129
Wed Jul 19 13:44:09.974 JST

IS-IS 1 Flex-Algo Database

Flex-Algo 129:

  Level-2:
    Definition Priority: 0
    Definition Source: P2.00
    Definition Equal to Local: No
    Definition Metric Type: TE
    Definition Flex-Algo Prefix Metric: No
    Disabled: No

  Local Priority: 128
  FRR Disabled: No
  Microloop Avoidance Disabled: No

RP/0/RP0/CPU0:P1#show isis flex-algo 130
Wed Jul 19 13:44:12.627 JST

IS-IS 1 Flex-Algo Database

Flex-Algo 130:

  Level-2:
    Definition Priority: 100
    Definition Source: PE2.00
    Definition Equal to Local: No
    Definition Metric Type: Delay
    Definition Flex-Algo Prefix Metric: Yes
    Disabled: No

  Local Priority: 128
  FRR Disabled: No
  Microloop Avoidance Disabled: No

6. BGP Import ポリシーの設定と確認

上記の情報を確認した後に、事前に構築した L3VPN と定義した Algorithm を紐付けるための設定をします。

SR OS (PE1)

SR OS では BGP Import ポリシー にて、特定の Route Target (RT) に対する action として Algorithm を指定できます。 そういったポリシーを L3VPN に適用し、それぞれの VPN 経路と Algorithm が紐付けられます。 以下の例では、RT target-100 に Algorithm 128 を付与しています。 これにより、VPRN cust-a で使用する RT target-100 が付与された経路と Algorithm 128 が紐付けられます。 Algorithm 129、130 にも同様の方法で設定します。

[gl:/configure]
A:user@PE1# info policy-options policy-statement "vrf-import-100"
    entry 10 {
        from {
            community {
                name "target-100"
            }
        }
        action {
            action-type accept
            flex-algo 128
        }
    }

[gl:/configure]
A:user@PE1# info service vprn "cust-a" bgp-ipvpn mpls
    admin-state enable
    route-distinguisher "65000:100"
    vrf-import {
        policy ["vrf-import-100"]
    }
    vrf-export {
        policy ["vrf-export-100"]
    }
    auto-bind-tunnel {
        resolution filter
        resolution-filter {
            sr-isis true
            sr-policy true
        }
    }

次に、PE1 で Algorithm 128 と VPRN cust-a で使用する経路が紐付けられているか確認します。 まず、PE1 が認識している Tunnel ID を確認すると、 Algorithm 128 では Node SID 17003 に対応した Tunnel ID 524310 と、 Node SID 17004 に対応した Tunnel ID 524311 があります。

[/]
A:user@PE1# show router fp-tunnel-table 1

===============================================================================
IPv4 Tunnel Table Display

Legend:
label stack is ordered from bottom-most to top-most
B - FRR Backup
===============================================================================
Destination                                  Protocol         Tunnel-ID
  Lbl/SID
    NextHop                                                   Intf/Tunnel
  Lbl/SID (backup)
    NextHop   (backup)
-------------------------------------------------------------------------------

(snip)

10.255.0.3/32                                SR-ISIS-0         524310
  17003
    10.1.2.2                                                   1/1/c1/1:0
10.255.0.4/32                                SR-ISIS-0         524293
  16004
    10.1.2.2                                                   1/1/c1/1:0
10.255.0.4/32                                SR-ISIS-0         524308
  18004
    10.1.3.2                                                   1/1/c2/1:0
10.255.0.4/32                                SR-ISIS-0         524309
  19004
    10.1.2.2                                                   1/1/c1/1:0
10.255.0.4/32                                SR-ISIS-0         524311
  17004
    10.1.2.2                                                   1/1/c1/1:0
-------------------------------------------------------------------------------
Total Entries : 14
-------------------------------------------------------------------------------
===============================================================================

次に、VPRN cust-a のルーティングテーブルを確認すると、Nexthop の Tunnel ID が 524311 となっています。 これにより、VPRN cust-a で使用する経路が Algorithm 128 に紐付いていることがわかります。

[/]
A:user@PE1# show router "100" route-table

===============================================================================
Route Table (Service: 100)
===============================================================================
Dest Prefix[Flags]                            Type    Proto     Age        Pref
      Next Hop[Interface Name]                                    Metric
-------------------------------------------------------------------------------
192.168.0.0/24                                Local   Local     13d23h57m  0
       to_cust-a                                                    0
192.168.10.0/24                               Remote  BGP VPN   09d21h53m  170
       10.255.0.4 (tunneled:SR-ISIS:524311)                         30
192.168.10.254/32                             Remote  BGP VPN   09d21h53m  170
       10.255.0.4 (tunneled:SR-ISIS:524311)                         30
-------------------------------------------------------------------------------
No. of Routes: 3
Flags: n = Number of times nexthop is repeated
       B = BGP backup route available
       L = LFA nexthop available
       S = Sticky ECMP requested
===============================================================================

7. traceroute による VPN の通信経路確認

最後に、3 つの L3VPN の経路が定義した Algorithm の制約通りになっているかを確認します。

PE1 -> PE2 VPRN cust-a

Algorthm 128 で定義した制約の通り、RED のリンクを避け、IGP metric が最小になるよう、PE1 -> P1 -> P2 -> PE2 と通過していることがわかります。

[/]
A:user@PE1# traceroute 192.168.10.254 router-instance "cust-a"
traceroute to 192.168.10.254, 30 hops max, 40 byte packets
  1  10.1.2.2 (10.1.2.2)    5.00 ms  3.56 ms  13.1 ms
  2  10.2.3.2 (10.2.3.2)    3.28 ms  7.75 ms  10.5 ms
  3  192.168.10.254 (192.168.10.254)    3.11 ms  9.96 ms  3.37 ms

PE1 -> PE2 VPRN cust-b

Algorthm 129 で定義した制約の通り、BLUE のリンクのみを利用し、TE metric が最小になるよう、PE1 -> P2 -> PE2 と通過していることがわかります。

[/]
A:user@PE1# traceroute 192.168.11.254 router-instance "cust-b"
traceroute to 192.168.11.254, 30 hops max, 40 byte packets
  1  10.1.3.2 (10.1.3.2)    2.84 ms  3.10 ms  2.87 ms
  2  192.168.11.254 (192.168.11.254)    3.10 ms  2.94 ms  3.07 ms

PE1 -> PE2 VPRN cust-c

Algorthm 130 で定義した制約の通り、GREEN のリンクを避け、Delay metric が最小になるよう、PE1 -> P1 -> P2 -> PE2 と通過していることがわかります。

[/]
A:user@PE1# traceroute 192.168.12.254 router-instance "cust-c"
traceroute to 192.168.12.254, 30 hops max, 40 byte packets
  1  10.1.2.2 (10.1.2.2)    17.2 ms  6.56 ms  3.51 ms
  2  10.2.3.2 (10.2.3.2)    3.34 ms  3.34 ms  9.39 ms
  3  192.168.12.254 (192.168.12.254)    3.10 ms  7.79 ms  3.16 ms

まとめ

本記事では、IOS XR、 Junos OS、 Nokia SR OS の 3 ベンダー間の Flex-Algorithm の相互動作を確認しました。 IGP 、 TE と Delay metric の Algorithm を定義し、動作検証を行いました。 次回の記事では、Delay Measurement について紹介予定です。

(2023/10/02 追記) 公開しました:[Multi-AS Segment Routing 検証連載 #16] Delay Measurement using IOS XR, Junos and SR OS

© NTT Communications Corporation All Rights Reserved.