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から作る関係が互いに依存し、経路の取り消しが伝わらない状態を作れます。
RP/0/RP0/CPU0:R2(config-bgp)#bgp redistribute-internal ?
<cr> BGPのMEDをIS-ISのメトリックにする
redistributeにmetricを付けなければ、IS-ISは再配布した経路をメトリック0で広告します。BGPの経路には値を1つずつ指定するより、BGPが運んできたMEDをそのまま使うほうが自然です。IOS XRのmetric-type rib-metric-as-internalは、経路表(RIB)に入った経路のメトリックをIS-ISのメトリックにします。eBGPで学んだ経路のRIBメトリックはMEDなので、対向ASが付けたMEDがそのままLSPに載ります。
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に載せません。警告だけで広告は続ける、という動きではありません。
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で並べて選びます。
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.0001のlevel-2-only(wide)です。R2とR3が外部AS 65005のR5とeBGPを張る出口で、R4はiBGPでR2に自分のLANを広告します。R5はIS-ISを動かしません。ソフトウェアはXRd 26.1.1です。
| ルータ | Lo | BGP | IS-ISのリンク |
|---|---|---|---|
| R1 | Lo0 1.1.1.1/32(観測点) | なし | Gi0/0/0/0 10.1.2.1(R2へ)/ Gi0/0/0/1 10.1.4.1(R4へ) |
| R2 | Lo0 2.2.2.2/32 | AS 65001。eBGP → R5(10.2.5.5)、iBGP → R4(4.4.4.4) | Gi0/0/0/0 10.1.2.2 |
| R3 | Lo0 3.3.3.3/32 | AS 65001。eBGP → R5(10.3.5.5) | Gi0/0/0/0 10.3.4.3(R4へ) |
| R4 | Lo0 4.4.4.4/32、Lo1 192.168.4.1/24 | AS 65001。iBGP → R2。network 192.168.4.0/24 | Gi0/0/0/0 10.1.4.4 / Gi0/0/0/1 10.3.4.4 |
| R5 | Lo0 5.5.5.5/32、Lo1 192.168.5.1/24、Lo2 192.168.6.1/24 | AS 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が通らない |
| 1 | R2とR3でredistribute bgp 65001 | eBGP由来の2つだけがIS-ISに載る。iBGP由来の192.168.4.0/24は載らない |
| 2 | R2でbgp redistribute-internal | 192.168.4.0/24も載るが、R1とR2の間でループになり届かない |
| 3 | R5がR2向けにMED 50、R3向けにMED 10を付け、R2とR3をrib-metric-as-internalにする | LSPのメトリックが50と10になり、R1の出口がR3に動く |
| 4 | R5がスタティック300本をBGPに再配布する | R2とR3のLSPが断片に分かれる |
| 5 | R2でmaximum-redistributed-prefixes 100 | R2が100本だけ広告し、超えた分を外す |
| 6 | 300本をやめ、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は通りません。
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:07RP/0/RP0/CPU0:R1#show route 192.168.5.0/24
Mon Sep 14 18:35:18.315 UTC
% Network not in tableSTEP 1:R2とR3でredistribute bgp 65001
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
!
!
endeBGPで学んだ192.168.5.0/24はR1まで届き、tracerouteはR2(10.1.2.2)からR5へ抜けます。
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の経路表に現れません。
RP/0/RP0/CPU0:R1#show route 192.168.4.0/24
Mon Sep 14 18:48:04.177 UTC
% Network not in tableRP/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
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
!
endR2のLSPに192.168.4.0/24が加わり、R1はR2経由で学習します。しかしpingは通りません。
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. 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)が交互に並びます。
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の経路を既定で再配布しない理由です。
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回通りました。
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 250STEP 3:MEDをIS-ISのメトリックにする
R5は、R2向けにMED 50、R3向けにMED 10を付けます。
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
!
endR2とR3の経路表では、eBGPの経路のメトリックがMEDそのものになっています。
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. 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)が現れます。
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. 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つの断片に分かれます。
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: 1R1のIS-ISの経路は307本になりました。
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にだけ置くと定めています。
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)STEP 5:上限を100にする
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
!
!
endcommitと同時に、R2のsyslogに上限を超えた警告が出ます。
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/24〜10.200.99.0/24の100本で、超えた203本は広告されていません。
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で送り直したパージです。
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: R2STEP 6:コミュニティでは絞れず、prefix-setで絞る
R5の300本を撤去したうえで、コミュニティで選ぶポリシーをR2の再配布に付けると、commitが拒否されます。
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.
!
!
endprefix-setで選ぶポリシーに替えると、commitが通ります。R3にも同じものを入れました。
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
!
!
endR1に残るBGP由来の経路は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. RP/0/RP0/CPU0:R1#show route 192.168.5.0/24
Mon Sep 14 19:34:57.938 UTC
% Network not in tableRP/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 msSTEP 7:すべて元に戻す
R2・R3・R5の設定を戻すと、5台のrunning-configはSTEP 0と一致し、R1からBGP由来の経路は消えます。
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.txt | show 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.txt | BGPを動かすルータのピアごとの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.txt | show isis trace all | include UPD_LSP_ACCEPTとshow isis trace all | include REDIST |
..._ping.txt | R1は送信元1.1.1.1からping / traceroute 192.168.5.1、ping 192.168.4.1、ping / 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出力 | syslog | running-config | trace | ping | bgp | commit |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | - | - |
| R2 | show | log | run | trace | - | bgp | - |
| R3 | show | log | run | trace | - | bgp | - |
| R4 | show | log | run | trace | - | bgp | - |
| R5 | show | log | run | trace | ping | bgp | - |
STEP 1:R2とR3でredistribute bgp 65001
| ルータ | show出力 | syslog | running-config | trace | ping | bgp | commit |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | - | - |
| R2 | show | log | run | trace | - | bgp | commit |
| R3 | show | log | run | trace | - | bgp | commit |
| R4 | show | log | run | trace | - | bgp | - |
| R5 | show | log | run | trace | ping | bgp | - |
STEP 2:R2でbgp redistribute-internal
| ルータ | show出力 | syslog | running-config | trace | ping | bgp | commit |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | - | - |
| R2 | show | log | run | trace | - | bgp | commit |
| R3 | show | log | run | trace | - | bgp | - |
| R4 | show | log | run | trace | - | bgp | - |
| R5 | show | log | run | trace | ping | bgp | - |
ループの証跡(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出力 | syslog | running-config | trace | ping | bgp | commit |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | - | - |
| R2 | show | log | run | trace | - | bgp | commit |
| R3 | show | log | run | trace | - | bgp | commit |
| R4 | show | log | run | trace | - | bgp | - |
| R5 | show | log | run | trace | ping | bgp | commit |
STEP 4:R5がスタティック300本をBGPに再配布する
| ルータ | show出力 | syslog | running-config | trace | ping | bgp | commit |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | - | - |
| R2 | show | log | run | trace | - | bgp | - |
| R3 | show | log | run | trace | - | bgp | - |
| R4 | show | log | run | trace | - | bgp | - |
| R5 | show | log | run | trace | ping | bgp | commit |
STEP 5:R2でmaximum-redistributed-prefixes 100
| ルータ | show出力 | syslog | running-config | trace | ping | bgp | commit |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | - | - |
| R2 | show | log | run | trace | - | bgp | commit |
| R3 | show | log | run | trace | - | bgp | - |
| R4 | show | log | run | trace | - | bgp | - |
| R5 | show | log | run | trace | ping | bgp | - |
STEP 6:300本をやめ、R2とR3で、コミュニティのポリシーが拒否されることを確かめてからprefix-setのポリシーを付ける
| ルータ | show出力 | syslog | running-config | trace | ping | bgp | commit |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | - | - |
| R2 | show | log | run | trace | - | bgp | commit |
| R3 | show | log | run | trace | - | bgp | commit |
| R4 | show | log | run | trace | - | bgp | - |
| R5 | show | log | run | trace | ping | bgp | commit |
R2でコミュニティのポリシーが拒否された記録(show configuration failed):failed
STEP 7:すべて元に戻す(最終状態)
| ルータ | show出力 | syslog | running-config | trace | ping | bgp | commit |
|---|---|---|---|---|---|---|---|
| R1 | show | log | run | trace | ping | - | - |
| R2 | show | log | run | trace | - | bgp | commit |
| R3 | show | log | run | trace | - | bgp | commit |
| R4 | show | log | run | trace | - | bgp | - |
| R5 | show | log | run | trace | ping | bgp | commit |
パケットキャプチャーは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拒否まで)とやり直しを別のファイルにしています。
| STEP | R1 — R2間 |
|---|---|
| 0 | pcap |
| 1 | pcap |
| 2 | pcap |
| 3 | pcap |
| 4 | pcap |
| 5 | pcap |
| 6 | pcap(1回目) / pcap(やり直し) |
| 7 | pcap |
事前に候補設定でヘルプを採り、abortで捨てた記録(commitはしていない):R2 redistribute / maximum-redistributed-prefixes / bgp redistribute-internal / R5 set med
参考
| 標準 | タイトル | 概要 |
|---|---|---|
| RFC 1195 | Use of OSI IS-IS for Routing in TCP/IP and Dual Environments | 3.1節で外部経路に「OSPF、EGP、RIP、その他あらゆる外部プロトコル」の経路を含めること、境界ルータ同士のための「Inter-Domain Routing Protocol Information」(TLV 131)を定めている。 |
| RFC 7794 | IS-IS Prefix Attributes for Extended IPv4 and IPv6 Reachability | 2.1節のXフラグ。再配布したプレフィックスに立てる。 |
| ISO/IEC 10589:2002(第2版) | Intermediate System to Intermediate System intra-domain routeing information exchange protocol | 7.3.4.1節で1つのLSPに収まらない情報を複数のLSPに分けること、9.8節でLSP IDの末尾1オクテットがLSP Numberであることを定めている。 |
| Cisco: Configure Redistribute Internal BGP Routes into IGP | Document ID 200782 | iBGPの経路が既定ではredistributeでIGPに渡らないこと、bgp redistribute-internalで有効にすること。IOS 15.1(4)M5向けの文書で、IOS XRでの挙動は本記事の実機で確認した。 |
| Cisco IP Routing Configuration Guide, IOS XE 17.x | IPv6 Routing: Route Redistribution | metric-typeのrib-metric-as-internal / rib-metric-as-externalが経路表のメトリックを使う指定であることを説明している。 |
関連記事
- IS-ISとは
- IS-ISのNSAPアドレスとNET(System ID)
- IS-ISのレベル1とレベル2(階層構造)
- IS-ISパケットの種類とヘッダーフォーマット
- IS-ISの隣接関係の確立と状態遷移
- IS-ISのDISと疑似ノード(Pseudonode)
- IS-ISのネットワークタイプ(broadcast / point-to-point)
- IS-ISのメトリック(narrow / wide)
- IS-ISの認証(hello-password / lsp-password)
- IS-ISのLSPとリンクステートデータベース
- IS-ISの主要TLV
- IS-ISのフラッディングとLSDB同期
- IS-ISのSPF計算と経路選択
- IS-ISのATTビットとレベル1のデフォルトルート
- IS-ISのルートリークとup/downビット
- IS-ISの経路集約
- IS-ISのオーバーロードビット
- IS-ISの収束タイマー(SPF / LSP生成)
- IS-ISへの再配布(connected / static)
- IS-ISへのBGP経路の再配布