今回はNSX-TのBGPとBFDの連携動作の検証証跡をまとめました。
概要
BGPとBFDの連携
下図のように、R1がR2からBGP経由で10.1.1.0/24を学習している状況で、R2のインタフェースに障害が発生したと仮定します。
この際、Holdtimeが経過するまで、R1のR2に対するBGPネイバーはアップし続けます。その結果、R1のルーティングテーブルにはR2からBGP経由で学習した10.1.1.0/24が残り続けます。
上記の問題を回避するには、BGPとBFDを連携させ、BFDネイバーがダウンした際に、BGPネイバーも一緒にダウンさせる必要があります。
BFDは1秒未満での障害検出が可能なため、障害発生後、即座にBGPネイバーをダウンさせ、ルーティングテーブルから該当するルート情報を削除することが可能です。
検証結果
検証内容、構成
Tier-0 GWのSRをAS 100、R2をAS 200として、EBGPネイバーを構築します。
Tier-0 GWのSRとR2間でBFDネイバーを構築します。そして、BFDネイバーがダウンした際に、EBGPネイバーを即座にダウンさせます。
ネットワーク機器のCLIの設定
interface GigabitEthernet2
ip address 20.1.1.100 255.255.255.0
bfd interval 500 min_rx 500 multiplier 3
!
router bgp 200
bgp router-id 2.2.2.2
neighbor 20.1.1.1 remote-as 100
neighbor 20.1.1.1 fall-over bfd
BGPの設定
BFDを使用してBGPネイバーの死活を監視するために、BGPネイバーに対してBFDを有効にします。また、BFDパケットの送信間隔、何回連続でBFDパケットを受信できない場合にBFDネイバーがダウンしたと判断するか、を指定します。
正常時の状態確認
Tier-0 GWのSRにおいて、R2とのBFDネイバーがアップしていることが確認できます。
edge1(tier0_sr)> get bfd-sessions
BFD Session
Dest_port : 3784
Diag : No Diagnostic
Encap : vlan
Forwarding : last true (current true)
Interface : 8d96d39b-ff32-48d8-9857-52d660fff25b
Keep-down : false
Last_cp_diag : No Diagnostic
Last_cp_rmt_diag : No Diagnostic
Last_cp_rmt_state : up
Last_cp_state : up
Last_fwd_state : UP
Last_local_down_diag : No Diagnostic
Last_remote_down_diag : No Diagnostic
Last_up_time : 2020-08-21 13:23:46
Local_address : 20.1.1.1
Local_discr : 2736811217
Min_rx_ttl : 255
Multiplier : 3
Received_remote_diag : No Diagnostic
Received_remote_state : up
Remote_address : 20.1.1.100
Remote_admin_down : false
Remote_diag : No Diagnostic
Remote_discr : 4097
Remote_min_rx_interval : 500
Remote_min_tx_interval : 500
Remote_multiplier : 3
Remote_state : up
Router : e75612f1-c47a-497f-b747-692d2c1071c2
Router_down : false
Rx_cfg_min : 500
Rx_interval : 500
Service-link : false
Session_type : LR_PORT
State : up
Tx_cfg_min : 500
Tx_interval : 500
Tier-0 GWのSRにおいて、R2とのBGPネイバーにBFDネイバーの状態が関連付けられていることが確認できます。しかし、BFDパケットの送受信間隔が300ミリ秒と表示されています。(設定値やget bfd-sessionsコマンドの出力は500ミリ秒になっています。)
edge1(tier0_sr)> get bgp neighbor
BGP neighbor is 20.1.1.100, remote AS 200, local AS 100, external link
BGP version 4, remote router ID 2.2.2.2, local router ID 20.1.1.1
BGP state = Established, up for 00:23:28
Last read 00:00:02, Last write 00:00:28
Hold time is 180, keepalive interval is 30 seconds
Configured hold time is 180, keepalive interval is 30 seconds
.
<一部省略>
.
Local host: 20.1.1.1, Local port: 42159
Foreign host: 20.1.1.100, Foreign port: 179
Nexthop: 20.1.1.1
Nexthop global: ::
Nexthop local: ::
BGP connection: shared network
BGP Connect Retry Timer in Seconds: 10
Estimated round trip time: 1 ms
Read thread: on Write thread: on
BFD: Type: single hop
Detect Multiplier: 3, Min Rx interval: 300, Min Tx interval: 300
Status: Up, Last update: 0:00:20:35
以下はTier-0 GWのSRが送信したBFDパケットのみをキャプチャした結果になります。Tier-0 GWのSRは500ミリ秒間隔でBFDパケットを送信していることが確認できます。
R2のインタフェース障害後の状態確認
R2のインタフェースをダウンさせます。
Tier-0 GWのSRにおいて、R2とのBFDネイバーがダウンしていることが確認できます。
edge1(tier0_sr)> get bfd-sessions
BFD Session
Dest_port : 3784
Diag : Control Detection Time Expired
Encap : vlan
Forwarding : last false (current false)
Interface : 8d96d39b-ff32-48d8-9857-52d660fff25b
Keep-down : false
Last_cp_diag : Control Detection Time Expired
Last_cp_rmt_diag : No Diagnostic
Last_cp_rmt_state : up
Last_cp_state : down
Last_down_time : 2020-08-22 11:26:28
Last_fwd_state : DOWN
Last_local_down_diag : Control Detection Time Expired
Last_remote_down_diag : No Diagnostic
Last_up_time : 2020-08-22 11:23:03
Local_address : 20.1.1.1
Local_discr : 3750106795
Min_rx_ttl : 255
Multiplier : 3
Received_remote_diag : No Diagnostic
Received_remote_state : up
Remote_address : 20.1.1.100
Remote_admin_down : false
Remote_diag : No Diagnostic
Remote_discr : 0
Remote_min_rx_interval : 0
Remote_min_tx_interval : 1
Remote_multiplier : 3
Remote_state : down
Router : e75612f1-c47a-497f-b747-692d2c1071c2
Router_down : false
Rx_cfg_min : 500
Rx_interval : 500
Service-link : false
Session_type : LR_PORT
State : down
Tx_cfg_min : 500
Tx_interval : 1000
Tier-0 GWのSRにおいて、R2とのBFDネイバーのダウンに伴い、R2とのBGPネイバーもダウンしたことが確認できます。(Connectはネイバーの確立を試みている状態になります。)
edge1(tier0_sr)> get bgp neighbor
BGP neighbor is 20.1.1.100, remote AS 200, local AS 100, external link
BGP version 4, remote router ID 0.0.0.0, local router ID 20.1.1.1
BGP state = Connect
Last read 00:00:24, Last write 00:00:13
Hold time is 180, keepalive interval is 30 seconds
Configured hold time is 180, keepalive interval is 30 seconds
.
<一部省略>
.
BGP Connect Retry Timer in Seconds: 10
Next connect timer due in 2 seconds
Read thread: off Write thread: off
BFD: Type: single hop
Detect Multiplier: 3, Min Rx interval: 300, Min Tx interval: 300
Status: Down, Last update: 0:00:00:08
コメント