Upgrade to Pro — share decks privately, control downloads, hide ads and more …

もうおまじないとはいわせない!OSPFの迂回定義

 もうおまじないとはいわせない!OSPFの迂回定義

[APC勉強会8a1 #37 登壇資料]
嘉藤 育宏(カトウ ヤスヒロ)

WAN / LAN の冗長化において、障害復旧時の通信中断を極小化するために“max-metric router-lsa on-startup wait-for-bgp” が使われます。呪文やおまじないではなく、設計として採用することの有用性を知っていただくことを目的として、デモをしながら機能の説明をします。

More Decks by AP Communications Co., Ltd.

Other Decks in Technology

Transcript

  1. 自己紹介 所属:株式会社エーピーコミュニケーションズ iTOC事業部 BzD部 0-WAN 氏名:嘉藤育宏(カトウヤスヒロ) 略歴:HW保守(チェンジニア)数年、 運用監視/管理COTSの設計・構築数年、 インフラ設計・構築数年、 2022年6月エーピーコミュニケーションズ入社

    クラウドセキュリティ、Zero Trust 業務遂行中 目標:CCIE SP(Service Provider)挑戦中 資格:CCNP、DEVASC、ITILv3、Zscaler(ZIA、ZPA) 好き:アイス、ベルギービール、ジーパン 嫌い:パクチー
  2. 目次 1.はじめに 2.“max-metric ~”の認知度 3.本セッションの流れ 4.“max-metric ~”とは 5.検証トポロジ 6.正常時のルーティング 7.障害発生時のルーティング

    8.ブラックホール(通信中断) 9.“max-metric ~” 適用 10.いつ切り替わるの? 11.デモ 12.まとめ 13.理解度チェック 14.質疑応答
  3. 1.はじめに 8a1にご参加いただきありがとうございます。 WAN / LAN の冗長化において、障害復旧時の通信中断を極小化する ために“max-metric router-lsa on-startup wait-for-bgp※

    ” が使わ れます。呪文やおまじないではなく、設計として採用することの有用 性を知っていただくことを目的としています。 ※ max-metric router-lsa on-startup wait-for-bgp では長すぎる ので以降、“max-metric ~”と省略します。
  4. 4.“max-metric ~”とは “max-metric ~”とは OSPF の迂回設計定義で使われるものです。 簡単に言うとBGPが収束するまでOSPF的に迂回してくれて通信を継続させてく れる良いものです。 Configuration Guide

    より https://www.cisco.com/c/en/us/td/docs/ios-xml/ios/iproute_ospf/configuration/xe-3s/iro-xe-3s-book/iro-stub-router.html#GUID-037C6B64-2B7A-431C-837E-D91C4ED4FC83 Configures OSPF to advertise a maximum metric until BGP routing tables have converged or until the default timer has expired. The wait-for-bgp keyword must follow the on-startup keyword to be configured. The default timer value is 600 seconds. OSPF収束時間 BGP収束時間 max-metric router-lsa on-startup wait-for-bgp BGP が収束するまでの間、OSPFの迂回経路を使って 通信を継続する。
  5. AS100 AS200 5.検証トポロジ 検証トポロジを以下に示します。 RT 4 RT 2 RT 5

    RT 6 RT 1 Alpine Linux OSPF 共通 Loopback0:X.X.X.X/32 P2P LINK IP FORMAT:10.X.Y.X/24(with X < Y) 192.0.2.0/24 cost 10 cost 1 cost 1 •OSPF Hello:10sec, Dead:40sec(default) •OSPF Hello:1sec, Dead:3sec •BGP KeepAlive:60sec, Hold:180sec (default) •RT1 ~ RT5 は iBGP peering(フルメッシュ) 検証用の 1万6千経路 RT 3 cost 10 cost 10 eBGP peering Default GW 192.0.2.1 (RT1)
  6. 6.正常時のルーティング 正常時のルーティングを以下に示します。 AS100 AS200 RT 4 RT 6 Alpine Linux

    OSPF 192.0.2.0/24 RT 3 cost 10 eBGP peering RT1#sh ip bgp 1.1.0.1 best-path-reason BGP routing table entry for 1.1.0.0/16, version 32732 Paths: (1 available, best #1, table default) Flag: 0x100 Not advertised to any peer Refresh Epoch 2 100, (received & used) 5.5.5.5 (metric 3) from 5.5.5.5 (5.5.5.5) Origin IGP, metric 0, localpref 100, valid, internal, best rx pathid: 0, tx pathid: 0x0 Updated on Jun 12 2023 05:32:31 UTC Best Path Evaluation: Overall best path RT1# cost 10 cost 10 cost 1 cost 1 検証用の 1万6千経路 RT 1 RT 2 RT 5
  7. 7.障害発生時のルーティング 障害発生時のルーティングを以下に示します。切り替わりは早いです。 AS100 AS200 RT 3 Alpine Linux OSPF 192.0.2.0/24

    cost 1 cost 1 eBGP peering 停止! cost 10 RT1#sh ip bgp 1.1.0.1 best-path-reason BGP routing table entry for 1.1.0.0/16, version 32732 Paths: (1 available, best #1, table default) Flag: 0x100 Not advertised to any peer Refresh Epoch 2 100, (received & used) 5.5.5.5 (metric 31) from 5.5.5.5 (5.5.5.5) Origin IGP, metric 0, localpref 100, valid, internal, best rx pathid: 0, tx pathid: 0x0 Updated on Jun 12 2023 05:32:31 UTC Best Path Evaluation: Overall best path RT1# cost 10 cost 10 RT 1 RT 3 RT 4 RT 5 RT 6 検証用の 1万6千経路
  8. 8.ブラックホール(通信中断) OSPFは収束しているのだが、BGPが未集束のため通信できない。故にOSPFの経路切り戻しが発生すると通信中断となってしまいます。 AS100 AS200 RT 4 RT 2 RT 1

    Alpine Linux OSPF 192.0.2.0/24 RT 3 eBGP peering OSPFは収束 しかし BGPは未集束 BGPが未集束(つまり通信の準備が出来ていない状態)で パケットが来ても通信できないにも拘らず、OSPFのcostが 低い方へトラフィックが流れるために本事象は発生します。 cost 10 RT1#sh ip bgp 1.1.0.1 best-path-reason BGP routing table entry for 1.1.0.0/16, version 32732 Paths: (1 available, best #1, table default) Flag: 0x100 Not advertised to any peer Refresh Epoch 2 100, (received & used) 5.5.5.5 (metric 3) from 5.5.5.5 (5.5.5.5) Origin IGP, metric 0, localpref 100, valid, internal, best rx pathid: 0, tx pathid: 0x0 Updated on Jun 12 2023 05:32:31 UTC Best Path Evaluation: Overall best path RT1# cost 10 cost 10 cost 1 cost 1 RT 5 RT 6 検証用の 1万6千経路
  9. 9.“max-metric ~” 適用 この問題は、“max-metric ~” を適用することで解決できます。 AS100 AS200 RT 2

    Alpine Linux OSPF 192.0.2.0/24 eBGP peering cost 65535+1 cost 65535+1 BGPが収束するまでcostをMAXにして、 意図的に通信しないようにする定義! RT2>sh ip route ospf | b Gate Gateway of last resort is not set 1.0.0.0/8 is variably subnetted, 256 subnets, 2 masks O 1.1.1.1/32 [110/65536] via 10.1.3.1, 00:01:06, GigabitEthernet2 2.0.0.0/8 is variably subnetted, 201 subnets, 2 masks O 2.2.2.2/32 [110/65546] via 10.3.4.4, 00:01:06, GigabitEthernet1 [110/65546] via 10.1.3.1, 00:01:06, GigabitEthernet2 4.0.0.0/8 is variably subnetted, 21 subnets, 2 masks O 4.4.4.4/32 [110/65536] via 10.3.4.4, 00:01:06, GigabitEthernet1 10.0.0.0/8 is variably subnetted, 26 subnets, 3 masks O 10.1.2.0/24 [110/65545] via 10.1.3.1, 00:01:06, GigabitEthernet2 O 10.2.4.0/24 [110/65545] via 10.3.4.4, 00:01:06, GigabitEthernet1 O E2 192.0.2.0/24 [110/20] via 10.3.4.4, 00:01:06, GigabitEthernet1 RT2> cost 10 cost 10 cost 10 ココに 適用 OSPFは収束 しかし BGPは未集束 RT 1 RT 3 RT 4 RT 5 RT 6
  10. 9.“max-metric ~” 適用 この問題は、“max-metric ~” を適用することで解決できます。 RT2#conf t Enter configuration

    commands, one per line. End with CNTL/Z. RT2(config)#router ospf 1 RT2(config-router)#? Router configuration commands: max-metric Set maximum metric RT2(config-router)#max-metric ? router-lsa Maximum metric in self-originated router-LSAs RT2(config-router)#max-metric router-lsa ? on-startup Set maximum metric temporarily after reboot RT2(config-router)#max-metric router-lsa on-startup ? wait-for-bgp Let BGP decide when to originate router-LSA with normal metric RT2(config-router)#max-metric router-lsa on-startup wait-for-bgp RT2(config-router)# Configuration Guide より https://www.cisco.com/c/en/us/td/docs/ios- xml/ios/iproute_ospf/configuration/xe-3s/iro-xe-3s- book/iro-stub-router.html#GUID-037C6B64-2B7A- 431C-837E-D91C4ED4FC83 Configures OSPF to advertise a maximum metric until BGP routing tables have converged or until the default timer has expired. The wait-for- bgp keyword must follow the on-startup keyword to be configured. The default timer value is 600 seconds. BGPが収束するまでcostをMAXにして、OSPF経路の切り戻しをさせないようにする。 デフォルトタイマーは、600秒=10分です。
  11. 10.いつ切り戻るの? BGPが収束するまでというけれど、何を以ってOSPFのcostをMAXからNormalに戻すのでしょうか。 RT2>sh ip route ospf | b Gate Gateway

    of last resort is not set 1.0.0.0/8 is variably subnetted, 255 subnets, 2 masks O 1.1.1.1/32 [110/65536] via 10.1.2.1, 00:01:05, GigabitEthernet1 3.0.0.0/8 is variably subnetted, 21 subnets, 2 masks O 3.3.3.3/32 [110/65546] via 10.1.2.1, 00:01:05, GigabitEthernet1 4.0.0.0/8 is variably subnetted, 21 subnets, 2 masks O 4.4.4.4/32 [110/65546] via 10.2.5.5, 00:01:06, GigabitEthernet2 5.0.0.0/8 is variably subnetted, 21 subnets, 2 masks O 5.5.5.5/32 [110/65536] via 10.2.5.5, 00:01:06, GigabitEthernet2 10.0.0.0/8 is variably subnetted, 27 subnets, 3 masks O 10.1.3.0/24 [110/65545] via 10.1.2.1, 00:01:05, GigabitEthernet1 O 10.3.4.0/24 [110/65555] via 10.2.5.5, 00:01:06, GigabitEthernet2 [110/65555] via 10.1.2.1, 00:01:05, GigabitEthernet1 O 10.4.5.0/24 [110/65545] via 10.2.5.5, 00:01:06, GigabitEthernet2 O E2 192.0.2.0/24 [110/20] via 10.1.2.1, 00:01:05, GigabitEthernet1 RT2> RT2>sh ip ospf | i BGP|Or Originating router-LSAs with maximum metric, Time remaining: 00:08:46 Condition: on startup while BGP is converging, State: active RT2> RT2>sh ip cef sum IPv4 CEF is enabled for distributed and running VRF Default 7941 prefixes (7941/0 fwd/non-fwd) Table id 0x0 Database epoch: 2 (7941 entries at this epoch) RT2>sh ip bgp sum | b Ne Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 1.1.1.1 4 200 5 4 16366 0 0 00:01:01 0 3.3.3.3 4 200 6 4 16366 0 0 00:01:05 0 4.4.4.4 4 200 6 4 16366 0 0 00:01:02 0 5.5.5.5 4 200 18 4 16366 0 0 00:00:58 16365 RT2> RT2>sh ip route ospf | b Gate Gateway of last resort is not set 1.0.0.0/8 is variably subnetted, 255 subnets, 2 masks O 1.1.1.1/32 [110/2] via 10.1.2.1, 00:00:03, GigabitEthernet1 3.0.0.0/8 is variably subnetted, 21 subnets, 2 masks O 3.3.3.3/32 [110/12] via 10.1.2.1, 00:00:03, GigabitEthernet1 4.0.0.0/8 is variably subnetted, 21 subnets, 2 masks O 4.4.4.4/32 [110/12] via 10.2.5.5, 00:00:03, GigabitEthernet2 5.0.0.0/8 is variably subnetted, 21 subnets, 2 masks O 5.5.5.5/32 [110/2] via 10.2.5.5, 00:00:03, GigabitEthernet2 10.0.0.0/8 is variably subnetted, 27 subnets, 3 masks O 10.1.3.0/24 [110/11] via 10.1.2.1, 00:00:03, GigabitEthernet1 O 10.3.4.0/24 [110/21] via 10.2.5.5, 00:00:03, GigabitEthernet2 [110/21] via 10.1.2.1, 00:00:03, GigabitEthernet1 O 10.4.5.0/24 [110/11] via 10.2.5.5, 00:00:03, GigabitEthernet2 O E2 192.0.2.0/24 [110/20] via 10.1.2.1, 00:01:11, GigabitEthernet1 RT2> RT2>sh ip ospf | i BGP|Or Originating router-LSAs with maximum metric Condition: on startup while BGP is converging, State: inactive Unset reason: BGP converged, Originated for 74 seconds RT2> RT2>sh ip cef sum IPv4 CEF is enabled for distributed and running VRF Default 16398 prefixes (16398/0 fwd/non-fwd) Table id 0x0 Database epoch: 2 (16398 entries at this epoch) RT2> RT2>sh ip bgp sum | b Ne Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd 1.1.1.1 4 200 5 4 16366 0 0 00:01:04 0 3.3.3.3 4 200 6 4 16366 0 0 00:01:09 0 4.4.4.4 4 200 6 4 16366 0 0 00:01:06 0 5.5.5.5 4 200 18 4 16366 0 0 00:01:02 16365 RT2> Max- metric Normal Max-metric 有効! 残り 8分46秒 Max-metric 無効! BGP の Prefix が FIB※ に書き込み完了を以って Max-metric が解除されます。 数 秒 後 ※Forwarding Information Base の略です。 パケットを転送する際に最適ルートを参照するためのデータベースのことをいいます
  12. APPENDIX Q1: ブラックホールASとは何ですか? A1: 以下、ご参照ください。AS内の全ルータでBGPを使用していないときに起こり得ます。AS15はブラックホールASと呼ばれます。 宛先 Next hop 10.1.2.0/24 直接接続

    10.2.3.0/24 直接接続 ー ー X ① ② ③ Y 30.0.0.0/8 20.0.0.0/8 .1 .2 40.0.0.0/8 .2 10.1.2.0/24 10.2.3.0/24 .1 .3 .2 .2 .1 AS20 AS10 AS15 iBGP 30.0.0.0/8 eBGP 30.0.0.0/8 eBGP 宛先 Next hop 10.1.2.0/24 直接接続 10.2.3.0/24 直接接続 ー ー X ① ② ③ Y 30.0.0.0/8 20.0.0.0/8 .1 .2 40.0.0.0/8 .2 10.1.2.0/24 10.2.3.0/24 .1 .3 .2 .2 .1 AS20 AS10 AS15 iBGP 宛先 Next hop 30.0.0.0/8 20.0.0.1(Y) 10.1.2.0/24 10.2.3.2(②) 10.2.3.0/24 直接接続 宛先 Next hop 30.0.0.0/8 10.2.3.3(③) 10.2.3.0/24 10.1.2.2(②) 10.1.2.0/24 直接接続 宛先 Next hop 30.0.0.0/8 20.0.0.1(Y) 10.1.2.0/24 10.2.3.2(②) 10.2.3.0/24 直接接続 宛先 Next hop 30.0.0.0/8 10.2.3.3(③) 10.2.3.0/24 10.1.2.2(②) 10.1.2.0/24 直接接続 30.0.0.1宛 No BGP No BGP 破棄 30.0.0.0/8 を知らず 破棄 ルータ②はBGPを使用していない ため、外部ASのルーティングを知 らないためブラックホール発生!
  13. APPENDIX Q2: BGP synchronization(BGP同期)とは何でしょうか? A2: iBGPの経路情報をIGPにも通知する動作のことです。ブラックホールASの問題を解決する際に使います。 宛先 Next hop 10.1.2.0/24

    直接接続 10.2.3.0/24 直接接続 30.0.0.0/8 10.2.3.3(ルータ③) X ① ② ③ Y 30.0.0.0/8 20.0.0.0/8 .1 .2 40.0.0.0/8 .2 10.1.2.0/24 10.2.3.0/24 .1 .3 .2 .2 .1 AS20 AS10 AS15 iBGP 宛先 Next hop 30.0.0.0/8 20.0.0.1(ルータY) 10.1.2.0/24 10.2.3.2(ルータ②) 10.2.3.0/24 直接接続 宛先 Next hop 30.0.0.0/8 10.2.3.3(ルータ③) 10.2.3.0/24 10.1.2.2(ルータ②) 10.1.2.0/24 直接接続 30.0.0.1宛 No BGP IGP 30.0.0.0/8 IGP 30.0.0.0/8 BGP同期により通知される 8a1で説明したトポロジーでは、全 ルータでiBGPを定義しているため、 BGP同期を定義する必要はありません。 BGP同期は、IOS 12.2(8)T以降は Defaultで無効になっています。
  14. APPENDIX Q4: BGP Best path algorithm の覚え方ありませんか? A4: 完全なものではありませんが、よく使われるものを以下のように語呂で覚えることができます。 “We

    Love Oranges AS Oranges Mean Pure Refreshment” W Weight (Highest) L LOCAL_PREF (Highest) O Originate (local) routes that are advertise through the “network” command or redistributed from an IGP. AS AS_PATH (shortest) O ORIGIN Code (IGP > EGP > Incomplete M MED (lowest) P Paths (External > Internal) R RID (lowest)
  15. APPENDIX Q5: 検証用の1万6千経路はどうやって準備したのでしょうか? A5: IOSのtclshというものを使って、Loopbackを大量に作ってnetworkコマンドで流し込みました。 tclsh for {set X 0}

    {$X < 100} {incr X} { ios_config "int lo $X" "ip add 1.$X.0.1 255.255.0.0" ios_config "router b 100" "net 1.$X.0.0 m 255.255.0.0" ios_config "int lo 2$X" "ip add 2.$X.0.1 255.255.0.0" ios_config "router b 100" "net 2.$X.0.0 m 255.255.0.0" ios_config "int lo 3$X" "ip add 3.$X.0.1 255.255.0.0" ios_config "router b 100" "net 3.$X.0.0 m 255.255.0.0" ios_config "int lo 4$X" "ip add 4.$X.0.1 255.255.0.0" ios_config "router b 100" "net 4.$X.0.0 m 255.255.0.0" ios_config "int lo 5$X" "ip add 5.$X.0.1 255.255.0.0" ios_config "router b 100" "net 5.$X.0.0 m 255.255.0.0" ios_config "int lo 6$X" "ip add 6.$X.0.1 255.255.0.0" ios_config "router b 100" "net 6.$X.0.0 m 255.255.0.0" ios_config "int lo 7$X" "ip add 7.$X.0.1 255.255.0.0" ios_config "router b 100" "net 7.$X.0.0 m 255.255.0.0" ios_config "int lo 8$X" "ip add 8.$X.0.1 255.255.0.0" ios_config "router b 100" "net 8.$X.0.0 m 255.255.0.0" ios_config "int lo 9$X" "ip add 9.$X.0.1 255.255.0.0" ios_config "router b 100" "net 9.$X.0.0 m 255.255.0.0" ios_config "int lo 10$X" "ip add 10.$X.0.1 255.255.0.0" ios_config "router b 100" "net 10.$X.0.0 m 255.255.0.0" } tclquit