Using multiple members per SD-WAN neighbor configuration
SD-WAN BGP neighbor configurations are used to define the SLA health check in which an SD-WAN member must meet to qualify as being up. When the SD-WAN member meets the SLA threshold, the FortiGate will apply the route map defined in the BGP neighbor's route-map-out-preferable
option. If the SD-WAN member fails to meet the SLA, the FortiGate will apply the route map defined in the BGP neighbor's route-map-out
option instead. This allows the FortiGate to advertise the health of the SD-WAN member to its BGP neighbor by advertising different community strings based on its SLA status.
For more information, refer to the following BGP examples: Controlling traffic with BGP route mapping and service rules and Applying BGP route-map to multiple BGP neighbors. |
Selecting multiple SD-WAN members allows the SD-WAN neighbor feature to support topologies where there are multiple SD-WAN overlays and/or underlays to a neighbor. The minimum-sla-meet-members
option is used to configure the minimum number of members that must be in an SLA per neighbor for the preferable route map to be used.
config system sdwan config neighbor edit <ip> set member {<seq-num_1>} [<seq-num_2>] ... [<seq-num_n>] set minimum-sla-meet-members <integer> next end end
member {<seq-num_1>} [<seq-num_2>] ... [<seq-num_n>] |
Enter the member sequence number list. Multiple members can be defined. |
minimum-sla-meet-members <integer> |
Set the minimum number of members that meet SLA when the neighbor is preferred (1 - 255, default = 1).
|
Example
In the following example, the spoke FortiGate has four tunnels: two tunnels to Hub_1 and two tunnels to Hub_2. The spoke has two BGP neighbors: one to Hub_1 and one to Hub-2. BGP neighbors are established on loopback IPs.
The SD-WAN neighbor plus route-map-out-preferable
configuration is deployed on the spoke to achieve the following:
- If any tunnel to Hub_1 or Hub_2 is in SLA, the preferable route map will be applied on the BGP neighbor to Hub_1 or Hub_2.
- If both tunnels to Hub_1 or Hub_2 are out of SLA, the default route map will be applied on the BGP neighbor to Hub_1 or Hub_2.
The preferable route map and default route map are used to set different custom BGP communities as the spoke advertises its LAN routes to the hub. Each hub can translate communities into different BGP MED or AS prepends and signal them to the external peers to manipulate inbound traffic, thereby routing traffic to the spoke only when the SLAs are met on at least one of two VPN overlays. In this example, community string 10:1 signals to the neighbor that SLAs are met, and 10:2 signals that SLAs are not met.
To configure the BGP route maps and neighbors:
- Configure an access list of prefixes to be matched:
config router access-list edit "net10" config rule edit 1 set prefix 10.0.3.0 255.255.255.0 next end next end
- Configure route maps for neighbors in SLA (preferable) and out of SLA (default):
config router route-map edit "in_sla" config rule edit 1 set match-ip-address "net10" set set-community "10:1" next end next edit "out_sla" config rule edit 1 set match-ip-address "net10" set set-community "10:2" next end next end
- Configure the BGP neighbors:
config router bgp set router-id 172.31.0.65 config neighbor edit "172.31.0.1" set route-map-out "out_sla" set route-map-out-preferable "in_sla" set update-source "Loopback0" next edit "172.31.0.2" set route-map-out "out_sla" set route-map-out-preferable "in_sla" set update-source "Loopback0" next end config network edit 1 set prefix 10.0.3.0 255.255.255.0 next end end
To configure SD-WAN:
- Configure the SD-WAN members:
config system sdwan set status enable config members edit 1 set interface "H1_T11" set source 172.31.0.65 next edit 4 set interface "H1_T22" set source 172.31.0.65 next edit 6 set interface "H2_T11" set source 172.31.0.65 next edit 9 set interface "H2_T22" set source 172.31.0.65 next end end
- Configure the health check that must be met:
config system sdwan config health-check edit "HUB" set server "172.31.100.100" set members 0 config sla edit 1 set link-cost-factor latency set latency-threshold 100 next end next end end
- Configure the SD-WAN neighbors:
config system sdwan config neighbor edit "172.31.0.1" set member 1 4 set health-check "HUB" set sla-id 1 set minimum-sla-meet-members 1 next edit "172.31.0.2" set member 6 9 set health-check "HUB" set sla-id 1 set minimum-sla-meet-members 1 next end end
To verify that when two members to Hub_1/Hub_2 are in SLA, the preferable route map is be applied on BGP neighbors to Hub_1/Hub_2:
Branch1_A_FGT (root) # diagnose sys sdwan health-check Health Check(HUB): Seq(1 H1_T11): state(alive), packet-loss(0.000%) latency(0.209), jitter(0.017), mos(4.404), bandwidth-up(999999), bandwidth-dw(999999), bandwidth-bi(1999998) sla_map=0x1 Seq(4 H1_T22): state(alive), packet-loss(0.000%) latency(0.171), jitter(0.004), mos(4.404), bandwidth-up(999999), bandwidth-dw(999998), bandwidth-bi(1999997) sla_map=0x1 Seq(6 H2_T11): state(alive), packet-loss(0.000%) latency(0.175), jitter(0.014), mos(4.404), bandwidth-up(999999), bandwidth-dw(999999), bandwidth-bi(1999998) sla_map=0x1 Seq(9 H2_T22): state(alive), packet-loss(0.000%) latency(0.176), jitter(0.019), mos(4.404), bandwidth-up(999999), bandwidth-dw(999998), bandwidth-bi(1999997) sla_map=0x1
# diagnose sys sdwan neighbor Neighbor(172.31.0.1): member(1 4 )role(standalone) Health-check(HUB:1) sla-pass selected alive Neighbor(172.31.0.2): member(6 9 )role(standalone) Health-check(HUB:1) sla-pass selected alive
On Hub_1 and Hub_2, the expected communities have been attached into the spoke's LAN route:
Hub_1_FGT (root) # get router info bgp network 10.0.3.0/24 VRF 0 BGP routing table entry for 10.0.3.0/24 Paths: (1 available, best #1, table Default-IP-Routing-Table) Not advertised to any peer Original VRF 0 Local, (Received from a RR-client) 172.31.0.65 from 172.31.0.65 (172.31.0.65) Origin IGP metric 0, localpref 100, valid, internal, best Community: 10:1 Last update: Wed Dec 29 22:38:29 2021
Hub_2_FGT (root) # get router info bgp network 10.0.3.0/24 VRF 0 BGP routing table entry for 10.0.3.0/24 Paths: (1 available, best #1, table Default-IP-Routing-Table) Not advertised to any peer Original VRF 0 Local, (Received from a RR-client) 172.31.0.65 from 172.31.0.65 (172.31.0.65) Origin IGP metric 0, localpref 100, valid, internal, best Community: 10:1 Last update: Wed Dec 29 22:43:10 2021
If one member for each neighbor becomes out of SLA, the preferable route map is still applied:
Branch1_A_FGT (root) # diagnose sys sdwan health-check Health Check(HUB): Seq(1 H1_T11): state(alive), packet-loss(0.000%) latency(120.207), jitter(0.018), mos(4.338), bandwidth-up(999999), bandwidth-dw(999997), bandwidth-bi(1999996) sla_map=0x0 Seq(4 H1_T22): state(alive), packet-loss(0.000%) latency(0.182), jitter(0.008), mos(4.404), bandwidth-up(999999), bandwidth-dw(999998), bandwidth-bi(1999997) sla_map=0x1 Seq(6 H2_T11): state(alive), packet-loss(0.000%) latency(120.102), jitter(0.009), mos(4.404), bandwidth-up(999999), bandwidth-dw(999998), bandwidth-bi(1999997) sla_map=0x0 Seq(9 H2_T22): state(alive), packet-loss(0.000%) latency(0.176), jitter(0.009), mos(4.404), bandwidth-up(999999), bandwidth-dw(999997), bandwidth-bi(1999996) sla_map=0x1
# diagnose sys sdwan neighbor Neighbor(172.31.0.1): member(1 4 )role(standalone) Health-check(HUB:1) sla-pass selected alive Neighbor(172.31.0.2): member(6 9 )role(standalone) Health-check(HUB:1) sla-pass selected alive
Hub_1_FGT (root) # get router info bgp network 10.0.3.0/24 VRF 0 BGP routing table entry for 10.0.3.0/24 Paths: (1 available, best #1, table Default-IP-Routing-Table) Not advertised to any peer Original VRF 0 Local, (Received from a RR-client) 172.31.0.65 from 172.31.0.65 (172.31.0.65) Origin IGP metric 0, localpref 100, valid, internal, best Community: 10:1 Last update: Thu Dec 30 10:44:47 2021
Hub_2_FGT (root) # get router info bgp network 10.0.3.0/24 VRF 0 BGP routing table entry for 10.0.3.0/24 Paths: (1 available, best #1, table Default-IP-Routing-Table) Not advertised to any peer Original VRF 0 Local, (Received from a RR-client) 172.31.0.65 from 172.31.0.65 (172.31.0.65) Origin IGP metric 0, localpref 100, valid, internal, best Community: 10:1 Last update: Wed Dec 29 22:43:10 2021
If both members for Hub_1 become out of SLA, the default route map is applied:
Branch1_A_FGT (root) # diagnose sys sdwan health-check Health Check(HUB): Seq(1 H1_T11): state(alive), packet-loss(0.000%) latency(120.194), jitter(0.018), mos(4.338), bandwidth-up(999999), bandwidth-dw(999997), bandwidth-bi(1999996) sla_map=0x0 Seq(4 H1_T22): state(alive), packet-loss(0.000%) latency(120.167), jitter(0.006), mos(4.338), bandwidth-up(999999), bandwidth-dw(999998), bandwidth-bi(1999997) sla_map=0x0 Seq(6 H2_T11): state(alive), packet-loss(0.000%) latency(120.180), jitter(0.012), mos(4.338), bandwidth-up(999999), bandwidth-dw(999998), bandwidth-bi(1999997) sla_map=0x0 Seq(9 H2_T22): state(alive), packet-loss(0.000%) latency(0.170), jitter(0.005), mos(4.404), bandwidth-up(999999), bandwidth-dw(999997), bandwidth-bi(1999996) sla_map=0x1
# diagnose sys sdwan neighbor Neighbor(172.31.0.1): member(1 4 )role(standalone) Health-check(HUB:1) sla-fail alive Neighbor(172.31.0.2): member(6 9 )role(standalone) Health-check(HUB:1) sla-pass selected alive
Hub_1_FGT (root) # get router info bgp network 10.0.3.0/24 VRF 0 BGP routing table entry for 10.0.3.0/24 Paths: (1 available, best #1, table Default-IP-Routing-Table) Not advertised to any peer Original VRF 0 Local, (Received from a RR-client) 172.31.0.65 from 172.31.0.65 (172.31.0.65) Origin IGP metric 0, localpref 100, valid, internal, best Community: 10:2 Last update: Thu Dec 30 10:57:33 2021
Hub_2_FGT (root) # get router info bgp network 10.0.3.0/24 VRF 0 BGP routing table entry for 10.0.3.0/24 Paths: (1 available, best #1, table Default-IP-Routing-Table) Not advertised to any peer Original VRF 0 Local, (Received from a RR-client) 172.31.0.65 from 172.31.0.65 (172.31.0.65) Origin IGP metric 0, localpref 100, valid, internal, best Community: 10:1 Last update: Wed Dec 29 22:43:10 2021