Single-Domain SR-TE その3(Anycast-SID)
SR-TE & Anycast-SID が理解できたので自分のメモ用にアウトプットします。
- 1. Anycast-SID
- 2. Topology
- 3. Config
- 4.Anycast-SIDの実装
- 5. SR-TE の実装
- 5.2 Head-End(h_N1)
- 6. 検証
- 7. 検証から得られたこと
- 8. 参考
1. Anycast-SID
複数のノードをグループ化して1つのSIDとして扱う技術
2. Topology
3. Config
h_N1(Head-End)
hostname h_N1 group CCIE-ISIS router isis '.*' is-type level-2-only address-family ipv4 unicast metric-style wide segment-routing mpls ! interface 'Gi.*' point-to-point address-family ipv4 unicast ! ! interface 'Loopback .*' address-family ipv4 unicast ! ! ! end-group ! interface Loopback0 ipv4 address 1.1.1.1 255.255.255.255 ! interface MgmtEth0/RP0/CPU0/0 shutdown ! interface GigabitEthernet0/0/0/0 ipv4 address 10.1.2.1 255.255.255.0 ! interface GigabitEthernet0/0/0/2 ipv4 address 10.1.3.1 255.255.255.0 ! ! router isis 1 apply-group CCIE-ISIS net 49.0001.0000.0000.0001.00 interface Loopback0 address-family ipv4 unicast prefix-sid index 1 ! ! interface GigabitEthernet0/0/0/0 ! interface GigabitEthernet0/0/0/2 ! ! mpls oam ! segment-routing traffic-eng segment-list ANYCAST index 10 mpls label 16045 index 20 mpls label 16006 ! policy VIA_ANYCAST_SID_POLICY binding-sid mpls 24365 color 600 end-point ipv4 6.6.6.6 autoroute include ipv4 6.6.6.6/32 ! candidate-paths preference 100 explicit segment-list ANYCAST ! ! ! ! ! ! end
h_N2
hostname h_N2 group CCIE-ISIS router isis '.*' is-type level-2-only address-family ipv4 unicast metric-style wide segment-routing mpls ! interface 'Gi.*' point-to-point address-family ipv4 unicast ! ! interface 'Loopback .*' address-family ipv4 unicast ! ! ! end-group ! interface Loopback0 ipv4 address 2.2.2.2 255.255.255.255 ! interface MgmtEth0/RP0/CPU0/0 shutdown ! interface GigabitEthernet0/0/0/0 ipv4 address 10.1.2.2 255.255.255.0 ! interface GigabitEthernet0/0/0/1 ipv4 address 10.2.3.2 255.255.255.0 ! interface GigabitEthernet0/0/0/2 ipv4 address 10.2.4.2 255.255.255.0 ! ! router isis 1 apply-group CCIE-ISIS net 49.0001.0000.0000.0002.00 interface Loopback0 address-family ipv4 unicast prefix-sid index 2 ! ! interface GigabitEthernet0/0/0/0 ! interface GigabitEthernet0/0/0/1 ! interface GigabitEthernet0/0/0/2 ! ! mpls oam ! end
h_N3
hostname h_N3 group CCIE-ISIS router isis '.*' is-type level-2-only address-family ipv4 unicast metric-style wide segment-routing mpls ! interface 'Gi.*' point-to-point address-family ipv4 unicast ! ! interface 'Loopback .*' address-family ipv4 unicast ! ! ! end-group ! interface Loopback0 ipv4 address 3.3.3.3 255.255.255.255 ! interface MgmtEth0/RP0/CPU0/0 shutdown ! interface GigabitEthernet0/0/0/0 ipv4 address 10.1.3.3 255.255.255.0 ! interface GigabitEthernet0/0/0/1 ipv4 address 10.2.3.3 255.255.255.0 ! interface GigabitEthernet0/0/0/2 ipv4 address 10.3.5.3 255.255.255.0 ! interface GigabitEthernet0/0/0/3 ipv4 address 10.3.4.3 255.255.255.0 ! router isis 1 apply-group CCIE-ISIS net 49.0001.0000.0000.0003.00 interface Loopback0 address-family ipv4 unicast prefix-sid index 3 ! ! interface GigabitEthernet0/0/0/0 ! interface GigabitEthernet0/0/0/1 ! interface GigabitEthernet0/0/0/2 ! interface GigabitEthernet0/0/0/3 ! ! mpls oam ! end
h_N4(Anycast-SIDあり)
hostname h_N4 group CCIE-ISIS router isis '.*' is-type level-2-only address-family ipv4 unicast metric-style wide segment-routing mpls ! interface 'Gi.*' point-to-point address-family ipv4 unicast ! ! interface 'Loopback .*' address-family ipv4 unicast ! ! ! end-group ! interface Loopback0 ipv4 address 4.4.4.4 255.255.255.255 ! interface GigabitEthernet0/0/0/0 ipv4 address 10.2.4.4 255.255.255.0 ! interface GigabitEthernet0/0/0/1 ipv4 address 10.4.5.4 255.255.255.0 ! interface GigabitEthernet0/0/0/2 ipv4 address 10.4.6.4 255.255.255.0 ! interface GigabitEthernet0/0/0/3 ipv4 address 10.3.4.4 255.255.255.0 ! router isis 1 apply-group CCIE-ISIS net 49.0001.0000.0000.0004.00 interface Loopback0 address-family ipv4 unicast prefix-sid index 45 n-flag-clear ! ! interface GigabitEthernet0/0/0/0 ! interface GigabitEthernet0/0/0/1 ! interface GigabitEthernet0/0/0/2 ! interface GigabitEthernet0/0/0/3 ! ! mpls oam ! end
h_N5(Anycast-SIDあり)
hostname h_N5 group CCIE-ISIS router isis '.*' is-type level-2-only address-family ipv4 unicast metric-style wide segment-routing mpls ! interface 'Gi.*' point-to-point address-family ipv4 unicast ! ! interface 'Loopback .*' address-family ipv4 unicast ! ! ! end-group ! interface Loopback0 ipv4 address 5.5.5.5 255.255.255.255 ! interface GigabitEthernet0/0/0/0 ipv4 address 10.3.5.5 255.255.255.0 ! interface GigabitEthernet0/0/0/1 ipv4 address 10.4.5.5 255.255.255.0 ! interface GigabitEthernet0/0/0/2 ipv4 address 10.5.6.5 255.255.255.0 ! ! router isis 1 apply-group CCIE-ISIS net 49.0001.0000.0000.0005.00 interface Loopback0 address-family ipv4 unicast prefix-sid index 45 n-flag-clear ! ! interface GigabitEthernet0/0/0/0 ! interface GigabitEthernet0/0/0/1 ! interface GigabitEthernet0/0/0/2 ! ! mpls oam ! end
h_N6
hostname h_N6 group CCIE-ISIS router isis '.*' is-type level-2-only address-family ipv4 unicast metric-style wide segment-routing mpls ! interface 'Gi.*' point-to-point address-family ipv4 unicast ! ! interface 'Loopback .*' address-family ipv4 unicast ! ! ! end-group ! interface Loopback0 ipv4 address 6.6.6.6 255.255.255.255 ! interface GigabitEthernet0/0/0/0 ipv4 address 10.4.6.6 255.255.255.0 ! interface GigabitEthernet0/0/0/2 ipv4 address 10.5.6.6 255.255.255.0 ! router isis 1 apply-group CCIE-ISIS net 49.0001.0000.0000.0006.00 interface Loopback0 address-family ipv4 unicast prefix-sid index 6 ! ! interface GigabitEthernet0/0/0/0 ! interface GigabitEthernet0/0/0/2 ! ! mpls oam ! end
4.Anycast-SIDの実装
① IGPでSegment Routing を有効にします。
router isis '.*' net 49.0001.0000.0000.000X.00 address-family ipv4 unicast metric-style wide segment-routing mpls !
② 忘れずに Loopback0 で prefix-sid index X を有効化します。
この時に ” n-flag-clear ”を付与します。今回は、h_N4 と h_N5 で 同じ Anycast-SID を定義します。
IOS-XR の Default SRGB(16000-23999) に対して、index 45 を指定します。
つまり、Anycast-SID:16045 を指定します。
Loopback で指定するように absolute 16045(SRGB込みの絶対値)と指定しても同じことです。
index 45 も任意の値で良いです。ここでは、定義するノード名が分かるように 45 としただけです。
RP/0/RP0/CPU0:h_N5(config)#router isis 1 RP/0/RP0/CPU0:h_N5(config-isis)#interface loopback 0 RP/0/RP0/CPU0:h_N5(config-isis-if)#address-family ipv4 unicast RP/0/RP0/CPU0:h_N5(config-isis-if-af)#prefix-sid index 45 ? n-flag-clear Clear N-flag for the prefix-SID <cr> RP/0/RP0/CPU0:h_N5(config-isis-if-af)#prefix-sid index 45 n-flag-clear ? <cr> RP/0/RP0/CPU0:h_N5(config-isis-if-af)#prefix-sid index 45 n-flag-clear
5. SR-TE の実装
実装の流れは、①全ノードでSegment Routing を有効にしてから ②Head-End で explicit Path を定義し、
③SR-TEのポリシーを定義します。④最後に経路(Candidate-paths)の候補を②で指定した path list から選択します。
前回、前々回(SR-TE その1、その2)と異なる点は、Path list に Anycast-SID が含まれているか否かの違いです。
5.1 全ノード共通
IGPでSegment Routing を有効にします。
忘れずに Loopback0 で prefix-sid index X を有効化します。
ただし、Anycast-SIDを定義しないノードに限ります。
router isis '.*' net 49.0001.0000.0000.000X.00 address-family ipv4 unicast metric-style wide segment-routing mpls ! interface Loopback 0 address-family ipv4 unicast prefix-sid index X ! ! !
5.2 Head-End(h_N1)
5.2.1 explicit Path の定義
① Segment Routing を定義します。
RP/0/RP0/CPU0:h_N1(config)# segment-routing Segment Routing
② Segment Routing で Traffic Engineering を定義します。
RP/0/RP0/CPU0:h_N1(config-sr)#? traffic-eng Segment Routing Traffic Engineering
③ Segment-list configuration でSegment-list名(任意:ANYCAST)を定義します。
RP/0/RP0/CPU0:h_N1(config-sr-te)#? segment-list Segment-list configuration RP/0/RP0/CPU0:h_N1(config-sr-te)#segment-list ? name Segment-list name WORD Identifying name for segment-list RP/0/RP0/CPU0:h_N1(config-sr-te)#segment-list ANYCAST
④ SR-TEで経路を明示的に定義します。
RP/0/RP0/CPU0:h_N1(config-sr-te-sl)#? index Next entry index RP/0/RP0/CPU0:h_N1(config-sr-te-sl)#index ? <1-65535> Index number RP/0/RP0/CPU0:h_N1(config-sr-te-sl)#index 10 ? mpls MPLS configuration RP/0/RP0/CPU0:h_N1(config-sr-te-sl)#index 10 mpls ? label MPLS label configuration RP/0/RP0/CPU0:h_N1(config-sr-te-sl)#index 10 mpls label ? <0-1048575> MPLS label value RP/0/RP0/CPU0:h_N1(config-sr-te-sl)#index 10 mpls label 16045 ? <cr>
今回は、Node1→(Anycast-SID:Node4 or 5)→6 を作ります。
segment-routing traffic-eng segment-list ANYCAST ★index 10 mpls label 16045 index 20 mpls label 16006 ! ! !
★ が今回のメイントピックである Anycast-SID です。
5.2.2 SR-TE Policy の定義
SR-TE Policy を以下のように定義します。
a) ポリシー名 :VIA_ANYCAST_SID_POLICY
b) B-SID(任意):24365
c) color :600
d) Tail-End :6.6.6.6(h_N6)
SR-TEは、a)ポリシー名とc)カラー、d)Tail-Endの指定が必須です。
① 先ずはポリシー名を定義します。
RP/0/RP0/CPU0:h_N1(config-sr-te)#policy ? WORD Identifying name for policy with max 59 characters RP/0/RP0/CPU0:h_N1(config-sr-te)#policy VIA_ANYCAST_SID_POLICY
② B-SID(binding-sid)は任意設定です。 ※ SR-TE Policy自体に割り当てられたSIDをB-SID(binding-sid)と呼びます。
RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#? binding-sid Binding Segment Identifier RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#binding-sid ? mpls MPLS label RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#binding-sid mpls ? <16-1048575> MPLS label RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#binding-sid mpls 24365 ? <cr>
③ 次にカラーとTail-Endを指定します。
RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#? color Specify color for policy RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#color ? <1-4294967295> Color value RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#color 600 ? end-point Policy endpoint RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#color 600 end-point ? ipv4 IPv4 address RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#color 600 end-point ipv4 ? A.B.C.D IPv4 endpoint address RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#color 600 end-point ipv4 6.6.6.6 ? <cr>
5.2.3 Candidate-paths の定義
Candidate-paths を以下のように定義します。
a) preference :100(大きい方が優先されます!)
b) explicit path :ANYCAST
preference と指定する経路リストをセットで指定します。
RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#? candidate-paths Candidate-paths configuration RP/0/RP0/CPU0:h_N1(config-sr-te-policy)#candidate-paths RP/0/RP0/CPU0:h_N1(config-sr-te-policy-path)#? preference Policy path-option preference entry RP/0/RP0/CPU0:h_N1(config-sr-te-policy-path)#preference ? <1-65535> Path-option preference RP/0/RP0/CPU0:h_N1(config-sr-te-policy-path)#preference 100 RP/0/RP0/CPU0:h_N1(config-sr-te-policy-path-pref)#? explicit Preconfigured path RP/0/RP0/CPU0:h_N1(config-sr-te-policy-path-pref)#explicit ? segment-list Specify Segment-list RP/0/RP0/CPU0:h_N1(config-sr-te-policy-path-pref)#explicit segment-list ? EXPLICIT_LIST Identifying name for segment-list WORD Identifying name for segment-list RP/0/RP0/CPU0:h_N1(config-sr-te-policy-path-pref)#explicit segment-list ANYCAST
全体像としてはこのようになります。
segment-routing traffic-eng segment-list ANYCAST index 10 mpls label 16045 index 20 mpls label 16006 ! policy VIA_ANYCAST_SID_POLICY color 600 end-point ipv4 6.6.6.6 autoroute include ipv4 6.6.6.6/32 ! candidate-paths preference 100 explicit segment-list ANYCAST ! ! ! ! ! !
6. 検証
6.1 SR-TE 基本確認
SR-TEを定義すると新しいインターフェース(SR-TE用のLSP)が出現します。
RP/0/RP0/CPU0:h_N1#show ip interface brief | exclude una Tue Mar 21 11:13:12.628 UTC Interface IP-Address Status Protocol Vrf-Name ★srte_c_600_ep_6.6.6.6 1.1.1.1 Up Up default Loopback0 1.1.1.1 Up Up default GigabitEthernet0/0/0/0 10.1.2.1 Up Up default GigabitEthernet0/0/0/2 10.1.3.1 Up Up default RP/0/RP0/CPU0:h_N1#
今回定義したSR-TEポリシーは、Head-End:1.1.1.1(h_N1)、color:60、Tail-End:6.6.6.6(h_N6)です。 ルーティングにその変化が現れています。
RP/0/RP0/CPU0:h_N1#show route | begin Gate Tue Mar 21 11:18:12.486 UTC Gateway of last resort is not set L 1.1.1.1/32 is directly connected, 1d08h, Loopback0 i L2 2.2.2.2/32 [115/20] via 10.1.2.2, 00:02:00, GigabitEthernet0/0/0/0 i L2 3.3.3.3/32 [115/20] via 10.1.3.3, 00:02:00, GigabitEthernet0/0/0/2 i L2 4.4.4.4/32 [115/30] via 10.1.2.2, 00:02:00, GigabitEthernet0/0/0/0 [115/30] via 10.1.3.3, 00:02:00, GigabitEthernet0/0/0/2 i L2 5.5.5.5/32 [115/30] via 10.1.3.3, 00:02:00, GigabitEthernet0/0/0/2 ★i L2 6.6.6.6/32 [115/40] via 6.6.6.6, 01:12:28, srte_c_600_ep_6.6.6.6 C 10.1.2.0/24 is directly connected, 07:51:28, GigabitEthernet0/0/0/0 L 10.1.2.1/32 is directly connected, 07:51:28, GigabitEthernet0/0/0/0 C 10.1.3.0/24 is directly connected, 07:43:37, GigabitEthernet0/0/0/2 L 10.1.3.1/32 is directly connected, 07:43:37, GigabitEthernet0/0/0/2 i L2 10.2.3.0/24 [115/20] via 10.1.2.2, 00:02:00, GigabitEthernet0/0/0/0 [115/20] via 10.1.3.3, 00:02:00, GigabitEthernet0/0/0/2 i L2 10.2.4.0/24 [115/20] via 10.1.2.2, 00:02:00, GigabitEthernet0/0/0/0 i L2 10.3.4.0/24 [115/20] via 10.1.3.3, 00:02:00, GigabitEthernet0/0/0/2 i L2 10.3.5.0/24 [115/20] via 10.1.3.3, 00:02:00, GigabitEthernet0/0/0/2 i L2 10.4.5.0/24 [115/30] via 10.1.2.2, 00:00:53, GigabitEthernet0/0/0/0 [115/30] via 10.1.3.3, 00:00:53, GigabitEthernet0/0/0/2 i L2 10.4.6.0/24 [115/30] via 10.1.2.2, 00:02:00, GigabitEthernet0/0/0/0 [115/30] via 10.1.3.3, 00:02:00, GigabitEthernet0/0/0/2 i L2 10.5.6.0/24 [115/30] via 10.1.3.3, 00:02:00, GigabitEthernet0/0/0/2 L 127.0.0.0/8 [0/0] via 0.0.0.0, 1d08h RP/0/RP0/CPU0:h_N1#
Head-End:1.1.1.1(h_N1)の LFIB を確認すると、 SR-TEの NEXT_HOP やTail-End、B-SID(任意):24365も確認できます。
SR-TE(EXPLICIT_PATH_POLICY)
・Head-End:1.1.1.1(h_N1)
・NEXT_HOP:10.1.2.2(Gi0/0/0/0)
・NEXT_HOP:10.1.3.3(Gi0/0/0/2)
・B-SID :24365
RP/0/RP0/CPU0:h_N1#show mpls forwarding Mon Mar 20 13:00:42.380 UTC Local Outgoing Prefix Outgoing Next Hop Bytes Label Label or ID Interface Switched ------ ----------- ------------------ ------------ --------------- ------------ 16002 Pop SR Pfx (idx 2) Gi0/0/0/0 10.1.2.2 0 16003 Pop SR Pfx (idx 3) Gi0/0/0/2 10.1.3.3 0 16004 16004 SR Pfx (idx 4) Gi0/0/0/0 10.1.2.2 0 16004 SR Pfx (idx 4) Gi0/0/0/2 10.1.3.3 0 16005 16005 SR Pfx (idx 5) Gi0/0/0/2 10.1.3.3 0 16006 16006 SR Pfx (idx 6) Gi0/0/0/0 10.1.2.2 0 16006 SR Pfx (idx 6) Gi0/0/0/2 10.1.3.3 0 24000 Pop SR Adj (idx 1) Gi0/0/0/2 10.1.3.3 0 24001 Pop SR Adj (idx 3) Gi0/0/0/2 10.1.3.3 0 24002 Pop SR Adj (idx 1) Gi0/0/0/0 10.1.2.2 0 24003 Pop SR Adj (idx 3) Gi0/0/0/0 10.1.2.2 0 24004 Pop No ID Gi0/0/0/2 10.1.3.3 0 24005 Pop No ID Gi0/0/0/0 10.1.2.2 0 ☆24007 Pop 6.6.6.6/32 srte_c_60_ep 6.6.6.6 0 ☆24008 16004 SR TE: 1 [TE-INT] Gi0/0/0/0 10.1.2.2 196 ☆ 16005 SR TE: 1 [TE-INT] Gi0/0/0/2 10.1.3.3 560 ☆24365 Pop No ID srte_c_60_ep point2point 0 RP/0/RP0/CPU0:h_N1#
CEFを確認するとSR-TEで定義した内容が反映されています。他のLoopbackアドレスと見比べると分かりやすいかと思います。
SR-TEのautorouteが効いています。他のLoopbackアドレスだとNEXT_HOPがインターフェース名ですが、Head-End宛だけがSR-TEになっています。
RP/0/RP0/CPU0:h_N1#show cef Tue Mar 21 11:39:07.609 UTC Prefix Next Hop Interface ------------------- ------------------- ------------------ 0.0.0.0/0 drop default handler 0.0.0.0/32 broadcast 1.1.1.1/32 receive Loopback0 2.2.2.2/32 10.1.2.2/32 GigabitEthernet0/0/0/0 3.3.3.3/32 10.1.3.3/32 GigabitEthernet0/0/0/2 4.4.4.4/32 10.1.2.2/32 GigabitEthernet0/0/0/0 10.1.3.3/32 GigabitEthernet0/0/0/2 5.5.5.5/32 10.1.3.3/32 GigabitEthernet0/0/0/2 ☆6.6.6.6/32 6.6.6.6/32 srte_c_600_ep_6.6.6.6 10.1.2.0/24 attached GigabitEthernet0/0/0/0 10.1.2.0/32 broadcast GigabitEthernet0/0/0/0 10.1.2.1/32 receive GigabitEthernet0/0/0/0 10.1.2.255/32 broadcast GigabitEthernet0/0/0/0 10.1.3.0/24 attached GigabitEthernet0/0/0/2 10.1.3.0/32 broadcast GigabitEthernet0/0/0/2 10.1.3.1/32 receive GigabitEthernet0/0/0/2 10.1.3.255/32 broadcast GigabitEthernet0/0/0/2 10.2.3.0/24 10.1.2.2/32 GigabitEthernet0/0/0/0 10.1.3.3/32 GigabitEthernet0/0/0/2 10.2.4.0/24 10.1.2.2/32 GigabitEthernet0/0/0/0 10.3.4.0/24 10.1.3.3/32 GigabitEthernet0/0/0/2 10.3.5.0/24 10.1.3.3/32 GigabitEthernet0/0/0/2 10.4.5.0/24 10.1.2.2/32 GigabitEthernet0/0/0/0 10.1.3.3/32 GigabitEthernet0/0/0/2 10.4.6.0/24 10.1.2.2/32 GigabitEthernet0/0/0/0 10.1.3.3/32 GigabitEthernet0/0/0/2 10.5.6.0/24 10.1.3.3/32 GigabitEthernet0/0/0/2 127.0.0.0/8 receive 224.0.0.0/4 0.0.0.0/32 224.0.0.0/24 receive 255.255.255.255/32 broadcast RP/0/RP0/CPU0:h_N1#
SR-TE ポリシーの情報はコマンドで確認することができます。
RP/0/RP0/CPU0:h_N1#show segment-routing traffic-eng policy Tue Mar 21 11:46:31.652 UTC SR-TE policy database --------------------- Color: 600, End-point: 6.6.6.6 ★1 Name: srte_c_600_ep_6.6.6.6 Status: ★2 Admin: up Operational: up for 08:34:10 (since Mar 21 03:12:21.568) Candidate-paths: Preference: 100 (configuration) (active) ★3 Name: VIA_ANYCAST_SID_POLICY ★4 Requested BSID: 24365 Protection Type: protected-preferred Maximum SID Depth: 10 ★5 Explicit: segment-list ANYCAST (valid) Weight: 1, Metric Type: TE 16045 16006 Attributes: Binding SID: 24365 Forward Class: Not Configured Steering labeled-services disabled: no Steering BGP disabled: no IPv6 caps enable: yes Invalidation drop enabled: no RP/0/RP0/CPU0:h_N1#
★1:Color と End-point(Head-End) が自動的にLSP名に反映されるのが特徴です。
SR-TE LSP名(Name: srte_c_6_ep_6.6.6.6)から、Color: 60, End-point: 6.6.6.6であることが分かります。
★2:SR-TEが有効な状態を示しています。
★3:SR-TE ポリシーは、VIA_ANYCAST_SID_POLICY であることが分かります。
★4:このSR-TEに紐づけられているBinding SIDは、 24365 であることが分かります。
★5:Explicit path が指定されていることが分かります。
6.2 ロードバランシング
ドキュメントは見つけられなかったのですが、どうやら Anycast group では master となるノードが決まっているようです。
以下想像している条件です。
・Loopback のIPアドレスが小さい方のノード
・Anycast group のうちで uptime が最も長いノード
以下のような青いトラフィックと緑のトラフィックのようなロードバランシングを最初想像していました。
でも実際は、全くの別物でした。どうやら Anycast group では master となるノードが決まっているようで、 なおかつ master となるノードを経由する経路でロードバランシングできるならロードバランシングすると言う挙動でした。
百聞は一見に如かずトラフィックがどのようにロードバランシングするのかを示します。
TRACEROUTE を10回実行した結果を確認できます
RP/0/RP0/CPU0:h_N1#! 1st attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:26.520 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 9 msec 3 msec 10.1.2.2 6 msec 2 10.3.4.4 [MPLS: Label 16006 Exp 0] 6 msec 10.2.4.4 4 msec 3 msec 3 10.4.6.6 8 msec * 9 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 2nd attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:30.123 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.2.2 [MPLS: Labels 16045/16006 Exp 0] 5 msec 10.1.3.3 3 msec 10.1.2.2 4 msec 2 10.2.4.4 [MPLS: Label 16006 Exp 0] 3 msec 10.3.4.4 3 msec 3 msec 3 10.4.6.6 5 msec * 8 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 3rd attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:33.703 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 5 msec 10.1.2.2 5 msec 10.1.3.3 3 msec 2 10.2.4.4 [MPLS: Label 16006 Exp 0] 3 msec 10.3.4.4 6 msec 3 msec 3 10.4.6.6 9 msec * 13 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 4th attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:37.229 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.2.2 [MPLS: Labels 16045/16006 Exp 0] 5 msec 10.1.3.3 3 msec 10.1.2.2 22 msec 2 10.2.4.4 [MPLS: Label 16006 Exp 0] 3 msec 3 msec 3 msec 3 10.4.6.6 11 msec * 5 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 5th attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:40.785 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.2.2 [MPLS: Labels 16045/16006 Exp 0] 14 msec 10.1.3.3 3 msec 10.1.2.2 7 msec 2 10.3.4.4 [MPLS: Label 16006 Exp 0] 7 msec 10.2.4.4 8 msec 10.3.4.4 3 msec 3 10.4.6.6 12 msec * 6 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 6th attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:44.358 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.2.2 [MPLS: Labels 16045/16006 Exp 0] 6 msec 3 msec 10.1.3.3 3 msec 2 10.3.4.4 [MPLS: Label 16006 Exp 0] 4 msec 5 msec 10.2.4.4 3 msec 3 10.4.6.6 5 msec * 6 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 7th attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:47.923 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 5 msec 10.1.2.2 5 msec 3 msec 2 10.3.4.4 [MPLS: Label 16006 Exp 0] 4 msec 3 msec 3 msec 3 10.4.6.6 5 msec * 6 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 8th attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:51.446 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.2.2 [MPLS: Labels 16045/16006 Exp 0] 5 msec 10.1.3.3 3 msec 10.1.2.2 8 msec 2 10.2.4.4 [MPLS: Label 16006 Exp 0] 3 msec 3 msec 3 msec 3 10.4.6.6 5 msec * 8 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 9th attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:55.084 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.2.2 [MPLS: Labels 16045/16006 Exp 0] 4 msec 10.1.3.3 3 msec 10.1.2.2 3 msec 2 10.3.4.4 [MPLS: Label 16006 Exp 0] 3 msec 10.2.4.4 3 msec 10.3.4.4 3 msec 3 10.4.6.6 4 msec * 5 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 10th attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:13:58.648 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.2.2 [MPLS: Labels 16045/16006 Exp 0] 4 msec 10.1.3.3 3 msec 3 msec 2 10.2.4.4 [MPLS: Label 16006 Exp 0] 5 msec 3 msec 3 msec 3 * 10.4.6.6 5 msec * RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#show mpls forwarding | i "TE|Label|Next|---" Tue Mar 21 12:14:19.420 UTC Local Outgoing Prefix Outgoing Next Hop Bytes Label Label or ID Interface Switched ------ ----------- ------------------ ------------ --------------- ------------ 24009 16045 SR TE: 2 [TE-INT] Gi0/0/0/0 10.1.2.2 1344 16045 SR TE: 2 [TE-INT] Gi0/0/0/2 10.1.3.3 1176 RP/0/RP0/CPU0:h_N1#
LFIB を見るとロードバランシング出来ている様子が見て取れます。
RP/0/RP0/CPU0:h_N1#show mpls forwarding Tue Mar 21 12:16:18.524 UTC Local Outgoing Prefix Outgoing Next Hop Bytes Label Label or ID Interface Switched ------ ----------- ------------------ ------------ --------------- ------------ 16002 Pop SR Pfx (idx 2) Gi0/0/0/0 10.1.2.2 0 16003 Pop SR Pfx (idx 3) Gi0/0/0/2 10.1.3.3 0 16006 16006 SR Pfx (idx 6) Gi0/0/0/0 10.1.2.2 0 16006 SR Pfx (idx 6) Gi0/0/0/2 10.1.3.3 0 16045 16045 SR Pfx (idx 45) Gi0/0/0/0 10.1.2.2 0 16045 SR Pfx (idx 45) Gi0/0/0/2 10.1.3.3 0 24000 Pop SR Adj (idx 1) Gi0/0/0/2 10.1.3.3 0 24001 Pop SR Adj (idx 3) Gi0/0/0/2 10.1.3.3 0 24002 Pop SR Adj (idx 1) Gi0/0/0/0 10.1.2.2 0 24003 Pop SR Adj (idx 3) Gi0/0/0/0 10.1.2.2 0 24004 Pop No ID Gi0/0/0/2 10.1.3.3 0 Pop No ID Gi0/0/0/0 10.1.2.2 0 24007 Pop 6.6.6.6/32 srte_c_600_e 6.6.6.6 0 ★24009 16045 SR TE: 2 [TE-INT] Gi0/0/0/0 10.1.2.2 1344 ★ 16045 SR TE: 2 [TE-INT] Gi0/0/0/2 10.1.3.3 1176 24365 Pop No ID srte_c_600_e point2point 0 RP/0/RP0/CPU0:h_N1#
SR-TE policy の状態を確認すると Path[0] と Path[1] にロードバランシングしています。 だがしかし、Anycast group は、h_N4 と h_N5 の二つあるのに h_N4 宛にしかパケットを転送しません。
6.3 冗長性
ここで、master Node (勝手に命名したもので正式名称ではありません)を再起動します。
RP/0/RP0/CPU0:h_N4#admin hw-module location all reload Tue Mar 21 12:23:51.419 UTC Reload hardware module ? [no,yes] yes result Card graceful reload request on all acknowledged. RP/0/RP0/CPU0:h_N4#
すると、master Node の切り替えが発生します。一時的に [TE-INT] が3つになります。
RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:24:30.076 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 ☆ 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 23 msec 4 msec 3 msec ☆ 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 57 msec 3 msec 3 msec ☆ 3 10.5.6.6 12 msec * 8 msec RP/0/RP0/CPU0:h_N1#show mpls forwarding Tue Mar 21 12:24:38.292 UTC Local Outgoing Prefix Outgoing Next Hop Bytes Label Label or ID Interface Switched ------ ----------- ------------------ ------------ --------------- ------------ 16002 Pop SR Pfx (idx 2) Gi0/0/0/0 10.1.2.2 0 16003 Pop SR Pfx (idx 3) Gi0/0/0/2 10.1.3.3 0 16006 16006 SR Pfx (idx 6) Gi0/0/0/2 10.1.3.3 0 16045 16045 SR Pfx (idx 45) Gi0/0/0/2 10.1.3.3 0 24000 Pop SR Adj (idx 1) Gi0/0/0/2 10.1.3.3 0 24001 Pop SR Adj (idx 3) Gi0/0/0/2 10.1.3.3 0 24002 Pop SR Adj (idx 1) Gi0/0/0/0 10.1.2.2 0 24003 Pop SR Adj (idx 3) Gi0/0/0/0 10.1.2.2 0 24004 Pop No ID Gi0/0/0/2 10.1.3.3 0 ★ 24005 16045 SR TE: 2 [TE-INT] Gi0/0/0/2 10.1.3.3 224 24007 Pop 6.6.6.6/32 srte_c_600_e 6.6.6.6 0 ★ 24009 16045 SR TE: 2 [TE-INT] Gi0/0/0/0 10.1.2.2 1344 ★ 16045 SR TE: 2 [TE-INT] Gi0/0/0/2 10.1.3.3 1176 24365 Pop No ID srte_c_600_e point2point 0 RP/0/RP0/CPU0:h_N1#
☆:master Node が切り替わる前まで通らなかった h_N5 経由にトラフィックが流れ始めます。
★:新しい SR-TE(24005)と古い SR-TE(24009)が存在しています。
master Node が h_N5 に切り替わると、Head-End から master Node 経由でECMP経路が無くなるので、 新しい SR-TE ではロードバランシングしなくなります。また、LFIBのカウンターがリセットされます。
RP/0/RP0/CPU0:h_N1#show mpls forwarding Tue Mar 21 12:24:44.379 UTC Local Outgoing Prefix Outgoing Next Hop Bytes Label Label or ID Interface Switched ------ ----------- ------------------ ------------ --------------- ------------ 16002 Pop SR Pfx (idx 2) Gi0/0/0/0 10.1.2.2 0 16003 Pop SR Pfx (idx 3) Gi0/0/0/2 10.1.3.3 0 16006 16006 SR Pfx (idx 6) Gi0/0/0/2 10.1.3.3 0 16045 16045 SR Pfx (idx 45) Gi0/0/0/2 10.1.3.3 0 24000 Pop SR Adj (idx 1) Gi0/0/0/2 10.1.3.3 0 24001 Pop SR Adj (idx 3) Gi0/0/0/2 10.1.3.3 0 24002 Pop SR Adj (idx 1) Gi0/0/0/0 10.1.2.2 0 24003 Pop SR Adj (idx 3) Gi0/0/0/0 10.1.2.2 0 24004 Pop No ID Gi0/0/0/2 10.1.3.3 0 ★ 24005 16045 SR TE: 2 [TE-INT] Gi0/0/0/2 10.1.3.3 252 24007 Pop 6.6.6.6/32 srte_c_600_e 6.6.6.6 0 24365 Pop No ID srte_c_600_e point2point 0 RP/0/RP0/CPU0:h_N1#
master Node が 切り替わった後(h_N4 が再起動完了)のトラフィック経路を確認します。
TRACEROUTE を10回実行した結果を確認できます
RP/0/RP0/CPU0:h_N1#! 1st attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:28.720 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 12 msec 5 msec 3 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 6 msec 4 msec 3 msec 3 10.5.6.6 11 msec * 13 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 2nd attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:32.302 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 8 msec 3 msec 4 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 6 msec 4 msec 4 msec 3 10.5.6.6 5 msec * 9 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 3rd attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:35.856 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 5 msec 5 msec 3 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 4 msec 4 msec 4 msec 3 10.5.6.6 4 msec * 6 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 4th attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:39.392 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 5 msec 3 msec 3 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 4 msec 3 msec 4 msec 3 10.5.6.6 5 msec * 9 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 5th attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:42.954 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 13 msec 4 msec 3 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 4 msec 4 msec 4 msec 3 10.5.6.6 5 msec * 6 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 6th attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:46.490 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 6 msec 5 msec 4 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 4 msec 4 msec 3 msec 3 10.5.6.6 5 msec * 11 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 7th attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:50.027 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 13 msec 5 msec 4 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 4 msec 4 msec 5 msec 3 10.5.6.6 6 msec * 7 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 8th attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:53.556 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 7 msec 4 msec 4 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 4 msec 5 msec 3 msec 3 10.5.6.6 6 msec * 8 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 9th attempt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:38:57.111 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 6 msec 4 msec 4 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 4 msec 4 msec 4 msec 3 10.5.6.6 5 msec * 6 msec RP/0/RP0/CPU0:h_N1#! RP/0/RP0/CPU0:h_N1#! 10th attemt RP/0/RP0/CPU0:h_N1#traceroute 6.6.6.6 sou 1.1.1.1 numeric Tue Mar 21 12:39:00.658 UTC Type escape sequence to abort. Tracing the route to 6.6.6.6 1 10.1.3.3 [MPLS: Labels 16045/16006 Exp 0] 5 msec 3 msec 4 msec 2 10.3.5.5 [MPLS: Label 16006 Exp 0] 4 msec 4 msec 3 msec 3 * 10.5.6.6 6 msec * RP/0/RP0/CPU0:h_N1#
Head-End のLFIB は以下のようになります。
RP/0/RP0/CPU0:h_N1#show mpls forwarding Wed Mar 22 11:31:23.307 UTC Local Outgoing Prefix Outgoing Next Hop Bytes Label Label or ID Interface Switched ------ ----------- ------------------ ------------ --------------- ------------ 16002 Pop SR Pfx (idx 2) Gi0/0/0/0 10.1.2.2 0 16003 Pop SR Pfx (idx 3) Gi0/0/0/2 10.1.3.3 0 16006 16006 SR Pfx (idx 6) Gi0/0/0/0 10.1.2.2 0 16006 SR Pfx (idx 6) Gi0/0/0/2 10.1.3.3 0 16045 16045 SR Pfx (idx 45) Gi0/0/0/2 10.1.3.3 0 24000 Pop SR Adj (idx 1) Gi0/0/0/2 10.1.3.3 0 24001 Pop SR Adj (idx 3) Gi0/0/0/2 10.1.3.3 0 24002 Pop SR Adj (idx 1) Gi0/0/0/0 10.1.2.2 0 24003 Pop SR Adj (idx 3) Gi0/0/0/0 10.1.2.2 0 24004 Pop No ID Gi0/0/0/2 10.1.3.3 0 ★ 24005 16045 SR TE: 2 [TE-INT] Gi0/0/0/2 10.1.3.3 2772 24007 Pop 6.6.6.6/32 srte_c_600_e 6.6.6.6 0 24365 Pop No ID srte_c_600_e point2point 0 RP/0/RP0/CPU0:h_N1#
再起動した h_N4 が起動完了してパケットを転送できるようになったにも関わらず、SR-TE は h_N4 と h_N5 でロードバランシングすることなく 現在 master Node となっている h_N5 を中心にパケット転送をするようになります。最初の状態に戻すには、現在の master Node(h_N5)を再起動する必要があります。
7. 検証から得られたこと
検証して分かったこと
— やすお (@chimay_wh) 2023年3月21日
Anycast Group に NodeAとBの2つが所属
→ AもBも稼働している時は、masterとなるNodeが決まっていて、そいつがpacketを処理する.
→ どちらかがdownしている時は生きているNodeがpacketを処理する.
document見つけられなかったけど、master-flag的なものがありそうな挙動をする
恐らくmaster Node を判別するための Flag がどこかにあると思われます。見つけたら記事を更新します。
8. 参考
① Anycast SID-Aware Path Computation
www.cisco.com
次回は、Dynamic SR-TE について記事を書きます。
最後までお読みいただきありがとうございました!