IOS XRvではじめてのIS-IS Segment Routing
Posted on 2015/04/23(Thu) 23:05 in technical
サマリ
前回、 Ubuntu DesktopにGNS3 1.3.1を入れてXRvを起動 できることを確認しました。
今回は、比較的新しく実装されたSegment Routingと言う機能を試しに動かしてみます。
Segment Routingが真価を発揮するのはVPNやSDNと絡めた場合だと思いますが、まずはIS-IS Segment Routing単体での動作と、結果的に転送にMPLSラベルが使用されるところまでを見ていきます。
プロプライエタリな実装であっても、こうやって事前にテスト出来ると勉強し易いんだよなぁ。
スーパーざっくりSegment Routing
僕も詳しくは知りませんが、新しいTLVを定義してMPLSラベルを配れるようにしたルーティングプロトコル拡張。おしまい。
と言う理解で今のところは良いでしょう。
draftはこちら: https://tools.ietf.org/html/draft-filsfils-rtgwg-segment-routing-01
ラベル配布機能をIGPが持つようになったことでLDPやRSVPを同時に動かさなくても良くなるかもしれなくて、管理プロトコルやコンフィグ量が減るとしたらそれはとっても嬉しいなって。
実装については Cisco IOS-XR 5.2.0 以降で使えるようになったようなので、何それ超最近じゃんと言う新鮮な気持ちで試すことが出来ます。
前回作成したXRvは5.3.0なので、動いてくれると信じてレッツトライ。
NW構成
HUB1とHUB2は、その地点でキャプチャを取得するために置かれています。
警告
GNS3 1.3.1では、KVM同士の直結リンクをキャプチャ出来ないのです。
アドレス構成は大体こんな感じ。インタフェースのアドレスは数字の小さいルータから数字を割り当てていきます。
10.1.0.0/30の時、R1は10.1.0.1、R2は10.1.0.2と言う感じ。
初期コンフィグレーション
まずはIS-IS Segment Routingとは無関係のコンフィグレーションを入れます。
整理がてら書いているだけなので、ここは飛ばしても良いでしょう。
R1:
configure hostname R1 interface l0 ipv4 address 10.0.0.1/32 ipv6 address 2001:db8::1111/128 interface GigabitEthernet0/0/0/0 ipv4 address 10.1.0.1/30 ipv6 address 2001:db8:1::11/124 no shut interface GigabitEthernet0/0/0/1 ipv4 address 10.1.0.5/30 ipv6 address 2001:db8:1::21/124 no shut interface GigabitEthernet0/0/0/4 ipv4 address 172.16.1.1/30 ipv6 address 2001:db8:cc::11/124 no shut commit end
R2:
configure hostname R2 interface l0 ipv4 address 10.0.0.2/32 ipv6 address 2001:db8::2222/128 interface GigabitEthernet0/0/0/0 ipv4 address 10.1.0.2/30 ipv6 address 2001:db8:1::12/124 no shut interface GigabitEthernet0/0/0/1 ipv4 address 10.1.0.9/30 ipv6 address 2001:db8:1::31/124 no shut interface GigabitEthernet0/0/0/4 ipv4 address 172.16.2.1/30 ipv6 address 2001:db8:cc::21/124 no shut commit end
R3:
configure hostname R3 interface l0 ipv4 address 10.0.0.3/32 ipv6 address 2001:db8::3333/128 interface GigabitEthernet0/0/0/0 ipv4 address 10.1.0.13/30 ipv6 address 2001:db8:1::41/124 no shut interface GigabitEthernet0/0/0/1 ipv4 address 10.1.0.6/30 ipv6 address 2001:db8:1::22/124 no shut interface GigabitEthernet0/0/0/4 ipv4 address 172.16.3.1/30 ipv6 address 2001:db8:cc::31/124 no shut commit end
R4:
configure hostname R4 interface l0 ipv4 address 10.0.0.4/32 ipv6 address 2001:db8::4444/128 interface GigabitEthernet0/0/0/0 ipv4 address 10.1.0.14/30 ipv6 address 2001:db8:1::14/124 no shut interface GigabitEthernet0/0/0/1 ipv4 address 10.1.0.10/30 ipv6 address 2001:db8:1::a/124 no shut interface GigabitEthernet0/0/0/4 ipv4 address 172.16.4.1/30 ipv6 address 2001:db8:cc::41/124 no shut commit end
R5:
configure hostname R5 interface l0 ipv4 address 10.0.0.5/32 ipv6 address 2001:db8::5555/128 interface GigabitEthernet0/0/0/0 ipv4 address 172.16.1.2/30 ipv6 address 2001:db8:cc::12/124 no shut interface GigabitEthernet0/0/0/1 ipv4 address 172.16.2.2/30 ipv6 address 2001:db8:cc::22/124 no shut commit end
R6:
configure hostname R6 interface l0 ipv4 address 10.0.0.6/32 ipv6 address 2001:db8::6666/128 interface GigabitEthernet0/0/0/0 ipv4 address 172.16.3.2/30 ipv6 address 2001:db8:cc::12/124 no shut interface GigabitEthernet0/0/0/1 ipv4 address 172.16.4.2/30 ipv6 address 2001:db8:cc::22/124 no shut commit end
IS-IS Segment Routingコンフィグレーション
Segment Routingの設定もさらっと入れてしまいましょう。
私はこのあたりを参考にしましたが、まだコマンド体系が確立されていないのか一部違う部分があるかもしれません。とは言え、基本的にCiscoはドキュメントが揃っている方なので、公式ドキュメントだけでもなんとかなるでしょう。
- http://www.cisco.com/c/en/us/td/docs/routers/asr9000/software/asr9k_r5-3/routing/configuration/guide/b_routing_cg53xasr9k/b_routing_cg53xasr9k_chapter_0110.html#task_DF3EF62AD9994D02BF3208A155C3BABD
- http://www.cisco.com/c/en/us/support/ios-nx-os-software/ios-xr-software/products-installation-and-configuration-guides-list.html
- https://mellowd.co.uk/ccie/?p=5437
- http://iamjeffvader.com/2014/07/09/segment-routing-basics-on-ios-xrv/
R1:
configure router isis 1 is-type level-2-only net 49.0000.0000.0000.0001.00 address-family ipv4 unicast metric-style wide segment-routing mpls interface Loopback0 address-family ipv4 unicast prefix-sid index 1000 interface GigabitEthernet0/0/0/0 address-family ipv4 unicast interface GigabitEthernet0/0/0/1 address-family ipv4 unicast interface GigabitEthernet0/0/0/4 address-family ipv4 unicast commit end
R2:
configure router isis 1 is-type level-2-only net 49.0000.0000.0000.0002.00 address-family ipv4 unicast metric-style wide segment-routing mpls interface Loopback0 address-family ipv4 unicast prefix-sid index 2000 interface GigabitEthernet0/0/0/0 address-family ipv4 unicast interface GigabitEthernet0/0/0/1 address-family ipv4 unicast interface GigabitEthernet0/0/0/4 address-family ipv4 unicast commit end
R3:
configure router isis 1 is-type level-2-only net 49.0000.0000.0000.0003.00 address-family ipv4 unicast metric-style wide segment-routing mpls interface Loopback0 address-family ipv4 unicast prefix-sid index 3000 interface GigabitEthernet0/0/0/0 address-family ipv4 unicast interface GigabitEthernet0/0/0/1 address-family ipv4 unicast interface GigabitEthernet0/0/0/4 address-family ipv4 unicast commit end
R4:
configure router isis 1 is-type level-2-only net 49.0000.0000.0000.0004.00 address-family ipv4 unicast metric-style wide segment-routing mpls interface Loopback0 address-family ipv4 unicast prefix-sid index 4000 interface GigabitEthernet0/0/0/0 address-family ipv4 unicast interface GigabitEthernet0/0/0/1 address-family ipv4 unicast interface GigabitEthernet0/0/0/4 address-family ipv4 unicast commit end
R5:
configure router isis 1 is-type level-2-only net 49.0000.0000.0000.0005.00 address-family ipv4 unicast metric-style wide segment-routing mpls interface Loopback0 address-family ipv4 unicast prefix-sid index 5000 interface GigabitEthernet0/0/0/0 address-family ipv4 unicast interface GigabitEthernet0/0/0/1 address-family ipv4 unicast commit end
R6:
configure router isis 1 is-type level-2-only net 49.0000.0000.0000.0006.00 address-family ipv4 unicast metric-style wide segment-routing mpls interface Loopback0 address-family ipv4 unicast prefix-sid index 6000 interface GigabitEthernet0/0/0/0 address-family ipv4 unicast interface GigabitEthernet0/0/0/1 address-family ipv4 unicast commit end
パケットはどんな風に見えるか。
まずはR5からR6にpingを叩いてキャプチャしてみましょう。キャプチャポイントはHUB1のポート1を使います。
R5:
RP/0/0/CPU0:R5#ping 10.0.0.6 source 10.0.0.5 Thu Apr 23 12:11:27.832 UTC Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 10.0.0.6, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 29/37/49 ms
おー、LDPの設定なんてしてないのにMPLSラベルがついてる!
備考
IPv6も試したいところでしたが、今のところ動作しないようです。コマンドリファレンスにもipv6の文字は無かった。
装置ではどんな風に見えるか。
では今度は装置のテーブルではどう見えるかを確認する。
R5のルーティングテーブルはこんな感じ。普通。:
RP/0/0/CPU0:R5#show route Thu Apr 23 12:28:02.184 UTC Codes: C - connected, S - static, R - RIP, B - BGP, (>) - Diversion path D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2 E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP i - ISIS, L1 - IS-IS level-1, L2 - IS-IS level-2 ia - IS-IS inter area, su - IS-IS summary null, * - candidate default U - per-user static route, o - ODR, L - local, G - DAGR, l - LISP A - access/subscriber, a - Application route M - mobile route, (!) - FRR Backup path Gateway of last resort is not set i L2 10.0.0.1/32 [115/20] via 172.16.1.1, 00:06:11, GigabitEthernet0/0/0/0 i L2 10.0.0.2/32 [115/20] via 172.16.2.1, 00:06:27, GigabitEthernet0/0/0/1 i L2 10.0.0.3/32 [115/30] via 172.16.1.1, 00:06:11, GigabitEthernet0/0/0/0 i L2 10.0.0.4/32 [115/30] via 172.16.2.1, 00:06:17, GigabitEthernet0/0/0/1 L 10.0.0.5/32 is directly connected, 00:36:11, Loopback0 i L2 10.0.0.6/32 [115/40] via 172.16.1.1, 00:06:11, GigabitEthernet0/0/0/0 [115/40] via 172.16.2.1, 00:06:11, GigabitEthernet0/0/0/1 i L2 10.1.0.0/30 [115/20] via 172.16.1.1, 00:06:22, GigabitEthernet0/0/0/0 [115/20] via 172.16.2.1, 00:06:22, GigabitEthernet0/0/0/1 i L2 10.1.0.4/30 [115/20] via 172.16.1.1, 00:06:22, GigabitEthernet0/0/0/0 i L2 10.1.0.8/30 [115/20] via 172.16.2.1, 00:06:27, GigabitEthernet0/0/0/1 i L2 10.1.0.12/30 [115/30] via 172.16.1.1, 00:06:11, GigabitEthernet0/0/0/0 [115/30] via 172.16.2.1, 00:06:11, GigabitEthernet0/0/0/1 C 172.16.1.0/30 is directly connected, 00:36:11, GigabitEthernet0/0/0/0 L 172.16.1.2/32 is directly connected, 00:36:11, GigabitEthernet0/0/0/0 C 172.16.2.0/30 is directly connected, 00:36:11, GigabitEthernet0/0/0/1 L 172.16.2.2/32 is directly connected, 00:36:11, GigabitEthernet0/0/0/1 i L2 172.16.3.0/30 [115/30] via 172.16.1.1, 00:06:12, GigabitEthernet0/0/0/0 i L2 172.16.4.0/30 [115/30] via 172.16.2.1, 00:06:17, GigabitEthernet0/0/0/1
個別の経路を詳細に見るとこう:
RP/0/0/CPU0:R5#show route 10.0.0.6/32 detail Thu Apr 23 12:28:47.511 UTC Routing entry for 10.0.0.6/32 Known via "isis 1", distance 115, metric 40, type level-2 Installed Apr 23 12:21:50.379 for 00:06:57 Routing Descriptor Blocks 172.16.1.1, from 10.0.0.6, via GigabitEthernet0/0/0/0 Route metric is 40 Label: 0x55f0 (22000) Tunnel ID: None Extended communities count: 0 Path id:2 Path ref count:0 NHID:0x2(Ref:8) 172.16.2.1, from 10.0.0.6, via GigabitEthernet0/0/0/1 Route metric is 40 Label: 0x55f0 (22000) Tunnel ID: None Extended communities count: 0 Path id:1 Path ref count:0 NHID:0x1(Ref:8) Route version is 0x6 (6) Local Label: 0x55f0 (22000) IP Precedence: Not Set QoS Group ID: Not Set Flow-tag: Not Set Route Priority: RIB_PRIORITY_NON_RECURSIVE_MEDIUM (7) SVD Type RIB_SVD_TYPE_LOCAL Download Priority 1, Download Version 107 No advertising protos.
Label: 0x55f0 (22000) と書かれた部分がさっき確認したMPLSラベル。
本当にLDP動いてないの?実は裏で動いてるんじゃないの?みたいな考えがあるものの、出力上はやはり無効なようだ。:
RP/0/0/CPU0:R5#show mpls interfaces GigabitEthernet0/0/0/0 detail Thu Apr 23 12:47:05.546 UTC Interface GigabitEthernet0/0/0/0: LDP labelling not enabled LSP labelling not enabled MPLS ISIS enabled MPLS enabled
IS-ISのキャプチャを見るとこんな感じに拡張TLVが見えている。ちゃんと0x1770(6000)がヘキサビューワに見えている。
IS-ISのデータベースはこんな感じ:
RP/0/0/CPU0:R5#show isis database R6.00-00 verbose Thu Apr 23 12:40:12.264 UTC IS-IS 1 (Level-2) Link State Database LSPID LSP Seq Num LSP Checksum LSP Holdtime ATT/P/OL R6.00-00 0x0000000c 0x3ba4 818 0/0/0 Area Address: 49.0000 NLPID: 0xcc NLPID: 0x8e MT: Standard (IPv4 Unicast) MT: IPv6 Unicast 0/0/0 Hostname: R6 IP Address: 10.0.0.6 IPv6 Address: 2001:db8::6666 Router Cap: 10.0.0.6, D:0, S:0 Segment Routing: I:1 V:0, SRGB Base: 16000 Range: 8000 Metric: 10 IS-Extended R4.01 Metric: 10 IS-Extended R4.01 LAN-ADJ-SID: F:0 B:0 V:1 L:1 S:0 weight:0 --------------------------------------------------- | Hostname | Adjacency Sid | |-------------------------------------------------| | R4 | 24000 | |-------------------------------------------------| Metric: 10 IS-Extended R3.01 Metric: 10 IS-Extended R3.01 LAN-ADJ-SID: F:0 B:0 V:1 L:1 S:0 weight:0 --------------------------------------------------- | Hostname | Adjacency Sid | |-------------------------------------------------| | R3 | 24001 | |-------------------------------------------------| Metric: 10 IP-Extended 10.0.0.6/32 Prefix-SID Index: 6000, R:0 N:1 P:0 E:0 V:0 L:0 Metric: 10 IP-Extended 172.16.3.0/30 Metric: 10 IP-Extended 172.16.4.0/30 Metric: 10 MT (IPv6 Unicast) IPv6 2001:db8::6666/128 Metric: 10 MT (IPv6 Unicast) IPv6 2001:db8:cc::10/124 Metric: 10 MT (IPv6 Unicast) IPv6 2001:db8:cc::20/124
Segment Routing: I:1 V:0, SRGB Base: 16000 Range: 8000 と書かれている部分が利用可能なラベルの範囲。
16000スタートでprefix-sid index 6000を指定したら、そこは明示的にラベル番号22000になる。
逆に、ここでAdjacency Sidとなっている部分は、MPLSのデータベースを見ると存在を確認できる。:
RP/0/0/CPU0:R5#show mpls forwarding Thu Apr 23 12:42:05.836 UTC Local Outgoing Prefix Outgoing Next Hop Bytes Label Label or ID Interface Switched ------ ----------- ------------------ ------------ --------------- ------------ 17000 Pop No ID Gi0/0/0/0 172.16.1.1 0 18000 Pop No ID Gi0/0/0/1 172.16.2.1 0 19000 19000 No ID Gi0/0/0/0 172.16.1.1 0 20000 20000 No ID Gi0/0/0/1 172.16.2.1 0 22000 22000 No ID Gi0/0/0/0 172.16.1.1 0 22000 No ID Gi0/0/0/1 172.16.2.1 0 24000 Pop No ID Gi0/0/0/1 172.16.2.1 0 24001 Pop No ID Gi0/0/0/0 172.16.1.1 0
あとはこれにMPLS L3VPN/L2VPNを組み合わせることで、コンフィグは何やらコンパクトにまとまっているのにラベル配布もできている、と言うことができそうだ。
おしまい
先進的風味なSegment RoutingのIS-IS実装を眺めることが出来た。
設定は確かに簡素だったし、ラベル配布で全部やろうぜ、ってのはロマンティックある。
ラベル配布能力が他のプロトコルとどこまで協調動作するかについては、別途試す必要があると思うし、 ここでSDNとか言い始めたらちょっと収拾つかないんじゃないですかねって感じだけど。
それにしても、IPv6でも動けばいいのにさ。
しゃーなしですかねー。