メインコンテンツへスキップ
  1. ネットワーク 記事一覧/
  2. IS-IS記事一覧/

IS-ISへのBGP経路の再配布

目次

IS-ISへのBGP経路の再配布

BGPで学んだ経路をIS-ISに流し込む操作は、connectedやstaticの再配布と同じredistributeですが、BGPならではの違いが4つあります。iBGPで学んだ経路は既定では再配布されないこと、BGPのMEDをIS-ISのメトリックに引き継げること、経路数が多いとLSPが分割されること、そしてルートポリシーで絞り込むときに使える条件が限られることです。

この記事はこの4つを、RFCとISO規格の規定、IOS XRの実機で確認します。再配布した経路がLSPの中でどう表されるか(TLV 135のXフラグ、既定のメトリック0)はIS-ISへの再配布(connected / static)で解説しており、ここでは繰り返しません。

外部プロトコルの経路を載せる場所

RFC 1195の3.1節は、外部経路の中身をこう定めています。

IP external reachability informationのエントリで告知する経路には、ルーティングドメインの外へのすべての経路が含まれる。これにはOSPF、EGP、RIP、その他あらゆる外部プロトコルから学んだ経路が含まれる。

BGPの前身であるEGPが名指しされています。BGPから再配布した経路も、IS-ISにとってはこの「外部経路」の1つで、IOS XRのwideメトリックではTLV 135にXフラグ付きで載ります。

同じ節には、境界ルータ同士が互いを見つけるための「Inter-Domain Routing Protocol Information」(TLV 131)も定められていますが、IS-IS自身は使わず、現在のBGP運用でも使われません。

iBGPの経路は既定では再配布されない

BGPスピーカーが持つ経路には、外部ASから学んだeBGPの経路と、同じAS内のピアから学んだiBGPの経路があります。IOS XRのredistribute bgpが拾うのはeBGPで学んだ経路だけです。iBGPの経路まで再配布するには、router bgp配下でbgp redistribute-internalを有効にします。

CiscoのConfigure Redistribute Internal BGP Routes into IGP(IOS 15.1(4)M5向け)はこう説明しています。

iBGPで学んだ経路は、redistributeコマンドではIGPに渡されない。

再配布するルータのBGPプロセス配下で、bgp redistribute-internalコマンドを使う。

既定でiBGPを除くのは、ループを避けるためです。AS内のiBGPは通常、IGPの上に張られています。そのIGPにiBGPの経路を流し込むと、BGPのネクストホップをIGPで解決する関係と、IGPの経路をBGPから作る関係が互いに依存し、経路の取り消しが伝わらない状態を作れます。

R2:bgp redistribute-internal ?
RP/0/RP0/CPU0:R2(config-bgp)#bgp redistribute-internal ?

  <cr>  

BGPのMEDをIS-ISのメトリックにする

redistributemetricを付けなければ、IS-ISは再配布した経路をメトリック0で広告します。BGPの経路には値を1つずつ指定するより、BGPが運んできたMEDをそのまま使うほうが自然です。IOS XRのmetric-type rib-metric-as-internalは、経路表(RIB)に入った経路のメトリックをIS-ISのメトリックにします。eBGPで学んだ経路のRIBメトリックはMEDなので、対向ASが付けたMEDがそのままLSPに載ります。

R2:redistribute bgp 65001 metric-type ?
RP/0/RP0/CPU0:R2(config-isis-af)#redistribute bgp 65001 metric-type ?

  external                Set IS-IS External metric type
  internal                Set IS-IS Internal metric type
  rib-metric-as-external  Set IS-IS External metric type and use RIB metric
  rib-metric-as-internal  Set IS-IS Internal metric type and use RIB metric

受け取ったルータは、再配布したルータまでの距離にこの値を足して比べます。同じ宛先を2台の出口が再配布していれば、MEDの差で出口が動きます。

経路数の危険

BGPの経路は、IGPの経路とは桁が違います。再配布する経路が増えると、1つのLSPに収まらなくなります。ISO/IEC 10589:2002(第2版)の7.3.4.1節はこう定めています。

Link State PDUのサイズはReceiveLSPBufferSizeに制限されるため、1つのシステムのすべての情報を1つのLSPに含められないことがある。その場合、システムは複数のLSPを使ってよい。それぞれのLSPは同じsourceIDを持ち、LSP Numberを個別に設定する。

LSP Numberは1オクテット(9.8節)なので、1台が出せるLSPは256個までです。IOS XRではR2.00-01のように-01以降の番号で断片が並びます。断片が増えるほど、フラッディングとSPFの負荷が全ルータにかかります。

IOS XRには上限を決めておくmaximum-redistributed-prefixesがあります。上限を超えるとsyslogに警告を出し、超えた分のプレフィックスをLSPに載せません。警告だけで広告は続ける、という動きではありません。

R2:maximum-redistributed-prefixes ?
RP/0/RP0/CPU0:R2(config-isis-af)#maximum-redistributed-prefixes ?

  <1-28000>  maximum limit on number of redistributed prefixes

ルートポリシーで絞る

BGPの経路をすべてIS-ISに入れる運用はまずありません。redistribute bgp <AS> route-policy <名前>で、通す経路を選びます。

選び方には制約があります。IOS XRでは、ルートポリシーを付ける場所(アタッチポイント)ごとに参照できる属性が決まっており、IS-ISの再配布ではBGPのコミュニティを参照できません。コミュニティで条件を書いたポリシーを付けようとすると、commitが拒否されます。そのため、宛先のプレフィックスをprefix-setで並べて選びます。

192.168.6.0/24 だけを通すルートポリシー
prefix-set LAN6
  192.168.6.0/24
end-set
!
route-policy BGP-TO-ISIS-PFX
  if destination in LAN6 then
    pass
  else
    drop
  endif
end-policy

実機での検証

検証環境

R1〜R4はAS 65001のルータで、単一エリア49.0001level-2-only(wide)です。R2とR3が外部AS 65005のR5とeBGPを張る出口で、R4はiBGPでR2に自分のLANを広告します。R5はIS-ISを動かしません。ソフトウェアはXRd 26.1.1です。

ルータLoBGPIS-ISのリンク
R1Lo0 1.1.1.1/32(観測点)なしGi0/0/0/0 10.1.2.1(R2へ)/ Gi0/0/0/1 10.1.4.1(R4へ)
R2Lo0 2.2.2.2/32AS 65001。eBGP → R5(10.2.5.5)、iBGP → R4(4.4.4.4)Gi0/0/0/0 10.1.2.2
R3Lo0 3.3.3.3/32AS 65001。eBGP → R5(10.3.5.5)Gi0/0/0/0 10.3.4.3(R4へ)
R4Lo0 4.4.4.4/32、Lo1 192.168.4.1/24AS 65001。iBGP → R2。network 192.168.4.0/24Gi0/0/0/0 10.1.4.4 / Gi0/0/0/1 10.3.4.4
R5Lo0 5.5.5.5/32、Lo1 192.168.5.1/24、Lo2 192.168.6.1/24AS 65005。eBGP → R2 / R3。networkで2つのLANを広告。Lo2にはcommunity 65005:100を付けるなし。0.0.0.0/0 → R2 / R3

リンクのメトリックはすべて10で、R1から見た内部コストはR2まで10、R3まで20です。R4のLo1はIS-ISに入れていないので、R1がそこへ届くのはR2が再配布したときだけです。

検証のSTEP

STEP操作確かめること
0再配布なしR2にeBGP由来とiBGP由来の経路がある。R1にはどれも無く、pingが通らない
1R2とR3でredistribute bgp 65001eBGP由来の2つだけがIS-ISに載る。iBGP由来の192.168.4.0/24は載らない
2R2でbgp redistribute-internal192.168.4.0/24も載るが、R1とR2の間でループになり届かない
3R5がR2向けにMED 50、R3向けにMED 10を付け、R2とR3をrib-metric-as-internalにするLSPのメトリックが50と10になり、R1の出口がR3に動く
4R5がスタティック300本をBGPに再配布するR2とR3のLSPが断片に分かれる
5R2でmaximum-redistributed-prefixes 100R2が100本だけ広告し、超えた分を外す
6300本をやめ、R2とR3で、コミュニティのポリシーが拒否されることを確かめてからprefix-setのポリシーを付ける192.168.6.0/24だけが残る
7すべて元に戻す(最終状態)STEP 0と一致

STEP 0:再配布なし

R2はBGPで3つのLANを学んでいます。[200/0]がR4からのiBGP、[20/0]がR5からのeBGPです。R1にはどれも無く、pingは通りません。

STEP 0 R2:show route bgp
RP/0/RP0/CPU0:R2#show route bgp
Mon Sep 14 18:38:29.877 UTC

B    192.168.4.0/24 [200/0] via 4.4.4.4, 00:11:07
B    192.168.5.0/24 [20/0] via 10.2.5.5, 00:11:07
B    192.168.6.0/24 [20/0] via 10.2.5.5, 00:11:07
STEP 0 R1:show route 192.168.5.0/24
RP/0/RP0/CPU0:R1#show route 192.168.5.0/24
Mon Sep 14 18:35:18.315 UTC

% Network not in table

STEP 1:R2とR3でredistribute bgp 65001

STEP 1 R2:show configuration commit changes last 1
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Mon Sep 14 18:46:19.912 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
 address-family ipv4 unicast
  redistribute bgp 65001
 !
!
end

eBGPで学んだ192.168.5.0/24はR1まで届き、tracerouteはR2(10.1.2.2)からR5へ抜けます。

STEP 1 R1:traceroute 192.168.5.1
RP/0/RP0/CPU0:R1#traceroute 192.168.5.1 source 1.1.1.1
Mon Sep 14 18:48:27.738 UTC

Type escape sequence to abort.
Tracing the route to 192.168.5.1

 1  10.1.2.2 8 msec  5 msec  5 msec 
 2  10.2.5.5 19 msec  *  10 msec 

iBGPで学んだ192.168.4.0/24は、R1の経路表に現れません。

STEP 1 R1:show route 192.168.4.0/24
RP/0/RP0/CPU0:R1#show route 192.168.4.0/24
Mon Sep 14 18:48:04.177 UTC

% Network not in table
STEP 1 R1:ping 192.168.4.1
RP/0/RP0/CPU0:R1#ping 192.168.4.1 source 1.1.1.1 count 50 timeout 1
Mon Sep 14 18:48:32.508 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.4.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)

STEP 2:R2でbgp redistribute-internal

STEP 2 R2:show configuration commit changes last 1
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Mon Sep 14 18:52:23.463 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router bgp 65001
 bgp redistribute-internal
!
end

R2のLSPに192.168.4.0/24が加わり、R1はR2経由で学習します。しかしpingは通りません。

STEP 2 R1:show route 192.168.4.0/24
RP/0/RP0/CPU0:R1#show route 192.168.4.0/24
Mon Sep 14 18:53:58.974 UTC

Routing entry for 192.168.4.0/24
  Known via "isis 1", distance 115, metric 10, type level-2
  Installed Sep 14 18:52:24.917 for 00:01:34
  Routing Descriptor Blocks
    10.1.2.2, from 2.2.2.2, via GigabitEthernet0/0/0/0
      Route metric is 10
  No advertising protos. 
STEP 2 R1:ping 192.168.4.1
RP/0/RP0/CPU0:R1#ping 192.168.4.1 source 1.1.1.1 count 50 timeout 1
Mon Sep 14 18:54:24.767 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.4.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)

R1からのtracerouteでは、R2(10.1.2.2)とR1(10.1.2.1)が交互に並びます。

STEP 2 R1:traceroute 192.168.4.1
RP/0/RP0/CPU0:R1#traceroute 192.168.4.1 source 1.1.1.1

Mon Sep 14 18:59:03.472 UTC

Type escape sequence to abort.
Tracing the route to 192.168.4.1

 1  10.1.2.2 7 msec  5 msec  5 msec 
 2  10.1.2.1 51 msec  5 msec  5 msec 
 3  10.1.2.2 8 msec  7 msec  7 msec 
 4  10.1.2.1 7 msec  36 msec  8 msec 
 5  10.1.2.2 11 msec  10 msec  10 msec 
 6  10.1.2.1 59 msec  10 msec  11 msec 
 7  10.1.2.2 11 msec  61 msec  12 msec 
 8  10.1.2.1 11 msec  12 msec  11 msec 
 9  10.1.2.2 13 msec  12 msec  32 msec 
 10 10.1.2.1 12 msec  13 msec  13 msec 
 11 10.1.2.2 15 msec  40 msec  13 msec 
 12 10.1.2.1 13 msec  13 msec  50 msec 
 13 10.1.2.2 18 msec  19 msec  18 msec 
 14 10.1.2.1 18 msec  17 msec  16 msec 
 15 10.1.2.2 19 msec  18 msec  20 msec 
 16 10.1.2.1 20 msec  23 msec  21 msec 
 17 10.1.2.2 24 msec  64 msec  69 msec 
 18 10.1.2.1 28 msec  24 msec  68 msec 
 19 10.1.2.2 22 msec  59 msec  22 msec 
 20 10.1.2.1 21 msec  25 msec  37 msec 
 21 10.1.2.2 27 msec  26 msec  37 msec 
 22 10.1.2.1 29 msec  29 msec  29 msec 
 23 10.1.2.2 32 msec  34 msec  33 msec 
 24 10.1.2.1 34 msec  35 msec  35 msec 
 25 10.1.2.2 37 msec  79 msec  38 msec 
 26 10.1.2.1 41 msec  35 msec  31 msec 
 27 10.1.2.2 65 msec  32 msec  42 msec 
 28 10.1.2.1 30 msec  30 msec  47 msec 
 29 10.1.2.2 32 msec  39 msec  43 msec 
 30 10.1.2.1 40 msec  43 msec  43 msec 

R2はこのiBGP経路のネクストホップ4.4.4.4をIS-ISで解決しており、その経路はR1を通ります。R1は同じプレフィックスをR2へ送るので、パケットは2台の間を往復します。これが、iBGPの経路を既定で再配布しない理由です。

STEP 2 R2:show route 4.4.4.4/32
RP/0/RP0/CPU0:R2#show route 4.4.4.4/32

Mon Sep 14 18:59:10.339 UTC

Routing entry for 4.4.4.4/32
  Known via "isis 1", distance 115, metric 20, type level-2
  Installed Sep 14 18:26:18.563 for 00:32:51
  Routing Descriptor Blocks
    10.1.2.1, from 4.4.4.4, via GigabitEthernet0/0/0/0
      Route metric is 20
  No advertising protos. 

パケットで見る(ループ)

STEP 2のキャプチャーのNo.104〜109は、R1が送った1つ目のechoです。送信元MACがR1(52:54:00:14:cd:11)とR2(52:54:00:c5:fd:24)で入れ替わるたびに、TTLが1ずつ減っています。このechoはTTLが尽きるまで、リンクを256回通りました。

STEP 2 No.104〜109:送信元MAC・宛先MAC・TTL(tshark -T fields)
frame.number	eth.src	eth.dst	ip.ttl
104	52:54:00:14:cd:11	52:54:00:c5:fd:24	255
105	52:54:00:c5:fd:24	52:54:00:14:cd:11	254
106	52:54:00:14:cd:11	52:54:00:c5:fd:24	253
107	52:54:00:c5:fd:24	52:54:00:14:cd:11	252
108	52:54:00:14:cd:11	52:54:00:c5:fd:24	251
109	52:54:00:c5:fd:24	52:54:00:14:cd:11	250
上のtshark出力のパケット(No.104〜109)のpcapをダウンロード

STEP 3:MEDをIS-ISのメトリックにする

R5は、R2向けにMED 50、R3向けにMED 10を付けます。

STEP 3 R5:show configuration commit changes last 1
RP/0/RP0/CPU0:R5#show configuration commit changes last 1
Mon Sep 14 18:59:51.029 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
route-policy TO-R2
  if destination in LAN6 then
    set community (65005:100)
  endif
  set med 50
  pass
end-policy
!
route-policy TO-R3
  if destination in LAN6 then
    set community (65005:100)
  endif
  set med 10
  pass
end-policy
!
end

R2とR3の経路表では、eBGPの経路のメトリックがMEDそのものになっています。

STEP 3 R2:show route 192.168.5.0/24
RP/0/RP0/CPU0:R2#show route 192.168.5.0/24
Mon Sep 14 19:03:41.270 UTC

Routing entry for 192.168.5.0/24
  Known via "bgp 65001", distance 20, metric 50
  Tag 65005, type external
  Installed Sep 14 18:59:52.412 for 00:03:48
  Routing Descriptor Blocks
    10.2.5.5, from 10.2.5.5, BGP external
      Route metric is 50, Wt is 1
  No advertising protos. 
STEP 3 R3:show route 192.168.5.0/24
RP/0/RP0/CPU0:R3#show route 192.168.5.0/24
Mon Sep 14 19:04:07.758 UTC

Routing entry for 192.168.5.0/24
  Known via "bgp 65001", distance 20, metric 10
  Tag 65005, type external
  Installed Sep 14 18:59:52.412 for 00:04:15
  Routing Descriptor Blocks
    10.3.5.5, from 10.3.5.5, BGP external
      Route metric is 10, Wt is 1
  No advertising protos. 

R2とR3をrib-metric-as-internalにすると、この値がLSPのメトリックになります。R1から見るとR2経由は10+50=60、R3経由は20+10=30で、出口がR3に移り、tracerouteにR4(10.1.4.4)が現れます。

STEP 3 R1:show route 192.168.5.0/24
RP/0/RP0/CPU0:R1#show route 192.168.5.0/24
Mon Sep 14 19:01:43.026 UTC

Routing entry for 192.168.5.0/24
  Known via "isis 1", distance 115, metric 30, type level-2
  Installed Sep 14 19:00:06.074 for 00:01:37
  Routing Descriptor Blocks
    10.1.4.4, from 3.3.3.3, via GigabitEthernet0/0/0/1
      Route metric is 30
  No advertising protos. 
STEP 3 R1:traceroute 192.168.5.1
RP/0/RP0/CPU0:R1#traceroute 192.168.5.1 source 1.1.1.1
Mon Sep 14 19:02:06.064 UTC

Type escape sequence to abort.
Tracing the route to 192.168.5.1

 1  10.1.4.4 6 msec  5 msec  5 msec 
 2  10.3.4.3 18 msec  7 msec  7 msec 
 3  10.3.5.5 11 msec  *  15 msec 

STEP 4:300本を流し込む

R5がスタティック300本(10.200.0.0/24から連番)をBGPに再配布すると、R2とR3のLSPはそれぞれ3つの断片に分かれます。

STEP 4 R1:show isis database
RP/0/RP0/CPU0:R1#show isis database
Mon Sep 14 19:08:14.073 UTC

IS-IS 1 (Level-2) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00            * 0x00000009   0xe989        1163 /*            0/0/0
R2.00-00              0x00000009   0x9422        1102 /1200         0/0/0
R2.00-01              0x00000001   0xaaa2        1102 /1200         0/0/0
R2.00-02              0x00000001   0x879d        1102 /1200         0/0/0
R3.00-00              0x00000009   0x7511        1102 /1200         0/0/0
R3.00-01              0x00000001   0x8203        1102 /1200         0/0/0
R3.00-02              0x00000002   0x31ca        1103 /1200         0/0/0
R4.00-00              0x00000008   0x74be        1033 /1200         0/0/0

 Total Level-2 LSP count: 8     Local Level-2 LSP count: 1

R1のIS-ISの経路は307本になりました。

STEP 4 R1:show route summary
RP/0/RP0/CPU0:R1#show route summary
Mon Sep 14 19:08:13.172 UTC
Route Source                     Routes     Backup     Deleted     Memory(bytes)
connected                        2          1          0           600          
local                            3          0          0           600          
application fib_mgr              0          0          0           0            
isis 1                           307        2          0           61800        
dagr                             0          0          0           0            
Total                            312        3          0           63000        

パケットで見る(断片)

STEP 4のキャプチャーのNo.10〜12がR2の3つの断片です。No.11(R2.00-01)はPDU長1479バイトで、LSP MTUの1492バイトに収まるところで区切られ、中身はTLV 135だけです。エリアアドレスやホスト名は-00にだけ入っています。ISO/IEC 10589:2002の7.3.4.3節は、エリアアドレスをLSP Numberが0のLSPにだけ置くと定めています。

STEP 4 No.11 R2.00-01(tshark -V の抜粋)
    PDU length: 1479
    Remaining lifetime: 1200
    LSP-ID: 0020.0200.2002.00-01
    Sequence number: 0x00000001
    Checksum: 0xaaa2 [correct]
    [Checksum Status: Good]
    Type block(0x03): Partition Repair:0, Attached bits:0, Overload bit:0, IS type:3
        0... .... = Partition Repair: Not supported
        .000 0... = Attachment: 0
            .0.. .... = Error metric: Not set
            ..0. .... = Expense metric: Not set
            ...0 .... = Delay metric: Not set
            0... .... = Default metric: Not set
        .... .0.. = Overload bit: Not set
        .... ..11 = Type of Intermediate System: Level 2 (3)
    Extended IP Reachability (t=135, l=252)
R2の3つの断片(No.10〜12)のpcapをダウンロード

STEP 5:上限を100にする

STEP 5 R2:show configuration commit changes last 1
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Mon Sep 14 19:13:17.493 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
router isis 1
 address-family ipv4 unicast
  maximum-redistributed-prefixes 100
 !
!
end

commitと同時に、R2のsyslogに上限を超えた警告が出ます。

STEP 5 R2:show logging
RP/0/RP0/CPU0:R2#show logging start Sep 14 19:10:32
Mon Sep 14 19:16:36.262 UTC
Time Zone UTC, DST disabled
Syslog logging: enabled (0 messages dropped, 0 flushes, 0 overruns)
    Console logging: Disabled
    Monitor logging: level debugging, 0 messages logged
    Trap logging: level informational, 0 messages logged
    Buffer logging: level debugging, 205 messages logged

Log Buffer (2097152 bytes):

RP/0/RP0/CPU0:Sep 14 19:10:32.927 UTC: logger[68772]: %OS-SYSLOG-6-LOG_INFO : informational STEP5-BEGIN 
RP/0/RP0/CPU0:Sep 14 19:10:33.291 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[11381]: Received disconnect from 10.100.3.1 port 61280:11: disconnected by user 
RP/0/RP0/CPU0:Sep 14 19:10:33.291 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[11381]: Disconnected from user cisco 10.100.3.1 port 61280 
RP/0/RP0/CPU0:Sep 14 19:12:02.972 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[11542]: Accepted authentication/pam for cisco from 10.100.3.1 port 61361 ssh2 
RP/0/RP0/CPU0:Sep 14 19:12:07.903 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[11547]: Received disconnect from 10.100.3.1 port 61361:11: disconnected by user 
RP/0/RP0/CPU0:Sep 14 19:12:07.903 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[11547]: Disconnected from user cisco 10.100.3.1 port 61361 
RP/0/RP0/CPU0:Sep 14 19:13:12.530 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[11708]: Accepted authentication/pam for cisco from 10.100.3.1 port 61453 ssh2 
RP/0/RP0/CPU0:Sep 14 19:13:16.684 UTC: isis[1003]: %ROUTING-ISIS-4-MAX_REDIST_PREFIXES : ISIS (1): Topology IPv4 Unicast level 2 is exceeding the maximum number of redistributed prefixes 
RP/0/RP0/CPU0:Sep 14 19:13:16.977 UTC: config[69106]: %MGBL-CONFIG-6-DB_COMMIT : Configuration committed by user 'cisco'. Use 'show configuration commit changes 1000000004' to view the changes. 
RP/0/RP0/CPU0:Sep 14 19:13:17.181 UTC: config[69106]: %MGBL-SYS-5-CONFIG_I : Configured from console by cisco on vty0 (10.100.3.1) 
RP/0/RP0/CPU0:Sep 14 19:13:19.366 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[11713]: Received disconnect from 10.100.3.1 port 61453:11: disconnected by user 
RP/0/RP0/CPU0:Sep 14 19:13:19.366 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[11713]: Disconnected from user cisco 10.100.3.1 port 61453 
RP/0/RP0/CPU0:Sep 14 19:16:23.457 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[12050]: Accepted authentication/pam for cisco from 10.100.3.1 port 61583 ssh2 
RP/0/RP0/CPU0:Sep 14 19:16:32.988 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[12055]: Received disconnect from 10.100.3.1 port 61583:11: disconnected by user 
RP/0/RP0/CPU0:Sep 14 19:16:32.988 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[12055]: Disconnected from user cisco 10.100.3.1 port 61583 
RP/0/RP0/CPU0:Sep 14 19:16:33.999 UTC: ssh_syslog_proxy[1188]: %SECURITY-SSHD_SYSLOG_PRX-6-INFO_GENERAL : sshd[12205]: Accepted authentication/pam for cisco from 10.100.3.1 port 61587 ssh2 

R2のLSPは-00だけに戻りました。上限を入れていないR3は3断片のままです。R2のLSPに残った外部プレフィックスは10.200.0.0/2410.200.99.0/24の100本で、超えた203本は広告されていません。

STEP 5 R1:show isis database
RP/0/RP0/CPU0:R1#show isis database
Mon Sep 14 19:14:55.384 UTC

IS-IS 1 (Level-2) Link State Database
LSPID                 LSP Seq Num  LSP Checksum  LSP Holdtime/Rcvd  ATT/P/OL
R1.00-00            * 0x00000009   0xe989        762  /*            0/0/0
R2.00-00              0x0000000a   0xe39e        1101 /1200         0/0/0
R3.00-00              0x00000009   0x7511        701  /1200         0/0/0
R3.00-01              0x00000001   0x8203        701  /1200         0/0/0
R3.00-02              0x00000002   0x31ca        701  /1200         0/0/0
R4.00-00              0x00000008   0x74be        632  /1200         0/0/0

 Total Level-2 LSP count: 6     Local Level-2 LSP count: 1

パケットで見る(パージ)

STEP 5のキャプチャーのNo.2とNo.3は、不要になった-01-02を寿命0で送り直したパージです。

STEP 5 No.2 R2.00-01のパージ(tshark -V の抜粋)
    PDU length: 40
    Remaining lifetime: 0
    LSP-ID: 0020.0200.2002.00-01
    Sequence number: 0x00000001
    [Checksum: [missing]]
    [Checksum Status: Not present]
    Type block(0x03): Partition Repair:0, Attached bits:0, Overload bit:0, IS type:3
        0... .... = Partition Repair: Not supported
        .000 0... = Attachment: 0
            .0.. .... = Error metric: Not set
            ..0. .... = Expense metric: Not set
            ...0 .... = Delay metric: Not set
            0... .... = Default metric: Not set
        .... .0.. = Overload bit: Not set
        .... ..11 = Type of Intermediate System: Level 2 (3)
    Purge Originator ID (t=13, l=7)
        Type: 13
        Length: 7
        Number of System IDs: 1
        System ID: 0020.0200.2002
    Hostname (t=137, l=2)
        Type: 137
        Length: 2
        Hostname: R2
R2の更新とパージ(No.1〜3)のpcapをダウンロード

STEP 6:コミュニティでは絞れず、prefix-setで絞る

R5の300本を撤去したうえで、コミュニティで選ぶポリシーをR2の再配布に付けると、commitが拒否されます。

STEP 6 R2:show configuration failed
RP/0/RP0/CPU0:R2(config-isis-af)#show configuration failed
Mon Sep 14 19:33:00.372 UTC
!! SEMANTIC ERRORS: This configuration was rejected by 
!! the system due to semantic errors. The individual 
!! errors with each failed configuration command can be 
!! found below.


router isis 1
 address-family ipv4 unicast
  redistribute bgp 65001 route-policy BGP-TO-ISIS metric-type rib-metric-as-internal
!!% Could not find entry in list: Policy [BGP-TO-ISIS] uses the 'community' attribute. There is no 'community' attribute at the isis redistribution attach point.
 !
!
end

prefix-setで選ぶポリシーに替えると、commitが通ります。R3にも同じものを入れました。

STEP 6 R2:show configuration commit changes last 1
RP/0/RP0/CPU0:R2#show configuration commit changes last 1
Mon Sep 14 19:33:14.267 UTC
!! Building configuration...
!! IOS XR Configuration 26.1.1
prefix-set LAN6
  192.168.6.0/24
end-set
!
route-policy BGP-TO-ISIS-PFX
  if destination in LAN6 then
    pass
  else
    drop
  endif
end-policy
!
router isis 1
 address-family ipv4 unicast
  redistribute bgp 65001 route-policy BGP-TO-ISIS-PFX metric-type rib-metric-as-internal
 !
!
end

R1に残るBGP由来の経路は192.168.6.0/24だけです。

STEP 6 R1:show route 192.168.6.0/24
RP/0/RP0/CPU0:R1#show route 192.168.6.0/24
Mon Sep 14 19:34:58.073 UTC

Routing entry for 192.168.6.0/24
  Known via "isis 1", distance 115, metric 30, type level-2
  Installed Sep 14 19:33:22.275 for 00:01:35
  Routing Descriptor Blocks
    10.1.4.4, from 3.3.3.3, via GigabitEthernet0/0/0/1
      Route metric is 30
  No advertising protos. 
STEP 6 R1:show route 192.168.5.0/24
RP/0/RP0/CPU0:R1#show route 192.168.5.0/24
Mon Sep 14 19:34:57.938 UTC

% Network not in table
STEP 6 R1:ping 192.168.6.1
RP/0/RP0/CPU0:R1#ping 192.168.6.1 source 1.1.1.1 count 50 timeout 1
Mon Sep 14 19:37:05.081 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.6.1 timeout is 1 seconds:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Success rate is 100 percent (50/50), round-trip min/avg/max = 7/10/45 ms

STEP 7:すべて元に戻す

R2・R3・R5の設定を戻すと、5台のrunning-configはSTEP 0と一致し、R1からBGP由来の経路は消えます。

STEP 7 R1:ping 192.168.6.1
RP/0/RP0/CPU0:R1#ping 192.168.6.1 source 1.1.1.1 count 50 timeout 1
Mon Sep 14 19:49:51.876 UTC
Type escape sequence to abort.
Sending 50, 100-byte ICMP Echos to 192.168.6.1 timeout is 1 seconds:
..................................................
Success rate is 0 percent (0/50)

検証Configおよびshow結果

各STEPで5台すべてから、次のファイルをルータごとに分けて取得しています。検証Configはこの..._run.txtです(最終状態は最後のSTEPのもの)。

ファイル内容
..._show.txtshow version / show interface description / show route / show route isis / show route bgp / show route <各プレフィックス> / show route summaryと、show isis系一式(interface brief / neighbors / database / database detail / database verbose / topology / route / adjacency-log / spf-log / lsp-log / statistics)、show bgp / show bgp summary / show bgp neighbors / show running-config router bgp
..._bgp.txtBGPを動かすルータのピアごとのshow bgp neighbors <ピア> advertised-routes / routes / received routes
..._log.txtそのSTEPの範囲だけに絞ったshow logging。各STEPの開始時にlogmsgでマーカーを入れ、その時刻をshow logging startに指定して取得したもの
..._run.txtそのSTEP時点のshow running-config(=そのSTEPの検証Config)
..._trace.txtshow isis trace all | include UPD_LSP_ACCEPTshow isis trace all | include REDIST
..._ping.txtR1は送信元1.1.1.1からping / traceroute 192.168.5.1ping 192.168.4.1ping / traceroute 192.168.6.1、R5は送信元192.168.5.1からping / traceroute 1.1.1.1。R2〜R4には無い
..._commit.cfgそのSTEPでcommitされた設定(show configuration commit changes last 1)。設定を変えていないルータには無い

STEP 0:再配布なし

ルータshow出力syslogrunning-configtracepingbgpcommit
R1showlogruntraceping--
R2showlogruntrace-bgp-
R3showlogruntrace-bgp-
R4showlogruntrace-bgp-
R5showlogruntracepingbgp-

STEP 1:R2とR3でredistribute bgp 65001

ルータshow出力syslogrunning-configtracepingbgpcommit
R1showlogruntraceping--
R2showlogruntrace-bgpcommit
R3showlogruntrace-bgpcommit
R4showlogruntrace-bgp-
R5showlogruntracepingbgp-

STEP 2:R2でbgp redistribute-internal

ルータshow出力syslogrunning-configtracepingbgpcommit
R1showlogruntraceping--
R2showlogruntrace-bgpcommit
R3showlogruntrace-bgp-
R4showlogruntrace-bgp-
R5showlogruntracepingbgp-

ループの証跡(STEP 3の前に追加で取得):R1 route / cef / traceroute / R2 route / cef / bgp

STEP 3:R5がR2向けにMED 50、R3向けにMED 10を付け、R2とR3をrib-metric-as-internalにする

ルータshow出力syslogrunning-configtracepingbgpcommit
R1showlogruntraceping--
R2showlogruntrace-bgpcommit
R3showlogruntrace-bgpcommit
R4showlogruntrace-bgp-
R5showlogruntracepingbgpcommit

STEP 4:R5がスタティック300本をBGPに再配布する

ルータshow出力syslogrunning-configtracepingbgpcommit
R1showlogruntraceping--
R2showlogruntrace-bgp-
R3showlogruntrace-bgp-
R4showlogruntrace-bgp-
R5showlogruntracepingbgpcommit

STEP 5:R2でmaximum-redistributed-prefixes 100

ルータshow出力syslogrunning-configtracepingbgpcommit
R1showlogruntraceping--
R2showlogruntrace-bgpcommit
R3showlogruntrace-bgp-
R4showlogruntrace-bgp-
R5showlogruntracepingbgp-

STEP 6:300本をやめ、R2とR3で、コミュニティのポリシーが拒否されることを確かめてからprefix-setのポリシーを付ける

ルータshow出力syslogrunning-configtracepingbgpcommit
R1showlogruntraceping--
R2showlogruntrace-bgpcommit
R3showlogruntrace-bgpcommit
R4showlogruntrace-bgp-
R5showlogruntracepingbgpcommit

R2でコミュニティのポリシーが拒否された記録(show configuration failed):failed

STEP 7:すべて元に戻す(最終状態)

ルータshow出力syslogrunning-configtracepingbgpcommit
R1showlogruntraceping--
R2showlogruntrace-bgpcommit
R3showlogruntrace-bgpcommit
R4showlogruntrace-bgp-
R5showlogruntracepingbgpcommit

パケットキャプチャーはSTEPごとに、R1 — R2のリンクで取得しています。本文で引用したのは、STEP 2のNo.104〜109、STEP 4のNo.10〜12、STEP 5のNo.1〜3です。STEP 6は、1回目の試行(R5の300本の撤去からR2のcommit拒否まで)とやり直しを別のファイルにしています。

STEPR1 — R2間
0pcap
1pcap
2pcap
3pcap
4pcap
5pcap
6pcap(1回目) / pcap(やり直し)
7pcap

事前に候補設定でヘルプを採り、abortで捨てた記録(commitはしていない):R2 redistribute / maximum-redistributed-prefixes / bgp redistribute-internal / R5 set med

参考

標準タイトル概要
RFC 1195Use of OSI IS-IS for Routing in TCP/IP and Dual Environments3.1節で外部経路に「OSPF、EGP、RIP、その他あらゆる外部プロトコル」の経路を含めること、境界ルータ同士のための「Inter-Domain Routing Protocol Information」(TLV 131)を定めている。
RFC 7794IS-IS Prefix Attributes for Extended IPv4 and IPv6 Reachability2.1節のXフラグ。再配布したプレフィックスに立てる。
ISO/IEC 10589:2002(第2版)Intermediate System to Intermediate System intra-domain routeing information exchange protocol7.3.4.1節で1つのLSPに収まらない情報を複数のLSPに分けること、9.8節でLSP IDの末尾1オクテットがLSP Numberであることを定めている。
Cisco: Configure Redistribute Internal BGP Routes into IGPDocument ID 200782iBGPの経路が既定ではredistributeでIGPに渡らないこと、bgp redistribute-internalで有効にすること。IOS 15.1(4)M5向けの文書で、IOS XRでの挙動は本記事の実機で確認した。
Cisco IP Routing Configuration Guide, IOS XE 17.xIPv6 Routing: Route Redistributionmetric-typerib-metric-as-internal / rib-metric-as-externalが経路表のメトリックを使う指定であることを説明している。

関連記事