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構成

0423b_gns3_131_xrv_isis_sr_001.png

HUB1とHUB2は、その地点でキャプチャを取得するために置かれています。

警告

GNS3 1.3.1では、KVM同士の直結リンクをキャプチャ出来ないのです。

0423b_gns3_131_xrv_isis_sr_002.png

アドレス構成は大体こんな感じ。インタフェースのアドレスは数字の小さいルータから数字を割り当てていきます。

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はドキュメントが揃っている方なので、公式ドキュメントだけでもなんとかなるでしょう。

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
0423b_gns3_131_xrv_isis_sr_003.png

おー、LDPの設定なんてしてないのにMPLSラベルがついてる!

備考

IPv6も試したいところでしたが、今のところ動作しないようです。コマンドリファレンスにもipv6の文字は無かった。

http://www.cisco.com/c/en/us/td/docs/routers/asr9000/software/asr9k_r5-3/routing/command/reference/b-routing-cr53xasr9k/b-routing-cr53xasr9k_chapter_0101.html#wp7857115470

装置ではどんな風に見えるか。

では今度は装置のテーブルではどう見えるかを確認する。

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)がヘキサビューワに見えている。

0423b_gns3_131_xrv_isis_sr_004.png

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でも動けばいいのにさ。

しゃーなしですかねー。