Segment Routing OSPF

今回から最近勉強していたSegment Routingについてまとめていきます。
最初はSegment Routingの概要とOSPFを使用したSegment Routingについて説明します。

 

概要

従来のMPLSネットワーク

MPLS(Multi-Protocol Label Switching)はLabelと呼ばれるタグを使用して、パケットを転送する技術になります。

MPLS網を構成するLabel付きパケットを転送可能なルータをLSR(Label Switch Router)と呼びます。

MPLS網に入ってきたパケットに対して、LSRはLabelを格納したThimヘッダを付加します。このMPLS網の入り口のLSRをIngress LSRと呼びます。LSRはパケットの送信先アドレスではなく、Labelを基に転送先のインタフェースを決定し、パケットをMPLS網の出口のLSRであるEgress LSRまで転送します。
一般的に、パケットに付加されたThimヘッダは、Egress LSRの1つ手前のLSRによって削除されます。この動作をPHP(Penultimate Hop Popping)と呼びます。
また、Label付きパケットが経由するIngress LSRからEgress LSRまでの経路をLSP(Label Switch Path)と呼びます。

 

LSPを確立するためには、LSR間でLabelの情報を交換する必要があり、従来はLDP(Label Distribution Protocol)、または、RSVP(Resource Reservation Protocol)が使用されていました。

LDPの場合、各LSRがルーティングテーブルに存在するPrefixに対して、Labelを割り当てます。
そして、ネイバーに対して自身がPrefixに対して割り当てたLabelを広報します。

 

RSVPの場合、Ingress LSRからEgress LSRに向けてLabelの割り当てを要求するPathメッセージが送信されます。Egress LSRがPathメッセージを受信すると、Labelを生成します。そして、生成したLabelを格納したResvメッセージをIngress LSRに向けて返信します。
Resvメッセージを受信した途中のLSRは、自身で新たなLabelを生成します。そして、生成したLabelをResvメッセージに格納して、Ingress LSRに向けて返信します。

 

従来のMPLSでは、ルート情報の交換にはOSPFやIS-IS等のIGPを使用し、Labelの交換にLDPやRSVPを使用するため、ルータで複数のプロトコルを動作させる必要があります。
動作させるプロトコルが増えれば、運用の負荷も増加してしまいます。

 

Segment

SR(Segment Routing)では、OSPFやIS-ISでルート情報に加えて、Labelも一緒に交換します。

 

SRでは、Labelの割り当て対象をSegmentと呼びます。Segmentには、Prefixに加えて、OSPFやIS-ISのネイバーも含まれます。

Segmentを割り当てるPrefixをPrefix Segmentと呼びます。Prefix Segmentの中で、ルータのLoopback InterfaceのPrefixをNode Segmentと呼び、Node Segmentはルータ自身を表すSegmentになります。

一方、Segmentを割り当てるOSPFやIS-ISのネイバーをAdjacency Segmentと呼びます。

 

各SegmentはSID(Segment ID)によって識別されます。このSIDが従来のMPLSで使用されていたLabelに該当します。Prefix SegmentのSIDをPrefix SID、Node SegmentのSIDをNode SID、Adjacency SegmentのSIDをAdjacency SIDと呼びます。

Prefix SIDとNode SIDはグローバルで一意な値である必要があり、各ルータで同じSIDを使用することができません。(Anycast SIDの場合は複数のルータで同じSIDを使用可能)
一方、Adjacency SIDは各ルータローカルでのみ意味のある値であり、各ルータが同じSIDを使用することが可能です。

 

Instruction

Segment RoutingではIngress LSRのことをHead-end、Egress LSRのことをEnd-pointと呼びます。

TE(Traffic Engineering)を使用しない場合、宛先のネットワークに対応するPrefix SIDを格納したThimヘッダがパケットに付加されて、IGPの最短経路に従ってパケットは転送されます。

 

TE(Traffic Engineering)を使用した場合、Head-endにおいて、パケットをどのように転送するかの指示であるInstructionをパケットに埋め込むことができます。Instructionは複数のSIDで構成されており、SID Listとも呼びます。

SRが有効なルータはパケットに付加されたSID Listを基に、Head-endの指示通りにパケットを転送します。

以図の場合、R1は10.2.2.0/24宛のパケットをR5とR4を経由させる指示をSID Listに格納します。
特定のルータを経由させる、つまり、特定のルータにパケットを転送するという指示は、転送先のルータのNode SIDを使用することで実現できます。
今回はR5とR4を経由させるため、10.2.2.0/24のPrefix SIDに加えて、R5とR4のNode SIDをSID Listに格納します。

 

Adjacency SIDを使用すると、特定のルータの特定のインタフェースからパケットを転送させることができます。
下図の場合、R1は10.2.2.0/24宛のパケットをR3のG4インタフェースを経由させるために、R3のNode SID、R3のR5に対するAdjacency SIDをパケットに格納します。
R3は受信したパケットのSID Listの先頭がAdjacency SIDの場合、対応するR5向けのG4インタフェースからパケットを転送します。

 

ここで大事なのは、Segment、または、SIDは各ルータがパケットをどのように処理(IGPのベストパスに従って転送、特定のインタフェースから転送など)するかを表現しています。

 

SRGBとIndex

各ルータが使用可能なグローバルに意味のあるSID(Node SIDやPrefix SID等)の範囲をSRGB(Segment Routing Global Block)と呼びます。IOS-XRにおけるSRGBのデフォルトの範囲は16000~23999になります。

各ルータのSRGBの情報(SRGBの先頭のSID , SRGBのサイズ)はOSPFやIS-ISで広報されます。

また、Prefix SIDやNode SIDは、そのまま広報されず、SRGBの先頭のSIDからの差分が広報されます。
下図の例では、10.4.4.0/24のPrefix SIDは20301ですが、OSPFは20301をそのまま広報せず、SRGBの先頭のSIDの16000からの差分である4301を広報します。
Prefix SIDの20301をAbsolute Value、SRGBの先頭のSIDからの差分である4301をIndexと呼びます。

 

Segment Routing用のOSPFのLSA

OSPFではOpaque LSAを使用してSegment Routingの情報をやり取りします。Opaque LSAはSegment Routingだけではなく、従来のTE用の情報をOSPFで広報する際にも使用されます。

LSA Type 9~11がOpaque LSAに該当し、LSAのTypeによって、広報される範囲が異なります。

  • Type 9 : Link Local Scopeでルータ間でのみ広報されます。
  • Type 10 : Area Local Scopeでエリア内の全ルータに対して広報されます。
  • Type 11 : AS Scopeで全エリアの全ルータに対して広報されます。

 

Opaque LSAのLink State IDフィールドはOpaque TypeとOpaque IDに分割されており、Opaque Typeの値によって、どのような情報がTLVに格納されているか判断できます。

Opaque IDは、特定のルータが同じOpaque TypeのOpaque LSAを複数生成した際に、それらのOpaque LSAを区別するために使用します。

 

RI Opaque LSA(Opaque Type 4)

RI(Router Information) Opaque LSAには、ルータがサポートしているSegment Routingのアルゴリズム、SRGBの情報等が格納されています
Segment Routingのアルゴリズムに関しましては、Flex Algoと呼ばれる機能を使用する際に正しく理解しておく必要があります。

SR-Algorithm TLV

 

SID/Label Range TLV

 

OSPFv2 Extended Prefix Opaque LSA(Opaeuq Type 7)

OSPFv2 Extended Prefix Opaque LSAにはPrefix SID等のPrefixの情報が格納されています。

OSPFv2 Extended Prefix TLV

・Route Type
ルート情報の生成元のLSAのタイプを示し、1、3、5、7が格納されます。

・A(Attach) Flag
1の場合はABRに直接接続されているPrefixであることを示します。

・N(Node) Flag
1の場合はNode SIDであることを示します。

 

Prefix SID Sub-TLV

・NP(No Penultimate Hop Popping) Flag
1の場合はPHPが無効であることを示します。

・M(Mapping Server) Flag
1の場合はPrefix SIDの生成元がSRMS(Segment Routing Mapping Server)であることを示します。

・E(Explicit Null) Flag
1の場合はExplicit Nullが有効であることを示します。

・V(Value/Index) Flag
0の場合はSIDがIndex、1の場合はSIDがAbsolute Valueであることを示します。

・L(Local/Global) Flag
0の場合はSIDがグローバルで意味のある値、1の場合はSIDが生成元のルータローカルでのみ意味のある値であることを示します。

 

OSPFv2 Extended Link Opaque LSA(Opaque Type 8)

OSPFv2 Extended Link Opaque LSAにはAdjacency SID等のリンクの情報が格納されています。

OSPFv2 Extended Link TLV

・Link Type
1の場合はPoint-to-Pointリンク、2の場合はBroadcastリンクであることを示します。

・Link ID/Link Data
LSAタイプ1/2のLInk IDとLink Dataがそのまま格納されます。

 

Adj-SID Sub-TLV

・B(Backup) Flag
1の場合はFRR(Fast ReRoute)によりバックアップ用のLSPが生成されていることを示します。

・V(Value/Index) Flag
0の場合はSIDがIndex、1の場合はSIDがAbsolute Valueであることを示します。

・L(Local/Global) Flag
0の場合はSIDがグローバルで意味のある値、1の場合はSIDが生成元のルータローカルでのみ意味のある値であることを示します。

・G(Group) Flag
1の場合はAdjacency Groupを参照していることを示します。

・P(Persistent) Flag
1の場合はルータを再起動した際に、SIDが変化しないことを示します。

 

検証の基本設定

基本設定の内容

R1-R2-R3間でOSPF Area 0を構成します。
OSPFでSRを有効にします。

R3でLoopback Interfaceの3.3.3.3/32にPrefix SIDとして20301を割り当てます。

 

初期設定


interface Loopback0
 ipv4 address 1.1.1.1 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.1.1.1 255.255.255.0
!
router ospf 1
 router-id 1.1.1.1
 segment-routing mpls
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
            


interface Loopback0
 ipv4 address 2.2.2.2 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.1.1.2 255.255.255.0
!
interface GigabitEthernet0/0/0/1
 ipv4 address 10.2.2.2 255.255.255.0
!
router ospf 1
 router-id 2.2.2.2
 segment-routing mpls
 area 0
  interface Loopback0
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
  !
  interface GigabitEthernet0/0/0/1
   network point-to-point
            


interface Loopback0
 ipv4 address 3.3.3.3 255.255.255.255
!
interface GigabitEthernet0/0/0/0
 ipv4 address 10.2.2.3 255.255.255.0
!
router ospf 1
 router-id 3.3.3.3
 segment-routing mpls
 area 0
  interface Loopback0
   prefix-sid absolute 20301
  !
  interface GigabitEthernet0/0/0/0
   network point-to-point
            

 

設定と状態確認

Segment Routingの設定確認

OSPFでSRを有効にするには、segment-routing mplsコマンドを設定します。これにより、OSPFはSRの情報を格納したOpaque LSAを生成し、他のルータに広報します。

R1

router ospf 1
 segment-routing mpls
            

 

IOS-XRでは、Loopback Interfaceのアドレスに対してのみPrefix SIDを割り当て可能です。Prefix SIDはprefix-sid absolute <sid>コマンド、または、prefix-sid index <sid>コマンドにより割り当て可能で、自動的にNode SIDであることを示すN Flagがセットされます。また、どちらのコマンドを使用しても、OSPFはSIDのIndexを広報します。

R3

router ospf 1
 area 0
  interface Loopback0
   prefix-sid absolute 20301
            

 

Prefix SIDの設定確認

Prefix SIDはshow ospf sid-databaseコマンドで確認できます。
Absolute Valueである20301ではなく、Indexである4301が確認できます。

R3

RP/0/RP0/CPU0:R3#show ospf sid-database

SID Database for ospf 1 with ID 3.3.3.3

SID          Prefix/Mask
--------     ------------------
4301         3.3.3.3/32               (L)
            

 

Adjacency SIDの設定確認

OSPFネイバーに対して割り当てられたAdjacency SIDはshow ospf segment-routing adjacency-sidsコマンドで確認できます。

R1

RP/0/RP0/CPU0:R1#show ospf segment-routing adjacency-sids

SR Adjacency SIDs for ospf 1 with ID 1.1.1.1

  Codes: C - Static/Configured, D - Dynamic
         P - Protected,         U - Unprotected
         B - Has backup path,   N - No backup path
         A - Deleted Adjacency Protection Active

Adj SID  Neighbor ID     Neighbor Addr   Interface    Attrs  Backup Nexthop  Backup Intf
-------- --------------- --------------- ------------ ------ --------------- ------------
  24000  2.2.2.2         10.1.1.2        Gi0/0/0/0    D U N
            

 

また、show ospf neighbor detailコマンドでもAdjacency SIDが確認できます。

R1

RP/0/RP0/CPU0:R1#show ospf neighbor detail

* Indicates MADJ interface
# Indicates Neighbor awaiting BFD session up

Neighbors for OSPF 1

 Neighbor 2.2.2.2, interface address 10.1.1.2
    In the area 0 via interface GigabitEthernet0/0/0/0
    Neighbor priority is 1, State is FULL, 6 state changes
    DR is 0.0.0.0 BDR is 0.0.0.0
    Options is 0x52
    LLS Options is 0x1 (LR)
    Dead timer due in 00:00:38
    Neighbor is up for 00:13:06
    Number of DBD retrans during last exchange 0
    Index 1/1, retransmission queue length 0, number of retransmission 1
    First 0(0)/0(0) Next 0(0)/0(0)
    Last retransmission scan length is 1, maximum is 1
    Last retransmission scan time is 0 msec, maximum is 0 msec
    LS Ack list: NSR-sync pending 0, high water mark 0
    Adjacency SIDs:
        Label: 24000,    Dynamic, Unprotected
    Neighbor Interface ID: 7

Total neighbor count: 1
            

 

LSDBの確認

OSPFのLSDBを見ると、LSAタイプ10のOpaque LSAが生成されていることが確認できます。

R1

RP/0/RP0/CPU0:R1#show ospf database

            OSPF Router with ID (1.1.1.1) (Process ID 1)

                Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         1093        0x80000002 0x0033b0 3
2.2.2.2         2.2.2.2         1049        0x80000003 0x0096f8 5
3.3.3.3         3.3.3.3         1049        0x80000002 0x008540 3

                Type-10 Opaque Link Area Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Opaque ID
1.0.0.0         1.1.1.1         1113        0x80000001 0x0058d1        0
1.0.0.0         2.2.2.2         1097        0x80000001 0x005cc5        0
1.0.0.0         3.3.3.3         1059        0x80000001 0x0060b9        0
1.0.0.6         1.1.1.1         1093        0x80000001 0x000d0c        6
1.0.0.7         2.2.2.2         1094        0x80000001 0x008a8d        7
1.0.0.7         3.3.3.3         1050        0x80000001 0x008584        7
1.0.0.8         2.2.2.2         1049        0x80000001 0x00f315        8
4.0.0.0         1.1.1.1         1107        0x80000002 0x00e8d0        0
4.0.0.0         2.2.2.2         1093        0x80000002 0x00fab9        0
4.0.0.0         3.3.3.3         1054        0x80000002 0x000da2        0
7.0.0.1         3.3.3.3         1037        0x80000001 0x006c3d        1
8.0.0.6         1.1.1.1         1093        0x80000001 0x00c80f        6
8.0.0.7         2.2.2.2         1094        0x80000001 0x00ebeb        7
8.0.0.7         3.3.3.3         1050        0x80000001 0x009b27        7
8.0.0.8         2.2.2.2         1049        0x80000001 0x00714e        8
            

※補足
Link IDの1.x.x.xのOpaque LSAはTE用のLSAになります。今回、TEは無効ですが、SRを有効にした場合、TE用のLSAも生成されるようです。ただし、中身を確認したところ、不完全な状態でした。
TE用のLSAは、SR-TEの解説の際に説明しますので、今回は省略します。

RI Opaque LSAの確認

RI Opaque LSAの内容を見ると、SRGBの先頭のSIDとSRGBのサイズが格納されていることが確認できます。

補足として、MSD(Maximum SID Depth)は、ルータがSID Listに格納可能なSID数の上限を示しています。

R1

RP/0/RP0/CPU0:R1#show ospf database opaque-area 4.0.0.0 adv-router 1.1.1.1

            OSPF Router with ID (1.1.1.1) (Process ID 1)

                Type-10 Opaque Link Area Link States (Area 0)

  LS age: 1174
  Options: (No TOS-capability, DC)
  LS Type: Opaque Area Link
  Link State ID: 4.0.0.0
  Opaque Type: 4
  Opaque ID: 0
  Advertising Router: 1.1.1.1
  LS Seq Number: 80000002
  Checksum: 0xe8d0
  Length: 68

    Router Information TLV: Length: 4
    Capabilities:
      Graceful Restart Helper Capable
      Stub Router Capable
      All capability bits: 0x60000000

    Segment Routing Algorithm TLV: Length: 2
      Algorithm: 0
      Algorithm: 1

    Segment Routing Range TLV: Length: 12
      Range Size: 8000

        SID sub-TLV: Length 3
         Label: 16000

    Node MSD TLV: Length: 2
        Type: 1, Value 10

    Dynamic Hostname TLV: Length: 2
      Hostname: R1
            

 

以下はRI Opaque LSAのキャプチャになります。SRGBの情報が格納されていることが確認できます。

 

OSPFv2 Extended Prefix Opaque LSAの確認

R3の3.3.3.3/32に関するOSPFv2 Extended Prefix Opaque LSAの内容を見ると、3.3.3.3/32にPrefix SIDのIndexである4301が割り当てられていることが確認できます。また、Node SIDを示すN Flagがセットされていることが確認できます。

R3

RP/0/RP0/CPU0:R3#show ospf database opaque-area 7.0.0.1 adv-router 3.3.3.3

            OSPF Router with ID (3.3.3.3) (Process ID 1)

                Type-10 Opaque Link Area Link States (Area 0)

  LS age: 1238
  Options: (No TOS-capability, DC)
  LS Type: Opaque Area Link
  Link State ID: 7.0.0.1
  Opaque Type: 7
  Opaque ID: 1
  Advertising Router: 3.3.3.3
  LS Seq Number: 80000001
  Checksum: 0x6c3d
  Length: 44

    Extended Prefix TLV: Length: 20
      Route-type: 1
      AF        : 0
      Flags     : 0x40
      Prefix    : 3.3.3.3/32

      SID sub-TLV: Length: 8
        Flags     : 0x0
        MTID      : 0
        Algo      : 0
        SID Index : 4301
            

 

以下はOSPFv2 Extended Prefix Opaque LSAのキャプチャになります。Prefix SIDとしてIndexの4301が格納されていること、また、Node SIDを示すN Flagがセットされていることが確認できます。

 

OSPFv2 Extended Link Opaque LSAの確認

OSPFv2 Extended Link Opaque LSAの内容を見ると、Adjacency SIDとして24000が格納されていることが確認できます。

R1

RP/0/RP0/CPU0:R1#show ospf database opaque-area 8.0.0.6 adv-router 1.1.1.1

            OSPF Router with ID (1.1.1.1) (Process ID 1)

                Type-10 Opaque Link Area Link States (Area 0)

  LS age: 1160
  Options: (No TOS-capability, DC)
  LS Type: Opaque Area Link
  Link State ID: 8.0.0.6
  Opaque Type: 8
  Opaque ID: 6
  Advertising Router: 1.1.1.1
  LS Seq Number: 80000001
  Checksum: 0xc80f
  Length: 128

    Extended Link TLV: Length: 104
      Link-type : 1
      Link ID   : 2.2.2.2
      Link Data : 10.1.1.1

     Adj sub-TLV: Length: 7
        Flags     : 0x60
        MTID      : 0
        Weight    : 0
        Label     : 24000

     Local-ID Remote-ID sub-TLV: Length: 8
        Local Interface ID: 6
        Remote Interface ID: 7

     Remote If Address sub-TLV: Length: 4
        Neighbor Address: 10.1.1.2

     Link MSD sub-TLV: Length: 2
        Type: 1, Value 10

     Link MAX BW sub-TLV: Length: 4
         Maximum bandwidth : 125000000

     ASLA sub-TLV: Length: 16
         SABM Len:    4
         UDABM Len:   0
         SABM Val:    0x40000000
          TE Metric : 1
            

 

以下はOSPFv2 Extended Link Opaque LSAのキャプチャになります。Adjacency SIDとして24000が格納されていることが確認できます。

 

LIFBとFIBの確認

R1とR2のLFIB(Label Forwarding Information Base)に、3.3.3.3/32のPrefix SIDである20301がインストールされていることが確認できます。

R1

RP/0/RP0/CPU0:R1#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
20301  20301       SR Pfx (idx 4301)  Gi0/0/0/0    10.1.1.2        500
24000  Pop         SR Adj (idx 0)     Gi0/0/0/0    10.1.1.2        0
            
R2

RP/0/RP0/CPU0:R2#show mpls forwarding
Local  Outgoing    Prefix             Outgoing     Next Hop        Bytes
Label  Label       or ID              Interface                    Switched
------ ----------- ------------------ ------------ --------------- ------------
20301  Pop         SR Pfx (idx 4301)  Gi0/0/0/1    10.2.2.3        500
24000  Pop         SR Adj (idx 0)     Gi0/0/0/0    10.1.1.1        0
24001  Pop         SR Adj (idx 0)     Gi0/0/0/1    10.2.2.3        0
            

 

R1のFIB(Forwarding Information Base)を見ると、R1は3.3.3.3/32宛のパケットに対して、SID 20301を付加することが確認できます。

R1

RP/0/RP0/CPU0:R1#show cef 3.3.3.3/32
3.3.3.3/32, version 23, labeled SR, internal 0x1000001 0x81 (ptr 0xdfa35f0) [1], 0x0 (0xe1645e8), 0xa28 (0xed301e8)
 Updated Jun  2 19:05:25.167
 remote adjacency to GigabitEthernet0/0/0/0
 Prefix Len 32, traffic index 0, precedence n/a, priority 1
   via 10.1.1.2/32, GigabitEthernet0/0/0/0, 4 dependencies, weight 0, class 0 [flags 0x0]
    path-idx 0 NHID 0x0 [0xf147140 0x0]
    next hop 10.1.1.2/32
    remote adjacency
     local label 20301      labels imposed {20301}
            

 

疎通確認

R1の1.1.1.1からR3の3.3.3.3へTracerouteとPingを実施します。

 

R1はSID 20301をパケットに付加して転送していることが確認できます。また、R2はパケットからSID 20301を削除していることが確認できます。

R1

RP/0/RP0/CPU0:R1#traceroute 3.3.3.3 source 1.1.1.1

Type escape sequence to abort.
Tracing the route to 3.3.3.3

 1  10.1.1.2 [MPLS: Label 20301 Exp 0] 96 msec  95 msec  96 msec
 2  10.2.2.3 82 msec  *  100 msec
            

 

以下はR1-R2間でキャプチャしたR1の1.1.1.1からR3の3.3.3.3へ送信したICMP Echoになります。
R1はパケットにSID 20301を付加して転送していることが確認できます。

 

以下はR2-R3間でキャプチャしたR1の1.1.1.1からR3の3.3.3.3へ送信したICMP Echoになります。
R2はパケットからSID 20301を削除していることが確認できます。

コメント

タイトルとURLをコピーしました