BFD(Bidirectional Forwarding Detection)を確認
下記参考URLによると、BFDはネットワーク障害を検出するために利用されるらしい。通常は、OSPFやBGPのような動的ルーティングプロトコルと組み合わせて使用されるが、本稿では、BFD単独動作を確認する。
参考URL
- BFDとは? わかりやすく10分で解説
- BFD ( Bidirectional Forwarding Detection )
- BFD 【Bidirectional Forwarding Detection】 双方向フォワーディング検出
手法
GNS3 IOS(失敗)
GNS3上で2台のルーターを接続して、BFDパケットを確認するのが最も早いと考えたが、小生環境では、BFD関連コマンドは存在するものの、BFDパケットが送出されず、断念。
1台のLinuxでNetwork Namespace利用(失敗)
オープンソースのルーティングプロトコルであり、BFDをサポートしている、FRRouting(以降「frr」と略すことあり)を利用して、1台のLinuxにて、2つのNetwork Namespaceに擬似ルーターを設けて実現しようとした。が、2つのNetwork Namespaceにて、環境ファイルが適切に制御できず、こちらも断念。
2台のLinuxにてFRRouting利用(当然成功)
結局のところ、2台のLinuxにて、擬似ルーターを設けて、FRRoutingを利用するという無難な方法を選択することとした。ここでは、WiresharkでのパケットCaptureがしやすいGNS3上の2つのVM(debian)を利用。
ネットワーク環境
環境は下記、擬似ルーターR1とR2(いずれもdebian)を接続する単純なもの。
なお、debianは、GNS3 Applianceにあるものを利用。初期状態では、FRRoutingはインストールされていないため、上図にあるNAT1(インターネットへの接続あり)を一時的にR1やR2に接続して、「sudo apt install frr」などを実施してインストール。
設定
R1およびR2におけるfrrの設定である。
BFD
まずは、R1の設定。
root@debian:/etc/frr# cat /etc/frr/frr.conf
frr version 8.4.4
frr defaults traditional
hostname debian
log syslog informational
no ipv6 forwarding
service integrated-vtysh-config
!
bfd
peer 172.16.1.2
receive-interval 3000
echo transmit-interval 3000
echo receive-interval 3000
exit
!
exit
!
R2の設定。
root@debian:/etc/frr# cat frr.conf
frr version 8.4.4
frr defaults traditional
hostname debian
log syslog informational
no ipv6 forwarding
service integrated-vtysh-config
!
bfd
peer 172.16.1.1
receive-interval 3000
echo transmit-interval 3000
echo receive-interval 3000
exit
!
exit
!
frrデーモン
R1とR2とに共通。
root@debian:/etc/frr# cat /etc/frr/daemons
# This file tells the frr package which daemons to start.
(略)
bfdd=yes
bfdd_options=" -A 127.0.0.1"
(略)
検証
Wiresharkで取得したデータやコマンドによるステータスを紹介。
正常系
定期的にBFDパケット(UDP、ポート3784)が送出されている。
パケット詳細を確認すると、「Session State: Up」が見える。
BFDステータスをコマンドで確認。
$ sudo vtysh
Hello, this is FRRouting (version 8.4.4).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
...
debian# show bfd peers
BFD Peers:
peer 172.16.1.2 vrf default
ID: 2299493673
Remote ID: 2299493673
Active mode
Status: up
Uptime: 13 minute(s), 49 second(s)
Diagnostics: ok
Remote diagnostics: ok
Peer Type: configured
RTT min/avg/max: 0/0/0 usec
Local timers:
Detect-multiplier: 3
Receive interval: 3000ms
Transmission interval: 300ms
Echo receive interval: 3000ms
Echo transmission interval: disabled
Remote timers:
Detect-multiplier: 3
Receive interval: 3000ms
Transmission interval: 300ms
Echo receive interval: 3000ms
debian# show bfd peers counters
BFD Peers:
peer 172.16.1.2 vrf default
Control packet input: 344 packets
Control packet output: 344 packets
Echo packet input: 0 packets
Echo packet output: 0 packets
Session up events: 1
Session down events: 0
Zebra notifications: 1
「Status: up」が見える。
異常系
片方のネットワークI/Fをダウンさせる。
$ sudo ip link set dev ens4 down
パケット詳細を確認すると、「Session State: Down」が見える。
こちらでも、BFDステータスをコマンドで確認する。
debian# show bfd peers
BFD Peers:
peer 172.16.1.2 vrf default
ID: 2299493673
Remote ID: 0
Active mode
Status: down
Downtime: 14 second(s)
Diagnostics: control detection time expired
Remote diagnostics: ok
Peer Type: configured
RTT min/avg/max: 0/0/0 usec
Local timers:
Detect-multiplier: 3
Receive interval: 3000ms
Transmission interval: 300ms
Echo receive interval: 3000ms
Echo transmission interval: disabled
Remote timers:
Detect-multiplier: 3
Receive interval: 3000ms
Transmission interval: 300ms
Echo receive interval: 3000ms
debian#
debian# show bfd peers counters
BFD Peers:
peer 172.16.1.2 vrf default
Control packet input: 420 packets
Control packet output: 445 packets
Echo packet input: 0 packets
Echo packet output: 0 packets
Session up events: 1
Session down events: 1
Zebra notifications: 2
「Status: down」、「Session down events: 1」が確認できる。
EOF




