Open toshi01kudo opened 3 years ago
普通のFlex-AlgoはIGPで制御するもの。Inter AS越しだと普通のやり方ではFlex-Algoの適用は難しいと考えられる。 それぞれで運用するか、もしくはPCEが必要なのかもしれない。
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
!
!
!
!
ちなみにaffinity include-any
は隠しコマンドだったから、本当に合ってるのか不安。(でも、公式マニュアルには記載がある)
一つだけにいれても意味がないのか。。?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
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
いくつか検証してわかったことがある。 segment-routing配下設定のsegment-list内のindexは単純に順序だけなので、SIDとは無関係。 mpls labelの後ろに指定するのは、Node SIDでなくAdj SIDの方。ただ、手動で設定するAdj SIDでなく、自動で設定されるものを使用。LFIBテーブルのOut going labelを記載するようだ。 今回は下記の通り:(でもよく考えたら最短パスでないものを使用していて、最短パスはPOPだから、どうしたものか。。)
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#sh run seg tra segment-list sl-ugc
Mon Dec 28 13:49:53.421 UTC
segment-routing
traffic-eng
segment-list sl-ugc
index 10 mpls label 17003
上記設定の場合のテーブル表示。 「srte_c_130_ep_100.64.0.1」のLFIBテーブルの前のLocal labelはBinding SIDであるらしい。
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#do show mpls for
(snipped)
Local Outgoing Prefix Outgoing Next Hop Bytes
Label Label or ID Interface Switched
------ ----------- ------------------ ------------ --------------- ------------
15012 Pop SRLB (idx 12) Gi0/0/0/0.12 192.168.12.1 0
15023 Pop SRLB (idx 23) Gi0/0/0/0.23 192.168.23.3 0
16130 Pop SR Pfx (idx 130) Gi0/0/0/0.12 192.168.12.1 0
17001 Pop SR Pfx (idx 1001) Gi0/0/0/0.12 192.168.12.1 0
17001 SR Pfx (idx 1001) Gi0/0/0/0.23 192.168.23.3 0 (!)
17003 Pop SR Pfx (idx 1003) Gi0/0/0/0.23 192.168.23.3 0
17003 SR Pfx (idx 1003) Gi0/0/0/0.12 192.168.12.1 0 (!)
(snipped)
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
24032 Pop No ID srte_c_130_e point2point 0
24033 Pop SR TE: 3 [TE-INT] Gi0/0/0/0.23 192.168.23.3 0
17003 SR TE: 3 [TE-INT] Gi0/0/0/0.12 192.168.12.1 0 (!)
RP/0/RP0/CPU0:cisco-kudo-12(config-sr-te-sl)#do sh seg tra for poli
Mon Dec 28 13:46:12.151 UTC
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
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
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
ISISのFlex-Algo自体は動作しているように見える。通らないリンクを外してlabelを受信しているとわかる。 すなわち、BGP側のカラーリングができてないだけでは。。?
RP/0/RP0/CPU0:cisco-kudo-12#show mpls for
Mon Dec 28 14:29:24.437 UTC
Local Outgoing Prefix Outgoing Next Hop Bytes
Label Label or ID Interface Switched
------ ----------- ------------------ ------------ --------------- ------------
15012 Pop SRLB (idx 12) Gi0/0/0/0.12 192.168.12.1 0
15023 Pop SRLB (idx 23) Gi0/0/0/0.23 192.168.23.3 0
16281 16281 SR Pfx (idx 281) Gi0/0/0/0.23 192.168.23.3 0
16282 16282 SR Pfx (idx 282) Gi0/0/0/0.23 192.168.23.3 0
16283 Pop SR Pfx (idx 283) Gi0/0/0/0.23 192.168.23.3 0
16301 Pop SR Pfx (idx 301) Gi0/0/0/0.12 192.168.12.1 0
16302 16302 SR Pfx (idx 302) Gi0/0/0/0.12 192.168.12.1 0
16303 16303 SR Pfx (idx 303) Gi0/0/0/0.12 192.168.12.1 0
IGP内全台に入れたらうまくいくかと思ったが、そんなことはなかった。。 AS 65090側にのみ投入し、この検証は一旦凍結する。
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
最小化ポリシー(必須): igp-metric or delay or te-metric → Ciscoのデフォルトはigp-metric
除外ルール: SRLG or affinity
全ノードは所属Flex-Algoを配信する必要あり。Loopbackアドレスは他のFlex-Algoと同一のものを使用可能。
Link affinity リンクをグループに所属させ、除外リンクに指定することが可能。