キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 
cancel
告知

 TopBanner_Jan.2021_AMA.JPG

 TopBanner_2021.2_ver.7.JPG

 

IOS における BGP の Next-Hop Tracking の動作について

9216
閲覧回数
20
いいね!
0
コメント

 

はじめに

BGP の Next-Hop Tracking (以下 NHT)は、next-hop に到達するために使用する経路に更新があった場合、動的に scan を実施しより早いコンバージェンスを実現するための機能です。

このドキュメントでは、コマンドリファレンスに記載されている内容だけではわかりにくい、動作仕様について、コマンド出力とともに紹介します。

※このドキュメントでは IOS での動作について取り扱います。IOS-XR, IOS-XE では動作やパラメータが違う場合がありますのでご注意ください。

構成

(各機器の詳細設定はドキュメント最後に掲載)
   +--10.1.1.0/24(cost 10)--+  +--10.23.1.0/24--[R3](AS65003)-- 172.20.1.0/24
[R1]       (AS65000)        [R2]
   +--10.1.2.0/24(cost100)--+  +--10.24.1.0/24--[R4](AS65004)-- 192.168.1.0/24

R1-R2 : iBGP, IGP として OSPF (10.x.x.x を広報)
R2-R3 : eBGP(eBGP multihop)
R2-R4 : eBGP(disable-connected-check)
※説明簡素化のため、すべて loopback 同士で session 確立

eBGP のための経路はお互いに static を設定、R2 では static を OSPF へ再配信
R2 は他に loopback 2 つを BGP にて広報(10.22.22.22/32, 10.222.222.222/32)
(※以下、出力例はすべて 15.1(4)M3 を使用)

 

Next-Hop Tracking の基本動作

現在サポートされている IOS では default で有効な機能となります。無効にするためには no bgp nexthop trigger enable コマンドを設定します。

default では、経路に更新があってから 5 秒後に scan を実施するようになっています。この値は bgp nexthop trigger delay SEC コマンドによって調整可能です。scan 実施時に、 next-hop に対して使用可能な経路がない場合は、その next-hop を使用する BGP 経路はすべて削除され、その逆の場合には追加が行われます。

Tracking の対象となるアドレスは、BGP 経路の next-hop となるアドレスです。このアドレスは、show ip bgp コマンドの Next Hop 列でも確認できますが、prefix が多い場合などには show ip bgp nexthops コマンドで要約されたものが確認できます。

R1#show ip bgp
BGP table version is 21, local router ID is 1.1.1.1
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale, m multipath, b backup-path, x best-external, f RT-Filter
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*>i10.22.22.22/32   2.2.2.2                  0    100      0 i
*>i10.222.222.222/32
                    2.2.2.2                  0    100      0 i
*>i172.20.1.0/24    3.3.3.3                  0    100      0 65003 i
*>i192.168.1.0      4.4.4.4                  0    100      0 65004 i
--------------------------------------------------------------------------------------------------------------------------
R1#show ip bgp nexthops
# Paths  Nexthop Address
       2   2.2.2.2
       1   3.3.3.3
       1   4.4.4.4
R1#

この状態で R2-R4 間の Link を down させると、4.4.4.4 への経路がなくなるため、それを Trigger として Next-hop の Scan が動作します。以下の debug はその際の出力例となります。経路削除後に NHT により scan がスケジューリングされ、その約 5 秒後に実施されている様子が確認できます。このNext-hop Scan により、next-hop が 4.4.4.4 となる経路が削除されています。

debug ip routing, debug ip bgp event nexthop を有効にしています
R1#
06:37:13.483: RT: del 4.4.4.4 via 10.1.1.2, ospf metric [110/20]    <--Link down に伴う OSPF 経路削除
06:37:13.483: RT: delete subnet route to 4.4.4.4/32
06:37:13.483: EvD: accum. penalty decayed to 0 after 749 second(s)
06:37:13.483: EvD: charge penalty 500, new accum. penalty 500, flap count 24     <-- penalty (後述)の加算と、scan のスケジューリング
06:37:13.483: BGP(0): IPv4 Unicast::base nexthop modified, reuse in 00:00:19, 19000 , scheduling nexthop scan in 5 secs
R1#
06:37:18.487: BGP: BGP Event nhop timer                              <--Next-hop scan の実施と、4.4.4.4 を経由する経路の削除
06:37:18.487: BGP: tbl IPv4 Unicast:base Nexthop walk
06:37:18.491: RT: del 192.168.1.0 via 4.4.4.4, bgp metric [200/0]
06:37:18.491: RT: delete network route to 192.168.1.0/24
R1#

 

Dampening の penalty とその半減期

NHT には dampening の機能も含まれています。アドレスが一つ更新されるたびに penalty が 500 加算されます。加算後の plenalty の値によって、Next-hop scan が実施されるタイミングが変化します。

  • 950 以下の場合 : コマンドで設定した秒数のタイミング(default = 5 秒後)にスケジューリング
  • 950 を超える場合 : 以下の計算式により、penalty が 100 以下に減少するタイミングにスケジューリング

更新イベントのたびに penalty は加算されますが、すでに Next-hop scan のスケジューリングが行われている場合、再度のスケジューリングは行われません。

この penalty は単純な減算ではなく、8 秒で半分となるように減少していきます(半減期 8 秒)。厳密な計算式は複雑なものとなりますが、おおむね 1 秒あたり 92% に減るものとして概算することができます。例えば 500 が加算された場合、そのままの他にイベントがない場合には 19 秒後に 100 以下となります。ip dampening などと違い、このパラメータ(penalty の加算値、半減期の値等)の変更はできません。また、NHT を使用する場合、この dampening 動作を停止させることもできません

penalty の加算対象イベントは更新全般、つまり経路の追加・削除・更新いずれも対象となり、それらのイベントの度に加算されます。また、その next-hop を使用する経路数にかかわらず next-hop のアドレス単位での加算となります。今回の構成例では、2.2.2.2 は 2 つのパスで使用されていますが、これにより penalty が 2 倍になるということはありません。

R1 の E0/0 が down し、2.2.2.2/32, 3.3.3.3/32, 4.4.4.4/32 の3経路が更新された場合の出力例

debug ip routing, debug ip bgp event nexthop を有効にしています
R1#
07:22:06.831: is_up: Ethernet0/0 0 state: 6 sub state: 1 line: 1
R1#
07:22:09.347: RT: updating ospf 2.2.2.2/32 (0x0):
    via 10.1.2.2 Et1/0
07:22:09.347: RT: closer admin distance for 2.2.2.2, flushing 1 routes
07:22:09.347: RT: add 2.2.2.2/32 via 10.1.2.2, ospf metric [110/101]
07:22:09.347: RT: updating ospf 10.1.1.0/24 (0x0):
    via 10.1.2.2 Et1/0
07:22:09.347: RT: add 10.1.1.0/24 via 10.1.2.2, ospf metric [110/110]
07:22:09.347: RT: updating ospf 4.4.4.4/32 (0x0):
    via 10.1.2.2 Et1/0
07:22:09.347: RT: closer admin distance for 4.4.4.4, flushing 1 routes
07:22:09.347: RT: add 4.4.4.4/32 via 10.1.2.2, ospf metric [110/120]
07:22:09.347: RT: updating ospf 3.3.3.3/32 (0x0):
    via 10.1.2.2 Et1/0
07:22:09.347: RT: closer admin distance for 3.3.3.3, flushing 1 routes
07:22:09.347: RT: add 3.3.3.3/32 via 10.1.2.2, ospf metric [110/120]
07:22:09.351: EvD: accum. penalty decayed to 0 after 83 second(s)
07:22:09.351: EvD: charge penalty 500, new accum. penalty 500, flap count 44    
07:22:09.351: BGP(0): IPv4 Unicast::base nexthop modified, reuse in 00:00:19, 19000 , scheduling nexthop scan in 5 secs
07:22:09.351: EvD: accum. penalty decayed to 500 after 0 second(s)
07:22:09.351: EvD: charge penalty 500, new accum. penalty 1000, flap count 45
07:22:09.351: BGP(0): IPv4 Unicast::base nexthop modified, reuse in 00:00:27, 27000 , timer already running
※2回目の加算ですでに 950 を超えていますが、すでにスケジューリングされているため Next-hop scan が実行されるタイミングは変わりません。
07:22:09.351: EvD: accum. penalty decayed to 1000 after 0 second(s)
07:22:09.351: EvD: charge penalty 500, new accum. penalty 1500, flap count 46
07:22:09.351: BGP(0): IPv4 Unicast::base nexthop modified, reuse in 00:00:32, 32000 , timer already running
※3つの対象アドレスが同時に更新されているため、最終的に penalty が 1500 まで上昇しています。
R1#
07:22:14.367: BGP: BGP Event nhop timer
07:22:14.367: BGP: tbl IPv4 Unicast:base Nexthop walk

この dampening は、経路変更のイベントが発生した直後の Next-hop scan の時点で IGP がコンバージェンスしている場合にはあまり影響を与えませんが、next-hop が使用する経路が頻繁に flap する場合などに考慮する必要が出てきます。

以下は 2.2.2.2/32 を意図的に連続で flap させた場合の例です。

debug ip routing, debug ip bgp event nexthop を有効にしています 
09:01:28.423: RT: del 2.2.2.2 via 10.1.1.2, ospf metric [110/11]
09:01:28.423: RT: delete subnet route to 2.2.2.2/32
※2.2.2.2 を削除
09:01:28.423: EvD: accum. penalty decayed to 0 after 3119 second(s) 09:01:28.423: EvD: charge penalty 500, new accum. penalty 500, flap count 8 09:01:28.423: BGP(0): IPv4 Unicast::base nexthop modified, reuse in 00:00:19, 19000 , scheduling nexthop scan in 5 secs ※初回の経路削除時ではdefault 通り 5 秒後のスケジューリングとなります 09:01:33.431: BGP: BGP Event nhop timer 09:01:33.431: BGP: tbl IPv4 Unicast:base Nexthop walk 09:01:33.435: RT: del 10.22.22.22 via 2.2.2.2, bgp metric [200/0] 09:01:33.435: RT: delete subnet route to 10.22.22.22/32 09:01:33.435: RT: del 10.222.222.222 via 2.2.2.2, bgp metric [200/0] 09:01:33.435: RT: delete subnet route to 10.222.222.222/32 ※Next-hop scan のタイミングで 2.2.2.2 に対する有効な経路がないため、 next-hop に 2.2.2.2 を使用している BGP 経路が削除されています 09:01:35.851: RT: updating ospf 2.2.2.2/32 (0x0): via 10.1.1.2 Et0/0 09:01:35.851: RT: add 2.2.2.2/32 via 10.1.1.2, ospf metric [110/11]
※2.2.2.2 を再学習 09:01:35.855: EvD: accum. penalty decayed to 272 after 7 second(s)
前回のイベントから 7 秒経過し 272 まで減少したことを示します 09:01:35.855: EvD: charge penalty 500, new accum. penalty 772, flap count 9 09:01:35.855: BGP(0): IPv4 Unicast::base nexthop modified, reuse in 00:00:24, 24000 , scheduling nexthop scan in 5 secs ※このように経路追加時にも penalty および Next-hop scan のスケジューリングが行われます ※この時点ではまだ 500 を加算しても 772 となり、 950 を超えていないため 5 秒後のスケジューリングとなります 09:01:40.863: BGP: BGP Event nhop timer 09:01:40.863: BGP: tbl IPv4 Unicast:base Nexthop walk 09:01:40.863: RT: updating bgp 10.22.22.22/32 (0x0): via 2.2.2.2 09:01:40.863: RT: add 10.22.22.22/32 via 2.2.2.2, bgp metric [200/0] 09:01:40.863: RT: updating bgp 10.222.222.222/32 (0x0): via 2.2.2.2 09:01:40.863: RT: add 10.222.222.222/32 via 2.2.2.2, bgp metric [200/0] ※Next-hop scan のタイミングで 2.2.2.2 に対する有効な経路があるため、 next-hop に 2.2.2.2 を使用している BGP 経路が追加されています 09:01:40.939: RT: del 2.2.2.2 via 10.1.1.2, ospf metric [110/11] 09:01:40.939: RT: delete subnet route to 2.2.2.2/32 ※2.2.2.2 を再度削除
09:01:40.943: EvD: accum. penalty decayed to 500 after 5 second(s) 09:01:40.943: EvD: charge penalty 500, new accum. penalty 1000, flap count 10 09:01:40.943: BGP(0): IPv4 Unicast::base nexthop modified, reuse in 00:00:27, 27000 , scheduling nexthop scan in 27 secs ※再度経路が削除されると、今度は加算後の penalty が 950 を超えたため、5 秒後ではなく ※1000 が 100 まで減少する 27 秒後に Next-hop scan がスケジューリングされています R1#

 

全機器設定

hostname R1
!
interface Loopback0
  ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
  ip address 10.1.1.1 255.255.255.0
  ip ospf cost 10
!
interface Ethernet1/0
  ip address 10.1.2.1 255.255.255.0
  ip ospf cost 100
!
router ospf 65000
  network 1.1.1.1 0.0.0.0 area 0
  network 10.1.0.0 0.0.255.255 area 0
!
router bgp 65000
  bgp log-neighbor-changes
  neighbor 2.2.2.2 remote-as 65000
  neighbor 2.2.2.2 update-source Loopback0
!
end
------------------------------------------------------------------------------------------------------------
hostname R2
!
interface Loopback0
  ip address 2.2.2.2 255.255.255.255
!
interface Loopback22
  ip address 10.22.22.22 255.255.255.255
!
interface Loopback222
  ip address 10.222.222.222 255.255.255.255
!
interface Ethernet0/0
  ip address 10.1.1.2 255.255.255.0
  ip ospf cost 10
!
interface Ethernet1/0
  ip address 10.1.2.2 255.255.255.0
  ip ospf cost 100
!
interface Serial2/0
  ip address 10.23.1.2 255.255.255.0
!
interface Serial3/0
  ip address 10.24.1.2 255.255.255.0
!
router ospf 65000
  redistribute static metric-type 1 subnets
  network 2.2.2.2 0.0.0.0 area 0
  network 10.1.0.0 0.0.255.255 area 0
!
router bgp 65000
  bgp log-neighbor-changes
  no bgp nexthop trigger enable
  network 10.22.22.22 mask 255.255.255.255
  network 10.222.222.222 mask 255.255.255.255
  neighbor 1.1.1.1 remote-as 65000
  neighbor 1.1.1.1 update-source Loopback0
  neighbor 3.3.3.3 remote-as 65003
  neighbor 3.3.3.3 ebgp-multihop 255
  neighbor 3.3.3.3 update-source Loopback0
  neighbor 4.4.4.4 remote-as 65004
  neighbor 4.4.4.4 disable-connected-check
  neighbor 4.4.4.4 update-source Loopback0
!
ip route 3.3.3.3 255.255.255.255 Serial2/0 10.23.1.3
ip route 4.4.4.4 255.255.255.255 Serial3/0 10.24.1.4
!
end
------------------------------------------------------------------------------------------------------------
hostname R3
!
interface Loopback0
  ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
  ip address 172.20.1.3 255.255.255.0
!
interface Serial2/0
  ip address 10.23.1.3 255.255.255.0
!
router bgp 65003
  bgp log-neighbor-changes
  network 172.20.1.0 mask 255.255.255.0
  neighbor 2.2.2.2 remote-as 65000
  neighbor 2.2.2.2 ebgp-multihop 255
  neighbor 2.2.2.2 update-source Loopback0
!
ip route 2.2.2.2 255.255.255.255 Serial2/0 10.23.1.2
!
end
------------------------------------------------------------------------------------------------------------
hostname R4
!
interface Loopback0
  ip address 4.4.4.4 255.255.255.255
!
interface Ethernet0/0
  ip address 192.168.1.4 255.255.255.0
!
interface Serial3/0
  ip address 10.24.1.4 255.255.255.0
!
router bgp 65004
  bgp log-neighbor-changes
  network 192.168.1.0
  neighbor 2.2.2.2 remote-as 65000
  neighbor 2.2.2.2 disable-connected-check
  neighbor 2.2.2.2 update-source Loopback0
!
ip route 2.2.2.2 255.255.255.255 Serial3/0 10.24.1.2
!
end