ネットワークの冗長構成において、BGPとBFDを組み合わせることで障害検知の高速化と迅速な経路切り替えを実現できます。
BGP単体では障害検知に数十秒〜数分かかる場合がありますが、BFDと連携することでその時間を大幅に短縮することが可能です。
この記事では、BGPとBFDの組み合わせの意味・仕組み・設定方法・高速切り替えの実現方法についてわかりやすく解説していきます。
ネットワークの可用性向上に取り組むエンジニアの方やBGP with BFDの設定を学びたい方にぜひ参考にしていただきたい内容です。
BGPとBFDの組み合わせとは「BFDによる高速障害検知でBGPの切り替えを迅速化する仕組み」のこと
それではまず、BGPとBFDの組み合わせとはどういうことかについて解説していきます。
BGP with BFDとは、BFD(Bidirectional Forwarding Detection)の高速な障害検知機能をBGPセッションに連携させることで、障害発生時の経路切り替えを迅速に行う仕組みのことです。
BGP単体ではKEEPALIVEタイマーとHold Timeによって障害を検知しますが、デフォルト設定では検知までに最大90秒かかることがあります。
BFDを組み合わせることで障害検知時間をミリ秒単位に短縮でき、ネットワークの可用性を大幅に向上させることができます。
BGP with BFDとは:
BFDの高速障害検知をBGPセッションに連携させる仕組み。
BGP単体では最大90秒かかる障害検知をミリ秒単位に短縮し、高速な経路切り替えを実現する。
BGP単体の障害検知の仕組みと課題
BGPはKEEPALIVEメッセージとHold Timeを使ってセッションの死活監視を行います。
デフォルトではKEEPALIVEが60秒間隔・Hold Timeが180秒に設定されているため、障害発生から検知まで最大180秒かかる可能性があります。
タイマーを短縮する方法もありますが、タイマーを短くしすぎるとKEEPALIVEの処理負荷が増加しルーターのCPUに影響が出るリスクがあります。
この課題を解決するのがBFDとの連携であり、BGPのタイマー設定に依存せず高速な障害検知が実現できます。
BFDとは何か
BFD(Bidirectional Forwarding Detection)とは、2つのネットワーク機器間のフォワーディングパスの障害を高速に検知するためのプロトコルです。
RFC 5880で標準化されており、ミリ秒単位の間隔でHelloパケットを送受信することで、リンク障害やネクストホップの障害を素早く検出します。
BFDはBGP・OSPF・ISISなど複数のルーティングプロトコルと連携できる汎用的な障害検知の仕組みとして設計されています。
軽量な設計のため、ルーターのCPU負荷を抑えながら高速な死活監視を実現できます。
BGPとBFDを組み合わせた仕組みと動作を確認しよう
続いては、BGPとBFDを組み合わせた際の具体的な仕組みと動作フローを確認していきます。
| 比較項目 | BGP単体 | BGP with BFD |
|---|---|---|
| 障害検知時間 | 最大180秒(デフォルト) | ミリ秒〜数秒 |
| 検知方法 | KEEPALIVEタイマー | BFDのHelloパケット |
| CPU負荷 | タイマー短縮で増加 | BFDで分担するため低負荷 |
| 切り替え速度 | 遅い | 高速 |
| 設定の複雑さ | シンプル | やや複雑(BFD設定が追加) |
BFDセッション確立の仕組み
BGP with BFDでは、BGPセッションの確立に加えてBFDセッションを別途確立します。
BFDセッションはBGPネイバーのIPアドレスを対象に確立され、設定されたタイマー間隔でHelloパケットを双方向に送受信することでフォワーディングパスの状態を監視します。
BFDのタイマーはMinimum Transmit Interval(送信間隔)・Minimum Receive Interval(受信間隔)・Detect Multiplier(検知倍率)の3つのパラメータで制御されます。
検知時間はおおよそ「送受信間隔 × Detect Multiplier」で計算されます。
障害検知から経路切り替えまでの流れ
BFDがフォワーディングパスの障害を検知すると、即座にBGPセッションに障害通知が行われます。
BGP with BFD の障害検知から切り替えまでの流れ:
①BFDがHelloパケットの途絶を検知(ミリ秒〜数秒)
②BFDからBGPへ障害通知(セッションDown通知)
③BGPがネイバーセッションをDownと判断
④代替経路へのフェイルオーバーを実行
この流れにより、BGPのKEEPALIVEタイマーを待たずに高速な経路切り替えが実現されます。
特にデュアルホーム構成や冗長リンクを持つネットワークでは、BFDとの連携が可用性向上に大きく貢献します。
BFDのモードの種類
BFDにはAsynchronousモードとDemandモードという2つの動作モードがあります。
一般的に使われるのはAsynchronousモードで、両端のルーターが定期的にHelloパケットを送り合うことで双方向の死活監視を行います。
Demandモードは確認が必要なときだけパケットを送る方式で、帯域節約が求められる場面で使われることがあります。
BGPとの連携では通常Asynchronousモードが使用されます。
BGP with BFDの設定方法
続いては、BGP with BFDの具体的な設定方法を確認していきます。
CiscoルーターとJuniperルーターを例に設定手順を解説します。
CiscoルーターでのBGP with BFD設定
CiscoルーターでBGPとBFDを連携させるには、BGPネイバーの設定にBFDを有効化するコマンドを追加します。
CiscoルーターのBGP with BFD設定例:
router bgp 65001
neighbor 192.168.1.2 remote-as 65002
neighbor 192.168.1.2 fall-over bfd
!
interface GigabitEthernet0/0
bfd interval 300 min_rx 300 multiplier 3
neighbor fall-over bfdコマンドを追加することで、対象ネイバーへのBFDセッションが自動的に確立されます。
bfd intervalコマンドでは送信間隔・受信間隔(ミリ秒)とDetect Multiplierを設定します。
上記の例では300ms×3=最大900msで障害を検知する設定になります。
JuniperルーターでのBGP with BFD設定
JuniperルーターではBGPのネイバー設定の中にBFDのパラメータを記述します。
JuniperルーターのBGP with BFD設定例:
protocols {
bgp {
group EBGP {
neighbor 192.168.1.2 {
bfd-liveness-detection {
minimum-interval 300;
multiplier 3;
}
}
}
}
}
minimum-intervalでHelloパケットの送受信間隔をミリ秒単位で指定し、multiplierで何回連続して受信できなければ障害と判断するかを設定します。
JuniperではBFDの設定をネイバーごとに細かく制御できるため、重要度の高いネイバーにはより短いタイマーを設定する運用が可能です。
BFD設定時の注意点
BFDのタイマーを短く設定するほど障害検知は高速になりますが、パケット送受信の頻度が増えるためネットワーク帯域とルーターのCPU負荷への影響を考慮する必要があります。
一般的には最小間隔300ms・Multiplier 3程度が実用的なバランスとして使われることが多いでしょう。
また、BFDセッションは両端のルーターで設定が一致している必要があるため、ネイバールーター側の設定も合わせて確認することが重要です。
設定後はshow bfd neighborsなどのコマンドでBFDセッションの状態を確認し、正常に確立されていることを検証しましょう。
まとめ
この記事では、BGPとBFDの組み合わせの意味・仕組み・障害検知の流れ・具体的な設定方法について解説しました。
BGP with BFDとは、BFDの高速障害検知をBGPセッションに連携させることで、障害検知時間をミリ秒単位に短縮し高速な経路切り替えを実現する仕組みです。
BGP単体の最大180秒という検知時間の課題をBFDが補完することで、ネットワークの可用性を大幅に向上させることができます。
Ciscoではfall-over bfdコマンド、Juniperではbfd-liveness-detectionの設定でBGPとBFDの連携が実現できます。
BGP with BFDの仕組みと設定をしっかり理解して、高可用性ネットワークの構築にぜひ役立てていただければ幸いです。