toshi01kudo / SR-MPLS_Multi_AS_MPBGP_Practice

1 stars 0 forks source link

Flex-Algoを導入 / Implement Flex-Algo #5

Open toshi01kudo opened 3 years ago

toshi01kudo commented 3 years ago

Enabling Segment Routing Flexible Algorithm: https://www.cisco.com/c/en/us/td/docs/routers/asr9000/software/asr9k-r6-6/segment-routing/configuration/guide/b-segment-routing-cg-asr9000-66x/b-segment-routing-cg-asr9000-66x_chapter_01111.html

Flex-Algoは「IGP(Interior Gateway Protocol)自体を分割するもの」とのこと。 https://www.atmarkit.co.jp/ait/articles/1905/30/news015.html

「SR IGP Flex Algo - Segment Routing」 https://www.segment-routing.net/images/sr-igp-flex-algo-rev4b-km1.pdf

toshi01kudo commented 3 years ago

普通のFlex-AlgoはIGPで制御するもの。Inter AS越しだと普通のやり方ではFlex-Algoの適用は難しいと考えられる。 それぞれで運用するか、もしくはPCEが必要なのかもしれない。

toshi01kudo commented 3 years ago

UG-Cを増やし、XRv-12にFlex-Algoを導入したが、、なぜか曲がらない。。。

csr1000v-kudo-15#trace vrf UG-C-68 100.64.30.69 so 100.64.30.68
Type escape sequence to abort.
Tracing the route to 100.64.30.69
VRF info: (vrf in name/id, vrf out name/id)
  1 172.24.68.2 8 msec 4 msec 3 msec
  2 192.168.23.3 10 msec 7 msec 7 msec
  3 172.24.34.4 7 msec 4 msec 4 msec
  4 192.168.45.5 12 msec 4 msec 4 msec
  5 172.24.69.9 7 msec *  39 msec

(追記:Flex-AlgoのNode SIDはドメイン内で一意である必要があると後からわかって修正)

router isis core
 affinity-map ug-a bit-position 28
 affinity-map ug-a-ex bit-position 128
 affinity-map ug-b bit-position 29
 affinity-map ug-b-ex bit-position 129
 affinity-map ug-c bit-position 30
 affinity-map ug-c-ex bit-position 130
 flex-algo 128
  advertise-definition
  affinity include-any ug-a
  affinity exclude-any ug-a-ex
 flex-algo 129
  advertise-definition
  affinity include-any ug-b
  affinity exclude-any ug-b-ex
 flex-algo 130
  advertise-definition
  affinity include-any ug-c
  affinity exclude-any ug-c-ex
 interface Loopback2
  address-family ipv4 unicast
   prefix-sid algorithm 128 index 282
   prefix-sid algorithm 129 index 292
   prefix-sid algorithm 130 index 302
 interface GigabitEthernet0/0/0/0.12
  affinity flex-algo ug-a-ex ug-c
 interface GigabitEthernet0/0/0/0.23
  affinity flex-algo ug-c-ex ug-a
!
vrf UG-C
 address-family ipv4 unicast
  export route-policy SET_COLOR_UGC
!
extcommunity-set opaque color130-ugc-igp
  130
end-set
!
route-policy SET_COLOR_UGC
  set extcommunity color color130-ugc-igp
  pass
end-policy
!
segment-routing
 traffic-eng
  logging
   policy status
  !
  segment-list sl-ugc
   index 10 mpls label 16230
  !
  policy pol-ugc
   color 130 end-point ipv4 100.64.0.1
   candidate-paths
    preference 100
     explicit segment-list sl-ugc
     !
    !
   !
  !
toshi01kudo commented 3 years ago

ちなみにaffinity include-anyは隠しコマンドだったから、本当に合ってるのか不安。(でも、公式マニュアルには記載がある)

toshi01kudo commented 3 years ago

一つだけにいれても意味がないのか。。?LFIBテーブルにSR-TEという単語が出現したので、何等か反映されているようには見えるが。。まだ曲がらない。。

segment-routing
 traffic-eng
  segment-list sl-ugc
   index 1001 mpls label 17001
  !
  policy pol-ugc
   color 130 end-point ipv4 100.64.0.1
   candidate-paths
    preference 100
     explicit segment-list sl-ugc
RP/0/RP0/CPU0:cisco-kudo-12(config)#do show mpls for
(...snipped...)
24026  Aggregate   UG-C: Per-VRF Aggr[V]   \
                                      UG-C                         15860
24027  Unlabelled  100.64.30.68/32[V] Gi0/0/0/0.68 172.24.68.8     0
24033  Pop         SR TE: 3 [TE-INT]  Gi0/0/0/0.12 192.168.12.1    0
       17001       SR TE: 3 [TE-INT]  Gi0/0/0/0.23 192.168.23.3    0            (!)
24034  Pop         No ID              srte_c_130_e point2point     0
toshi01kudo commented 3 years ago

Segment-routing配下に記述したtraffic-engnieeringのポリシーについて、showコマンドで表示された。存在はしているっぽい。処理したパケット数が0になってるから、何か条件に合致していないのか。。? それにしてもBinding SIDの表記を初めて見た。通常とは異なるルートを通すことのできる、特殊なSIDと聞いている。

RP/0/RP0/CPU0:cisco-kudo-12#show segment-routing traffic-eng forwarding policy
Mon Dec 28 13:30:56.039 UTC

SR-TE Policy Forwarding database
--------------------------------

Color: 130, End-point: 100.64.0.1
  Name: srte_c_130_ep_100.64.0.1
  Binding SID: 24034
  Active LSP:
    Candidate path:
      Preference: 100 (configuration)
      Name: pol-ugc
    Local label: 24029
    Segment lists:
      SL[0]:
        Name: sl-ugc
        Packets/Bytes Switched: 0/0
        Paths:
          Path[0]:
            Outgoing Label: Pop
            Outgoing Interface: GigabitEthernet0/0/0/0.12
            Next Hop: 192.168.12.1
            Switched Packets/Bytes: 0/0
            FRR Pure Backup: No
            ECMP/LFA Backup: No
            Label Stack (Top -> Bottom): { Pop }
          Path[1]:
            Outgoing Label: 17001
            Outgoing Interface: GigabitEthernet0/0/0/0.23
            Next Hop: 192.168.23.3
            Switched Packets/Bytes: 0/0
            FRR Pure Backup: Yes
            ECMP/LFA Backup: Yes
            Label Stack (Top -> Bottom): { 17001 }

  Policy Packets/Bytes Switched: 0/0
toshi01kudo commented 3 years ago

いくつか検証してわかったことがある。 segment-routing配下設定のsegment-list内のindexは単純に順序だけなので、SIDとは無関係。 mpls labelの後ろに指定するのは、Node SIDでなくAdj SIDの方。ただ、手動で設定するAdj SIDでなく、自動で設定されるものを使用。LFIBテーブルのOut going labelを記載するようだ。 今回は下記の通り:(でもよく考えたら最短パスでないものを使用していて、最短パスはPOPだから、どうしたものか。。)

SR-TE Policy Forwarding database

Color: 130, End-point: 100.64.0.1 Name: srte_c_130_ep_100.64.0.1 Binding SID: 24032 Active LSP: Candidate path: Preference: 100 (configuration) Name: pol-ugc Local label: 24033 Segment lists: SL[0]: Name: sl-ugc Packets/Bytes Switched: 0/0 Paths: Path[0]: Outgoing Label: 17003 Outgoing Interface: GigabitEthernet0/0/0/0.12 Next Hop: 192.168.12.1 Switched Packets/Bytes: 0/0 FRR Pure Backup: Yes ECMP/LFA Backup: Yes Label Stack (Top -> Bottom): { 17003 } Path[1]: Outgoing Label: Pop Outgoing Interface: GigabitEthernet0/0/0/0.23 Next Hop: 192.168.23.3 Switched Packets/Bytes: 0/0 FRR Pure Backup: No ECMP/LFA Backup: No Label Stack (Top -> Bottom): { Pop }

Policy Packets/Bytes Switched: 0/0

toshi01kudo commented 3 years ago

POP指定ができないか試したが駄目だった。。 アドレス指定も試してみた。 (曲げることはできなかった)

RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#index 10 mpls label ?
  <0-1048575>  MPLS label value
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#index 10 mpls label pop
                                                                 ^
% Invalid input detected at '^' marker.
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#index 10 mpls label POP
                                                                 ^
% Invalid input detected at '^' marker.
(snipped)
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#show comm c d
Mon Dec 28 13:58:59.131 UTC
Building configuration...
!! IOS XR Configuration 7.0.1
   segment-routing
    traffic-eng
     segment-list sl-ugc
<-    index 10 mpls label 17003
+>    index 10 address ipv4 192.168.12.1
     !
    !
   !
end

RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#do sh mpls for
24026  Aggregate   UG-C: Per-VRF Aggr[V]   \
                                      UG-C                         19592
24027  Unlabelled  100.64.30.68/32[V] Gi0/0/0/0.68 172.24.68.8     0
24028  Pop         SR TE: 3 [TE-INT]  Gi0/0/0/0.12 192.168.12.1    0
       17001       SR TE: 3 [TE-INT]  Gi0/0/0/0.23 192.168.23.3    0            (!)
24032  Pop         No ID              srte_c_130_e point2point     0
toshi01kudo commented 3 years ago

Segment-listで通る経路を指定できると聞いたことがあるので試してみたが。。 ちなみにNode SIDとアドレス指定の両方ともやってみた。 表示上は悪くなさそうだが、、それでも曲がらないのはなぜ。。?

RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#show comm c d
Mon Dec 28 14:08:45.801 UTC
Building configuration...
!! IOS XR Configuration 7.0.1
   segment-routing
    traffic-eng
     segment-list sl-ugc
<-    index 10 mpls label 17001
+>    index 10 address ipv4 100.64.0.1
<-    index 11 mpls label 17003
+>    index 11 address ipv4 100.64.0.3
     !
    !
   !
end
====
24026  Aggregate   UG-C: Per-VRF Aggr[V]   \
                                      UG-C                         19592
24027  Unlabelled  100.64.30.68/32[V] Gi0/0/0/0.68 172.24.68.8     0
24028  17003       SR TE: 3 [TE-INT]  Gi0/0/0/0.12 192.168.12.1    0
       17001       SR TE: 3 [TE-INT]  Gi0/0/0/0.23 192.168.23.3    0            (!)
24032  Pop         No ID              srte_c_130_e point2point     0
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#do sh seg tra for p
Mon Dec 28 14:09:41.927 UTC

SR-TE Policy Forwarding database
--------------------------------

Color: 130, End-point: 100.64.0.1
  Name: srte_c_130_ep_100.64.0.1
  Binding SID: 24032
  Active LSP:
    Candidate path:
      Preference: 100 (configuration)
      Name: pol-ugc
    Local label: 24028
    Segment lists:
      SL[0]:
        Name: sl-ugc
        Packets/Bytes Switched: 0/0
        Paths:
          Path[0]:
            Outgoing Label: 17003
            Outgoing Interface: GigabitEthernet0/0/0/0.12
            Next Hop: 192.168.12.1
            Switched Packets/Bytes: 0/0
            FRR Pure Backup: No
            ECMP/LFA Backup: No
            Label Stack (Top -> Bottom): { 17003 }
          Path[1]:
            Outgoing Label: 17001
            Outgoing Interface: GigabitEthernet0/0/0/0.23
            Next Hop: 192.168.23.3
            Switched Packets/Bytes: 0/0
            FRR Pure Backup: Yes
            ECMP/LFA Backup: Yes
            Label Stack (Top -> Bottom): { 17001, 17003 }

  Policy Packets/Bytes Switched: 0/0
toshi01kudo commented 3 years ago

ISISのFlex-Algo自体は動作しているように見える。通らないリンクを外してlabelを受信しているとわかる。 すなわち、BGP側のカラーリングができてないだけでは。。?

toshi01kudo commented 3 years ago

IGP内全台に入れたらうまくいくかと思ったが、そんなことはなかった。。 AS 65090側にのみ投入し、この検証は一旦凍結する。