[Multi-AS Segment Routing 検証連載 #12] SR-MPLS L3VPN using IOS XR, Junos and SR OS

TOC

サマリ

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

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

概要

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

第1回第2回の記事で IOS XR + Junos の 2 つのベンダー機器で構成される L3VPN についてご紹介しましたが、今回新たに Nokia SR OS(Service Router Operating System)を加えた 3 つのベンダー機器での L3VPN 相互動作確認をご紹介します。

L3VPN や Segment Routing など今回扱う技術の説明は、第1回第2回記事の概要章にて紹介しているので、そちらをご参照ください。

検証

以降は L3VPN の検証例を実際の設定例を添えつつ紹介します。 IOS XR、Junos の設定例は第1回第2回の記事で紹介したため本記事では割愛し、SR OS の設定例を中心に紹介します。

検証項目とトポロジー

本記事の検証では、Inter-AS Option B の L3VPN について、SR OS と 各ベンダー(SR OS 自身を含む)間の互換性確認を目的とします。 そのため、以下の検証項目を設定します。

  • 項目1: SR OS(PE)と SR OS(PE)間で L3VPN が構築できるかを確認する
  • 項目2: SR OS(PE)と IOS XR(PE)間で L3VPN が構築できるかを確認する
  • 項目3: SR OS(PE)と Junos(PE)間で L3VPN が構築できるかを確認する
  • 項目4: Inter-AS Option B 構成を構築する際に SR OS を ASBR として利用できるかを確認する

上記の確認のため、本記事では下図のようなトポロジーからなるネットワークを用いて検証します。

検証項目と、構築する L3VPN を構成する VRF と機器の組み合わせを以下の表に示します。

検証項目 VRF AS65001 PE → → ASBR-ASBR → → AS65002 PE
項目 2 cust-c IOS XR (rt01) Junos (rt05、 rt09) SR OS (rt13)
項目 3 cust-d Junos (rt02) IOS XR (rt04、 rt08) SR OS (rt13)
項目 1、 4 cust-e IOS XR (rt01) SR OS (rt06、 rt10) Junos (rt12)

使用する機器は以下の通りです。

  • rt01、rt04、rt07、rt08: Cisco IOS XR 7.4.1
  • rt02、rt05、rt09、rt12: Juniper Junos OS 21.3R1.9
  • rt06、rt10、rt13: Nokia SR OS 22.7.R1

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

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

基本設定

IS-IS - 設定

IS-IS の SR 拡張を利用し、SR-MPLS の SID 情報を広告します。

SR OS(例: rt13)

A:admin@rt13# /info router isis
    admin-state enable
    advertise-router-capability as
    level-capability 2
    traffic-engineering true
    area-address [49.0000]
    segment-routing {
        admin-state enable
        prefix-sid-range {
            global
        }
    }
    interface "system" {
    }
    interface "to_rt08" {
        interface-type point-to-point
        level-capability 2
    }
    interface "to_rt09" {
        interface-type point-to-point
        level-capability 2
    }
    interface "to_rt10" {
        interface-type point-to-point
        level-capability 2
    }
    level 2 {
        wide-metrics-only true
    }

[ro:/configure]
A:admin@rt13# /info router mpls-labels
    static-label-range 0
    sr-labels {
        start 16000
        end 23999
    }

[ro:/configure]
A:admin@rt13# /info router segment-routing
    sr-mpls {
        prefix-sids "system" {
            ipv4-sid {
                index 13
            }
        }
    }

IS-IS - 動作確認

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

IS-IS ネイバーの状態の確認

[ro:/configure]
A:admin@rt13# /show router isis adjacency

===============================================================================
Rtr Base ISIS Instance 0 Adjacency
===============================================================================
System ID                Usage State Hold Interface                     MT-ID
-------------------------------------------------------------------------------
rt08              L2    Up    25   to_rt08                0
rt09              L2    Up    25   to_rt09                0
rt10              L2    Up    20   to_rt10                0
-------------------------------------------------------------------------------
Adjacencies : 3
===============================================================================

SID Table の確認

[/]
A:admin@rt13# /show router isis prefix-sids

===============================================================================
Rtr Base ISIS Instance 0 Prefix/SID Table
===============================================================================
Prefix                            SID        Lvl/Typ    SRMS   AdvRtr
                                   Shared                MT     Flags
-------------------------------------------------------------------------------
10.255.2.2/32                     12         2/Int.      N     rt12
                                      N.A.                  0      N
10.255.2.3/32                     13         2/Int.      N     rt13
                                      Yes                   0      NnP
10.255.2.4/32                     8          2/Int.      N     rt08
                                      N.A.                  0      N
10.255.2.5/32                     9          2/Int.      N     rt09
                                      N.A.                  0      N
10.255.2.6/32                     10         2/Int.      N     rt10
                                      N.A.                  0      NnP
10.255.2.7/32                     14         2/Int.      N     rt14
                                      N.A.                  0      N
-------------------------------------------------------------------------------
No. of Prefix/SIDs: 6 (6 unique)
-------------------------------------------------------------------------------
SRMS:   Y/N  = prefix SID advertised by SR Mapping Server (Y) or not (N)
        S    = SRMS prefix SID is selected to be programmed
Flags:  R    = Re-advertisement
        N    = Node-SID
        nP   = no penultimate hop POP
        E    = Explicit-Null
        V    = Prefix-SID carries a value
        L    = value/index has local significance
Shared: Yes  = local shared Node-SID
        No   = not a local shared Node-SID
        N.A. = not applicable for Remote prefix-sid
===============================================================================

VRF と MP-BGP VPNv4 - 機器設定

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

  • SR Domain 1

    • AS 番号: 65001
    • VRF 300(cust-c):
      • RD/RT 65001:300
      • AS 間での VPN 経路広告用 RT: 64999:300
    • VRF 400(cust-d):
      • RD/RT 65001:400
      • AS 間での VPN 経路広告用 RT: 64999:400
    • VRF 500(cust-e):
      • RD/RT 65001:500
      • AS 間での VPN 経路広告用 RT: 64999:500
  • SR Domain 2

    • AS 番号: 65002
    • VRF 300(cust-c):
      • RD/RT 65002:300
      • AS 間での VPN 経路広告用 RT: 64999:300
    • VRF 400(cust-d):
      • RD/RT 65002:400
      • AS 間での VPN 経路広告用 RT: 64999:400
    • VRF 500(cust-e):
      • RD/RT 65002:500
      • AS 間での VPN 経路広告用 RT: 64999:500

PE の設定(例: rt13、SR OS)

A:admin@rt13# info policy-options
    community "shared-comm-cust-c" {
        member "target:64999:300" { }
    }
    community "shared-comm-cust-d" {
        member "target:64999:400" { }
    }
    policy-statement "vrf-export-cust-c" {
        entry 10 {
            action {
                action-type accept
                community {
                    add ["shared-comm-cust-c"]
                }
            }
        }
    }
    policy-statement "vrf-export-cust-d" {
        entry 10 {
            action {
                action-type accept
                community {
                    add ["shared-comm-cust-d"]
                }
            }
        }
    }
    policy-statement "vrf-import-cust-c" {
        entry 10 {
            from {
                community {
                    name "shared-comm-cust-c"
                }
            }
            action {
                action-type accept
            }
        }
    }
    policy-statement "vrf-import-cust-d" {
        entry 10 {
            from {
                community {
                    name "shared-comm-cust-d"
                }
            }
            action {
                action-type accept
            }
        }
    }

A:admin@rt13# info service
    customer "cust-c" {
        customer-id 300
    }
    customer "cust-d" {
        customer-id 400
    }
    vprn "300" {
        admin-state enable
        customer "cust-c"
        bgp-ipvpn {
            mpls {
                admin-state enable
                route-distinguisher "65002:300"
                vrf-import {
                    policy ["vrf-import-cust-c"]
                }
                vrf-export {
                    policy ["vrf-export-cust-c"]
                }
                auto-bind-tunnel {
                    resolution any
                }
            }
        }
        interface "to_cust-c" {
            admin-state enable
            ipv4 {
                primary {
                    address 192.168.1.254
                    prefix-length 24
                }
            }
            sap 1/1/c4/1:0 {
                admin-state enable
            }
        }
    }
    vprn "400" {
        admin-state enable
        customer "cust-d"
        bgp-ipvpn {
            mpls {
                admin-state enable
                route-distinguisher "65002:400"
                vrf-import {
                    policy ["vrf-import-cust-d"]
                }
                vrf-export {
                    policy ["vrf-export-cust-d"]
                }
                auto-bind-tunnel {
                    resolution any
                }
            }
        }
        interface "to_cust-d" {
            admin-state enable
            ipv4 {
                primary {
                    address 192.168.1.254
                    prefix-length 24
                }
            }
            sap 1/1/c5/1:0 {
                admin-state enable
            }
        }
    }

ASBR の設定(例: rt10、SR OS)

A:admin@rt13# info router bgp
    vpn-apply-export true
    inter-as-vpn true
    rapid-withdrawal true
    family {
        vpn-ipv4 true
    }
    ebgp-default-reject-policy {
        import false
        export false
    }
    rapid-update {
        vpn-ipv4 true
    }
    next-hop-resolution {
        labeled-routes {
            transport-tunnel {
                family vpn {
                    resolution any
                }
            }
        }
    }
    group "65001" {
        peer-as 65001
        family {
            vpn-ipv4 true
        }
    }
    group "iBGP" {
        peer-as 65002
        local-address 10.255.2.6
        family {
            vpn-ipv4 true
        }
    }
    neighbor "10.100.3.1" {
        group "65001"
        local-address 10.100.3.2
    }
    neighbor "10.255.2.7" {
        group "iBGP"
    }

MP-BGP VPNv4 - 動作確認

下記 3 ステップで L3VPN の経路学習と転送動作を確認します。 今回は各ベンダーの ASBR の組で動作確認をするために ASBR へ LP を設定し、VRF ごとに ASBR を選択します。

  1. 動作確認したい ASBR の組が選択されるように LP を調整する
  2. PE で BGP から受信した経路を確認
  3. ping による疎通確認

LP の設定

以下の設定で LP を調整し、cust-c、d、e に対応する ASBR を選択します。

cust-c(rt04、IOS XR)

route-policy lp-high
  if extcommunity rt matches-any (64999:400) then
    set local-preference 300
  endif
end-policy
!
router bgp 65001
 neighbor-group ibgp
  address-family vpnv4 unicast
   route-policy lp-high out
  !

cust-d(rt05、Junos)

set policy-options community CUST-C-SHARED members target:64999:300

set policy-options policy-statement lp-high term 1 from community CUST-C-SHARED
set policy-options policy-statement lp-high term 1 then local-preference 300
set policy-options policy-statement lp-high term 1 then accept

set protocols bgp group ibgp export lp-high

cust-e(rt06、SR OS)

A:admin@rt06# info policy-options
    community "CUST-E-SHARED" {
        member "target:64999:500" { }
    }
    policy-statement "lp-high" {
        entry 1 {
            from {
                community {
                    name "CUST-E-SHARED"
                }
            }
            action {
                action-type accept
                local-preference 300
            }
        }
    }

A:admin@rt06# info router bgp
    vpn-apply-export true
    group "iBGP" {
        export {
            policy ["lp-high"]
        }
    }

動作確認

以下のように cust-c、d、e で適切な ASBR が選択されていることが確認できました。

RP/0/RP0/CPU0:rt07#show bgp vpnv4 unicast
Fri Feb  3 15:50:04.866 JST
BGP router identifier 10.255.1.7, local AS number 65001
BGP generic scan interval 60 secs
Non-stop routing is enabled
BGP table state: Active
Table ID: 0x0   RD version: 0
BGP main routing table version 181
BGP NSR Initial initsync version 1 (Reached)
BGP NSR/ISSU Sync-Group versions 0/0
BGP scan interval 60 secs

Status codes: s suppressed, d damped, h history, * valid, > best
              i - internal, r RIB-failure, S stale, N Nexthop-discard
Origin codes: i - IGP, e - EGP, ? - incomplete
   Network            Next Hop            Metric LocPrf Weight Path
Route Distinguisher: 65001:300
*>i192.168.0.0/24     10.255.1.1               0    100      0 ?
Route Distinguisher: 65001:400
*>i192.168.0.0/24     10.255.1.2                    100      0 i
Route Distinguisher: 65001:500
*>i192.168.0.0/24     10.255.1.1               0    100      0 ?
Route Distinguisher: 65002:300
*>i192.168.1.0/24     10.255.1.5                    300      0 65002 i
*>i192.168.1.254/32   10.255.1.5                    300      0 65002 i
Route Distinguisher: 65002:400
*>i192.168.1.0/24     10.255.1.4                    300      0 65002 i
*>i192.168.1.254/32   10.255.1.4                    300      0 65002 i
Route Distinguisher: 65002:500
*>i192.168.1.0/24     10.255.1.6                    300      0 65002 i

cust-c の動作確認

rt01(PE)で対向 AS から広告された VRF 経路を受け取れていることを確認します。

RP/0/RP0/CPU0:rt01#show route vrf cust-c
Fri Feb  3 14:03:42.980 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, 6d20h, GigabitEthernet0/0/0/3
L    192.168.0.254/32 is directly connected, 6d20h, GigabitEthernet0/0/0/3
B    192.168.1.0/24 [200/0] via 10.255.1.5 (nexthop in vrf default), 1d23h
B    192.168.1.254/32 [200/0] via 10.255.1.5 (nexthop in vrf default), 1d23h

ping で疎通確認を行なってみます。

RP/0/RP0/CPU0:rt01#ping 192.168.1.254 vrf cust-c
Fri Feb  3 16:07:13.844 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 = 3/8/14 ms
RP/0/RP0/CPU0:ar1018-rt01#traceroute  192.168.1.254 vrf cust-c
Fri Feb  3 16:07:17.423 JST

Type escape sequence to abort.
Tracing the route to 192.168.1.254

 1  10.1.2.2 [MPLS: Label 62 Exp 0] 14 msec  7 msec  14 msec
 2  10.100.2.2 [MPLS: Label 31 Exp 0] 4 msec  11 msec  4 msec
 3  192.168.1.254 8 msec  13 msec  3 msec

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

cust-d の動作確認

rt02(PE)で対向 AS から広告された VRF 経路を受け取れていることを確認します。

user@rt02> ping 192.168.1.254 routing-instance CUST-D
PING 192.168.1.254 (192.168.1.254): 56 data bytes
64 bytes from 192.168.1.254: icmp_seq=0 ttl=62 time=2.849 ms
64 bytes from 192.168.1.254: icmp_seq=1 ttl=62 time=2.507 ms
64 bytes from 192.168.1.254: icmp_seq=2 ttl=62 time=3.050 ms
^C
--- 192.168.1.254 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2.507/2.802/3.050/0.224 ms

user@rt02> traceroute 192.168.1.254 routing-instance CUST-D no-resolve
traceroute to 192.168.1.254 (192.168.1.254), 30 hops max, 52 byte packets
 1  10.1.4.2  11.656 ms  2.224 ms  2.109 ms
     MPLS Label=24018 CoS=0 TTL=1 S=1
 2  10.100.1.2  3.361 ms  10.787 ms  2.800 ms
     MPLS Label=24017 CoS=0 TTL=1 S=1
 3  192.168.1.254  2.290 ms  1.691 ms  1.632 ms

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

cust-e の動作確認

rt01(PE)で対向 AS から広告された VRF 経路を受け取れていることを確認します。

RP/0/RP0/CPU0:rt01#show route vrf cust-e
Fri Feb  3 14:03:54.438 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, 6d19h, GigabitEthernet0/0/0/4
L    192.168.0.254/32 is directly connected, 6d19h, GigabitEthernet0/0/0/4
B    192.168.1.0/24 [200/0] via 10.255.1.6 (nexthop in vrf default), 00:37:18

ping で疎通確認を行なってみます。

RP/0/RP0/CPU0:rt01#ping 192.168.1.254 vrf cust-e
Fri Feb  3 16:07:29.739 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 = 3/7/13 ms
RP/0/RP0/CPU0:ar1018-rt01#traceroute  192.168.1.254 vrf cust-e
Fri Feb  3 16:07:33.584 JST

Type escape sequence to abort.
Tracing the route to 192.168.1.254

 1  10.100.3.1 [MPLS: Labels 16006/524284 Exp 0] 11 msec  14 msec  5 msec
 2  10.2.6.1 [MPLS: Label 524276 Exp 0] 12 msec  4 msec  7 msec
 3  192.168.1.254 13 msec  6 msec  16 msec

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

以上で全ての組で VPN が構築できている事が確認できました。

まとめ

IOS XR 、Junos と SR OS の Multi-vendor 環境における Multi-AS L3VPN の検証結果を紹介しました。 次回の記事では、これらの Multi-vendor 環境における Multi-AS L2VPN について紹介予定です。

(2023/8/21 追記) 公開しました:[Multi-AS Segment Routing 検証連載 #13] SR-MPLS L2VPN(EVPN) using IOS XR, Junos and SR OS

© NTT Communications Corporation 2014