以下の内容はhttps://yokohama539.hatenablog.com/entry/2025/05/06/013819より取得しました。


vJunosでSegment Routingしてみた。~SR-MPLS編その1~

さて、今回はvJunos-routerでSegment Routingを検証してみます。
Segment Routingと言っても、MPLS Labelを使った「SR-MPLS」とIPv6拡張ヘッダーを使った「SRv6」の2種類あります。
今回はSR-MPLSの方のSegment Routingをしてみたいと思います。

この記事では、主に設定と確認に着目して検証するので、Segment RoutingやSR-MPLSの詳しい概要や用語の説明はしません。
NTTコミュニケーションズさんのプレゼンに詳しく書いてあるので、そちらをご覧ください。

今回、初めてSR-MPLSを検証するので、細かく確認をしていきたいと思います。

1. SR-MPLS 構成

まずTopology(物理構成とIP Addressing)を考えます。
TopologyはL2VPN/L3VPNなCE-PE-P-PE-CE構成を作ります。
ただ、1本でCE間がつながった物理接続も面白くないので以下のようにしました。

一応、IP Addressも記載していますが、Label Switchingでパケット転送するので、あんまり意味はないかも…。
なお、疑似SP(Service Provider)網内のIGPはIS-ISを使います(OSPFに比べて新機能の実装が早い=Bugが少なそうってことで)
先ほどのTopologyに書き加えると以下の感じです。

2. SR-MPLS 設定

では、設定投入をしていきます。
まず、疑似SP網内のvJR-01~vJR-06にてお互いのLoopback Addressを学習するため、各ルーターでIS-ISを動かします。
一例としてvJR-01の設定だけ載せときます。

//vJR-01
set interfaces ge-0/0/1 unit 0 family iso
set interfaces ge-0/0/2 unit 0 family iso
set interfaces lo0 unit 0 family iso address 49.0001.0000.0000.0001.00
set protocols isis interface ge-0/0/1.0 level 1 disable
set protocols isis interface ge-0/0/2.0 level 1 disable
set protocols isis interface lo0.0 passive
set protocols isis level 2 wide-metrics-only

他のルーターではLo0.0のNSAP Addressを変えるのと、動かしたいインターフェイスを追加するくらいでほぼコピペでOKです。

続いてMPLSの設定をします。
インターフェイスでMPLSを有効にするだけです。LDPやRSVPの設定は必要ありません。
こちらも一例としてvJR-01の設定だけ載せときます。

//vJR-01
set interfaces ge-0/0/1 unit 0 family mpls
set interfaces ge-0/0/2 unit 0 family mpls
set protocols mpls interface ge-0/0/1.0
set protocols mpls interface ge-0/0/2.0


次に、vJR-01とvJR-06間でCEネットワーク(111.111.111.0/24、221.221.221.0/24、222.222.222.0/24)の経路情報を交換するためにBGP Peeringを行います。

//vJR-01
set routing-options autonomous-system 101
set policy-options policy-statement EXPORT_BGP_R6 term 0011 from protocol direct
set policy-options policy-statement EXPORT_BGP_R6 term 0011 from route-filter 111.111.111.0/24 exact
set policy-options policy-statement EXPORT_BGP_R6 term 0011 then accept
set policy-options policy-statement EXPORT_BGP_R6 term 9991 then reject
set protocols bgp group INTERNAL type internal
set protocols bgp group INTERNAL local-address 1.1.1.1
set protocols bgp group INTERNAL neighbor 6.6.6.6 export EXPORT_BGP_R6
//vJR-06
set routing-options autonomous-system 101
set policy-options policy-statement EXPORT_BGP_R1 term 0011 from protocol direct
set policy-options policy-statement EXPORT_BGP_R1 term 0011 from route-filter 221.221.221.0/24 exact
set policy-options policy-statement EXPORT_BGP_R1 term 0011 then accept
set policy-options policy-statement EXPORT_BGP_R1 term 0021 from protocol direct
set policy-options policy-statement EXPORT_BGP_R1 term 0021 from route-filter 222.222.222.0/24 exact
set policy-options policy-statement EXPORT_BGP_R1 term 0021 then accept
set policy-options policy-statement EXPORT_BGP_R1 term 9991 then reject
set protocols bgp group INTERNAL type internal
set protocols bgp group INTERNAL local-address 6.6.6.6
set protocols bgp group INTERNAL neighbor 1.1.1.1 export EXPORT_BGP_R1

なお、CE間の通信を行う際、vJR-02~vJR-05はLabel Switchingにてパケット転送するのでCEネットワークの経路情報を学習する必要はありません。

ここからいよいよSR-MPLSの設定をしていきます。
まず、SR-MPLSを利用するためにEnhanced IP Network Services-modeを有効にします。

//vJR-01 ~ vJR-06
set chassis network-services enhanced-ip

この設定をcommitした後、いったんルーターの再起動が必要になります

//vJR-01 ~ vJR-06
run request system reboot
yes


次に、各ルーターにてSRGB(Segment Routingで使うLabelの範囲)を定義します。
今回はキリよく10000から5000のレンジで定義します(Labelの範囲は10000~14999)

//vJR-01 ~ vJR-06
set protocols isis source-packet-routing srgb start-label 10000
set protocols isis source-packet-routing srgb index-range 5000

続いて各ルーターの(IPv4の)Index値を定義します。
今回は40xで採番します。
SRGBは10000起番なので、Node SIDは+10000足された値になります。

ルーター IPv4 Index Node SID
vJR-01 401 10401
vJR-02 402 10402
vJR-03 403 10403
vJR-04 404 10404
vJR-05 405 10405
vJR-06 406 10406

//vJR-01
set protocols isis source-packet-routing node-segment ipv4-index 401
//vJR-02
set protocols isis source-packet-routing node-segment ipv4-index 402
//vJR-03
set protocols isis source-packet-routing node-segment ipv4-index 403
//vJR-04
set protocols isis source-packet-routing node-segment ipv4-index 404
//vJR-05
set protocols isis source-packet-routing node-segment ipv4-index 405
//vJR-06
set protocols isis source-packet-routing node-segment ipv4-index 406


最後にTraffic Engineering(Static LSP)の設定を行います。
今回はCE間(vJR-11からvJR-21 or vJR-22への通信で)vJR-01からvJR-06へパケット転送する際、vJR-01→vJR-03→vJR-05→vJR-04→vJR-06を通るようなPathを定義します。
Topologyに通信フローを書き加えるとこんな感じです。

//vJR-01
set protocols source-packet-routing segment-list TO-R6-PRIMARY HOP02 label 10405
set protocols source-packet-routing segment-list TO-R6-PRIMARY HOP03 label 10404
set protocols source-packet-routing segment-list TO-R6-PRIMARY HOP04 label 10406
set protocols source-packet-routing source-routing-path TO-R6 to 6.6.6.6
set protocols source-packet-routing source-routing-path TO-R6 primary TO-R6-PRIMARY

以上で設定は完了です。

3. SR-MPLS 確認

動作確認を行います。
尺の都合でvJR-01のみ中心に確認します。

まず、さらっとIS-ISとBGPの経路学習の確認をします。

//vJR-01
lab@vJR-01# run show route protocol isis

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

2.2.2.2/32         *[IS-IS/18] 00:10:04, metric 10
                    >  to 12.12.12.2 via ge-0/0/1.0
3.3.3.3/32         *[IS-IS/18] 00:09:38, metric 10
                    >  to 13.13.13.3 via ge-0/0/2.0
4.4.4.4/32         *[IS-IS/18] 00:09:41, metric 20
                    >  to 12.12.12.2 via ge-0/0/1.0
5.5.5.5/32         *[IS-IS/18] 00:09:16, metric 20
                    >  to 13.13.13.3 via ge-0/0/2.0
6.6.6.6/32         *[IS-IS/18] 00:09:10, metric 30
                    >  to 12.12.12.2 via ge-0/0/1.0
                       to 13.13.13.3 via ge-0/0/2.0
<snip>
lab@vJR-01# run show bgp summary
Threading mode: BGP I/O
Default eBGP mode: advertise - accept, receive - accept
Groups: 1 Peers: 1 Down peers: 0
Table          Tot Paths  Act Paths Suppressed    History Damp State    Pending
inet.0
                       2          2          0          0          0          0
Peer                     AS      InPkt     OutPkt    OutQ   Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
6.6.6.6                 101         30         28       0       0       11:28 Establ
  inet.0: 2/2/2/0
<snip>
lab@vJR-01# run show route protocol bgp

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

221.221.221.0/24   *[BGP/170] 00:09:36, localpref 100, from 6.6.6.6
                      AS path: I, validation-state: unverified
                    >  to 13.13.13.3 via ge-0/0/2.0, Push 10406, Push 10404, Push 10405(top)
222.222.222.0/24   *[BGP/170] 00:09:36, localpref 100, from 6.6.6.6
                      AS path: I, validation-state: unverified
                    >  to 13.13.13.3 via ge-0/0/2.0, Push 10406, Push 10404, Push 10405(top)
<snip>

IS-ISでLoopback Addressの経路交換とBGPでCEネットワークの経路交換ができてます。
(BGPの経路情報は若干ネタバレな表示となってますが後ほど説明します…)

次にSR-MPLSの確認をしていきます。
まず、SRGBのレンジを確認します。

//vJR-01
lab@vJR-01# run show mpls label usage
Label space Total   Available        Applications
LSI         994984  994982 (100.00%) BGP/LDP VPLS with no-tunnel-services, BGP L3VPN with vrf-table-label
Block       994984  994982 (100.00%) BGP/LDP VPLS with tunnel-services, BGP L2VPN
Dynamic     9994984  994982 (100.00%) RSVP, LDP, PW, L3VPN, RSVP-P2MP, LDP-P2MP, MVPN, EVPN, BGP, SPRING-TE
Static      48576   48576  (100.00%) Static LSP, Static PW
Effective Ranges
Range name  Shared with Start   End
Dynamic     16      9999
Dynamic     15000   999999
Static      1000000 1048575
SRGB        10000   14999    ISIS
Configured Ranges
Range name  Shared with Start   End
Dynamic     16      9999
Dynamic     15000   999999
Static      1000000 1048575
SRGB        10000   14999    ISIS

「SRGB」の行に設定通り10000~14999が割り当てれることが確認できます。

次にIS-ISのステータスを確認します。

//vJR-01
lab@vJR-01# run show isis overview | no-more
<snip>
  Source Packet Routing (SPRING): Enabled
    SRGB Config Range :
      SRGB Start-Label : 10000, SRGB Index-Range : 5000
    SRGB Block Allocation: Success
      SRGB Start Index : 10000, SRGB Size : 5000, Label-Range: [ 10000, 14999 ]
    Node Segments: Enabled
      Ipv4 Index : 401
    SRv6: Disabled
  Post Convergence Backup: Disabled

SPRING(≒ SR-MPLS)が有効になっていることが確認できます。また、ここでも設定したSRGBのレンジが確認できます。

続いてIS-ISのネイバー状態を確認します。

//vJR-01
lab@vJR-01# run show isis adjacency extensive
vJR-02
  Interface: ge-0/0/1.0, Level: 2, State: Up, Expires in 8 secs
  Priority: 64, Up/Down transitions: 1, Last transition: 00:20:20 ago
  Circuit type: 2, Speaks: IP, IPv6, MAC address: 50:1:0:2:0:1
  Topologies: Unicast
  Restart capable: Yes, Adjacency advertisement: Advertise
  LAN id: vJR-02.02, IP addresses: 12.12.12.2
  Level 2 IPv4 Adj-SID: 16
  Transition log:
  When                  State        Event           Down reason
  Sun May  4 03:59:25   Up           Seenself

vJR-03
  Interface: ge-0/0/2.0, Level: 2, State: Up, Expires in 6 secs
  Priority: 64, Up/Down transitions: 1, Last transition: 00:19:53 ago
  Circuit type: 2, Speaks: IP, IPv6, MAC address: 50:1:0:3:0:1
  Topologies: Unicast
  Restart capable: Yes, Adjacency advertisement: Advertise
  LAN id: vJR-03.02, IP addresses: 13.13.13.3
  Level 2 IPv4 Adj-SID: 17
  Transition log:
  When                  State        Event           Down reason
  Sun May  4 03:59:51   Up           Seenself

ネイバー毎にAdj-SID(Adjacency SID)が生成されてるのが確認できますね。

続いてIS-IS Link-state Databaseを確認します。
めっちゃ出力行数があるので、一例でvJR-02の情報のみ確認します。

//vJR-01
lab@vJR-01# run show isis database extensive
<snip>
vJR-02.00-00 Sequence: 0x9, Checksum: 0xa327, Lifetime: 988 secs
  IPV4 Index: 402
  Node Segment Blocks Advertised:
    Start Index : 0, Size : 5000, Label-Range: [ 10000, 14999 ]
   IS neighbor: vJR-02.02                     Metric:       10
     Two-way fragment: vJR-02.02-00, Two-way first fragment: vJR-02.02-00
     LAN IPv4 Adj-SID:      16, Weight:   0, Neighbor: vJR-01, Flags: --VL--
   IS neighbor: vJR-03.03                     Metric:       10
     Two-way fragment: vJR-03.03-00, Two-way first fragment: vJR-03.03-00
     LAN IPv4 Adj-SID:      18, Weight:   0, Neighbor: vJR-03, Flags: --VL--
   IS neighbor: vJR-04.02                     Metric:       10
     Two-way fragment: vJR-04.02-00, Two-way first fragment: vJR-04.02-00
     LAN IPv4 Adj-SID:      17, Weight:   0, Neighbor: vJR-04, Flags: --VL--
   IP prefix: 2.2.2.2/32                      Metric:        0 Internal Up
   IP prefix: 12.12.12.0/24                   Metric:       10 Internal Up
   IP prefix: 23.23.23.0/24                   Metric:       10 Internal Up
   IP prefix: 24.24.24.0/24                   Metric:       10 Internal Up
<snip>

vJR-02のIndex値やAdj-SIDが確認できます(このコマンドでvJR-01~vJR-06の情報が確認できます)

続いてTraffic Engineeringの設定の確認をします。

//vJR-01
lab@vJR-01# run show spring-traffic-engineering lsp
To                        State        LSPname
6.6.6.6                   Up           TO-R6

設定したsource-routing-path「TO-R6」が適用できていることが確認できます。
なお、routeオプションで設定したSegment-Listも確認できます。

//vJR-01
lab@vJR-01# run show spring-traffic-engineering route
To                      Source                  SR Override Pref/Pref       LSP Name                              Segment Lists
6.6.6.6                 Static configuration                100 / 100       TO-R6                                 TO-R6-PRIMARY


続いて、Routing Tableを確認していきます。
まず、inet.3(MPLSで学習した経路情報。BGP Protocol next hop解決の際にLookupされる)を確認します。

//vJR-01
lab@vJR-01# run show route table inet.3

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

2.2.2.2/32         *[L-ISIS/14] 00:25:11, metric 10
                    >  to 12.12.12.2 via ge-0/0/1.0
3.3.3.3/32         *[L-ISIS/14] 00:24:44, metric 10
                    >  to 13.13.13.3 via ge-0/0/2.0
4.4.4.4/32         *[L-ISIS/14] 00:24:46, metric 20
                    >  to 12.12.12.2 via ge-0/0/1.0, Push 10404
5.5.5.5/32         *[L-ISIS/14] 00:24:12, metric 20
                    >  to 13.13.13.3 via ge-0/0/2.0, Push 10405
6.6.6.6/32         *[SPRING-TE/8] 00:24:12, metric 1, metric2 30
                    >  to 13.13.13.3 via ge-0/0/2.0, Push 10406, Push 10404, Push 10405(top)
                    [L-ISIS/14] 00:24:09, metric 30
                    >  to 12.12.12.2 via ge-0/0/1.0, Push 10406
                       to 13.13.13.3 via ge-0/0/2.0, Push 10406

各Loopback Addressについて、L-IS-IS(Labeled IS-IS)にて経路情報を学習しています。
また、vJR-06(6.6.6.6)宛はTraffic Engineeringの設定の通り、SPRING-TEのEntryが追加されています。

続いて、mpls.0(MPLSでLabel Switchingする際のRouting Table)を確認します。

//vJR-01
lab@vJR-01# run show route table mpls.0 | no-more

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

0                  *[MPLS/0] 00:26:47, metric 1
                       to table inet.0
0(S=0)             *[MPLS/0] 00:26:47, metric 1
                       to table mpls.0
1                  *[MPLS/0] 00:26:47, metric 1
                       Receive
2                  *[MPLS/0] 00:26:47, metric 1
                       to table inet6.0
2(S=0)             *[MPLS/0] 00:26:47, metric 1
                       to table mpls.0
13                 *[MPLS/0] 00:26:47, metric 1
                       Receive
16                 *[L-ISIS/14] 00:26:15, metric 0
                    >  to 12.12.12.2 via ge-0/0/1.0, Pop
16(S=0)            *[L-ISIS/14] 00:26:15, metric 0
                    >  to 12.12.12.2 via ge-0/0/1.0, Pop
17                 *[L-ISIS/14] 00:25:48, metric 0
                    >  to 13.13.13.3 via ge-0/0/2.0, Pop
17(S=0)            *[L-ISIS/14] 00:25:48, metric 0
                    >  to 13.13.13.3 via ge-0/0/2.0, Pop
10402              *[L-ISIS/14] 00:26:15, metric 10
                    >  to 12.12.12.2 via ge-0/0/1.0, Pop
10402(S=0)         *[L-ISIS/14] 00:26:15, metric 10
                    >  to 12.12.12.2 via ge-0/0/1.0, Pop
10403              *[L-ISIS/14] 00:25:48, metric 10
                    >  to 13.13.13.3 via ge-0/0/2.0, Pop
10403(S=0)         *[L-ISIS/14] 00:25:48, metric 10
                    >  to 13.13.13.3 via ge-0/0/2.0, Pop
10404              *[L-ISIS/14] 00:25:50, metric 20
                    >  to 12.12.12.2 via ge-0/0/1.0, Swap 10404
10405              *[L-ISIS/14] 00:25:16, metric 20
                    >  to 13.13.13.3 via ge-0/0/2.0, Swap 10405
10406              *[L-ISIS/14] 00:25:13, metric 30
                       to 12.12.12.2 via ge-0/0/1.0, Swap 10406
                    >  to 13.13.13.3 via ge-0/0/2.0, Swap 10406

各Adjacency SIDやNode SID宛の経路情報があることが確認できます。

(先ほども見ましたが)CEネットワークの経路情報を確認します。

lab@vJR-01# run show route 220./6

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

221.221.221.0/24   *[BGP/170] 00:17:00, localpref 100, from 6.6.6.6
                      AS path: I, validation-state: unverified
                    >  to 13.13.13.3 via ge-0/0/2.0, Push 10406, Push 10404, Push 10405(top)
222.222.222.0/24   *[BGP/170] 00:17:00, localpref 100, from 6.6.6.6
                      AS path: I, validation-state: unverified
                    >  to 13.13.13.3 via ge-0/0/2.0, Push 10406, Push 10404, Push 10405(top)

「Push 10406, Push 10404, Push 10405(top)」の表記があり、LabelをPushする動作となっています。
設定したTraffic Engineering通りにStackされてますね。
意図通り(Next-hopでvJR-03→)vJR-05→vJR-04→vJR-06の経路でパケット転送されそうです。

最後にCE(vJR-11)からPingを飛ばして各Linkでパケットキャプチャーして確認します。
まずvJR-01~vJR-03間のパケットを見てみます。

「10405」「10404」「10406」のLabelがStackされてますね。

続いて、vJR-03~vJR-05間のパケットを見てみます。

「10405」はPopされて「10404」「10406」のLabelがStackされてます。

続いて、vJR-05~vJR-04間のパケットを見てみます。

「10404」はPopされて「10406」のLabelのみStackされてます。

最後にvJR-04~vJR-06間のパケットを見てみます。

「10406」はPopされて(MPLSヘッダーがない)L2とL3ヘッダーのみのフレームになってますね。
無事、定義した経路でMPLS LabelによってSegment Routingされてました。

ちなみに、今回はvJR-01→vJR-06(vJR-11→vJR-21 or vJR-22)方向のみSegment Routingさせているので、戻りのパケットもTraffic Engineeringさせたい場合はvJR-06に設定が必要になります。

という訳でSR-MPLSを使ったパケット転送の検証ができました!!
今回は以上です。ここまでお読みくださり、ありがとうございました!!!!

4. 参考資料

書籍 Cisco Press 「Segment Routing for Service Provider and Enterprise Networks」
Juniper Documentation - MPLS Applications User Guide - Segment Routing LSP Configuration
www.juniper.net
Juniper DocumentationのUser Guide色々




以上の内容はhttps://yokohama539.hatenablog.com/entry/2025/05/06/013819より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14