BFD
Bidirectional Forwarding Detection (BFD) is a protocol that you can use to quickly locate hardware failures in the network. Routers running BFD send packets to each other at a negotiated rate. If packets from a BFD-enabled router fail to arrive, that router is declared to be down. BFD communicates this information to the associated routing protocols and the routing information is updated. It helps detect one way device failure and is used for fast convergence of routing protocols.
BFD can run on an entire FortiGate, selected interfaces, or on a protocol, such as BGP, for all configured interfaces. The configuration hierarchy allows each lower level to override the BFD setting of the upper level. For example, if you enable BFD for an entire FortiGate, you can disable BFD for an interface or for BGP.
Echo mode and authentication are not supported for BFD on the FortiGate. |
BFD can be enabled per device, VDOM, or interface. Once enabled, a BFD neighbor should be defined. Finally, enable BFD on a route or routing protocol.
To configure BFD for an entire FortiGate:
config system settings set bfd {enable | disable} set bfd-desired-min-tx <ms> set bfd-required-min-rx <ms> set bfd-detect-mult <multiplier> set bfd-dont-enforce-src-port {enable | disable} end
To configure BFD for an interface:
config system interface edit <interface-name> set bfd {global | enable | disable} set bfd-desired-min-tx <ms> set bfd-required-min-rx <ms> set bfd-detect-mult <multiplier> next end
To configure BFD neighbors:
config router {bfd | bfd6} config neighbor edit <IP-address> set interface <interface-name> next end end
To show BFD neighbors:
# get router {info | info6} bfd neighbor
To show BFD requests:
# get router {info | info6} bfd requests
BFD and static routes
BFD for static routes allows you to configure routing failover based on remote path failure detection. BFD removes a static route from the routing table if the FortiGate can't reach the route's destination and returns the route to the routing table if the route's destination is restored.
For example, you can add two static routes with BFD enabled. If one of the routes has a higher priority, all matching traffic uses that route. If BFD determines that the link to the gateway of the route with the higher priority is down, the higher priority route is removed from the routing table and all matching traffic uses the lower priority route. If the link to the gateway for the higher priority route comes back up, BFD adds the route back into the routing table and all matching traffic switches to use the higher priority route.
You can configure BFD for IPv4 and IPv6 static routes.
To configure BFD for static routes:
config router {static | static6} edit <sequence-number> set bfd {enable | disable} set device <gateway-out-interface> next end
Example
The following example demonstrates the configuration of static routes between two FortiGates. There is a host behind FortiGate 2 with an IP address of 1.1.1.1. FortiGate 1 has multiple paths to reach the host.
To configure static routes:
-
Configure FortiGate 1:
config system interface edit "port1" set vdom "root" set ip 10.180.6.237 255.255.240.0 set allowaccess ping set bfd enable next end config router bfd config neighbor edit 10.180.4.136 set interface "port1" next end end
-
Configure FortiGate 2:
config system interface edit "port1" set vdom "root" set ip 10.180.4.136 255.255.240.0 set allowaccess ping set bfd enable next end config router bfd config neighbor edit 10.180.6.237 set interface "port1" next end end
-
Configure two static routes:
config router static edit 2 set dst 1.1.1.1 255.255.255.255 set gateway 10.180.4.136 set device "port1" set bfd enable next edit 3 set dst 1.1.1.1 255.255.255.255 set gateway 10.180.2.44 set distance 20 set device "port1" next end
-
Confirm that BFD neighborship is established:
# get router info bfd neighbor OurAddress NeighAddress State Interface LDesc/RDesc 10.180.6.237 10.180.4.136 UP port1 1/1
-
Review the active route in the routing table:
# get router info routing-table all S 1.1.1.1/32 [10/0] via 10.180.4.136, port1 C 10.180.0.0/20 is directly connected, port1
The route with the lower distance is preferred in the routing table.
If port1 on FortiGate 2 goes down or FortiGate 1 is unable to reach 10.180.4.126, the BFD neighborship will go down.
# get router info bfd neighbor OurAddress NeighAddress State Interface LDesc/RDesc 10.180.6.237 10.180.4.136 DOWN port1 1/1
With BFD neighborship down, the FortiGate is unable to reach 1.1.1.1/32 through gateway 10.180.4.136. The routing table will be updated so that the route through gateway 10.180.2.44 is active in the routing table.
# get router info routing-table all S 1.1.1.1/32 [20/0] via 10.180.2.44, port1 C 10.180.0.0/20 is directly connected, port1
BFD removes a static route from the routing table if the FortiGate cannot reach the route's destination. The static route will be returned to the routing table is the route's destination is restored.
BFD and OSPF
You can configure BFD for Open Shortest Path First (OSPF) on a FortiGate. FortiGate supports BFD for OSPF for both IPv4 and IPv6. BFD must be configured globally and per interface.
To configure BFD for OSPF:
config router {ospf | ospf6} set bfd {enable | disable} end
To enable BFD on a specific OSPF interface:
config router {ospf | ospf6} set bfd enable config {ospf-interface | ospf6-interface} edit <ID> set bfd {global | enable | disable} set interface <interface-name> set area-id <IP address> next end end
If BFD is configured when OSPF is not, no BFD packets will be sent. When both BFD and OSFP are configured, the neighbors for both will be the same. Use the following commands to confirm that the neighbor IP addresses match:
# get router info ospf neighbor # get router info bfd neighbor
BFD and BGP
While BGP can detect route failures, BFD can be configured to detect these failures more quickly, which allows for faster responses and improved convergence. This can be balanced with the bandwidth BFD uses in its frequent route checking.
The config router bgp
commands allow you to set the addresses of the neighbor units that are also running BFD. Both units must be configured with BFD in order to use it.
To configure BFD for BGP:
config router bgp config neighbor edit <neighbor-IP-address> set bfd {enable | disable} set remote-as <integer> next end end
Troubleshooting BFD
You can troubleshoot BFD using the following commands:
# get router {info | info6} bfd neighbor # get router {info | info6} bfd requests # diagnose sniffer packet any <filter> <sniffer count> # diagnose debug application bfdd <debug level> # diagnose debug enable