T Techclick ← All lessons
Fortinet · FortiGate · Interactive lesson

SD-WAN SLA measure then steer

Ticket: both ISPs are up, Teams still sits on the jittery circuit. A Performance SLA is a probe, not a path. FortiGate measures latency, jitter and loss on each member, then an explicit application rule steers the app. Traffic that misses every rule hits the implicit catch-all. Lab: zone virtual-wan-link, wan1 203.0.113.1 cost 10, wan2 198.51.100.1 cost 5, health-check Office365.

16 min read · L2 primary · Quiz at end

After this page you can

Lessons · SD-WAN SLA + strategies · SLA then steer

This page vs the strategy workbook

This lesson is measure the member, then put the app on an explicit rule. Manual / Best Quality / Lowest Cost / Maximize Bandwidth as a full choose-when table lives on the sibling page. Do not skip the implicit catch-all and then debug jitter on a path the rule never matched.

SD-WAN SLA + five strategies · Policy lookup + NAT · FortiGate interview

Hero · two members, one app, SLA decides who carries it
Branch FortiGate with two WAN pipes toward a SaaS cloud; SLA gauges on each underlay
Mood, not a wiring diagram. Exact path is in the SVG: LAN → zone virtual-wan-link → members wan1 / wan2 → Performance SLA scores each → explicit Office365 rule steers. A green interface is not an in-SLA path.
Quick answer

A member is one enrolled WAN or overlay inside the SD-WAN zone. A Performance SLA (config health-check) probes those members and marks each in-SLA or out-of-SLA against latency, jitter and packet-loss targets. It does not pick a path. An SD-WAN rule is first-match: identify the app (Internet Service / ISDB for first packet), then apply a strategy. Unmatched traffic hits the implicit rule. Lowest Cost (SLA) stays on the cheapest in-SLA member. Lab: wan1 203.0.113.1 cost 10, wan2 198.51.100.1 cost 5, health-check Office365, SLA 100 ms / 30 ms / 1% — not the shipped 5 / 5 / 0.

Why the ISP is up and Teams is still bad

Link-up is not path quality. wan1 can ARP its gateway and still carry 40 ms of jitter on the Teams media path. FortiOS only steers on the measurements you configured — protocol, server, participants, failtime, and the SLA target. A Performance SLA with no rule consuming it is a dashboard tile.

The classic ticket is first-match, not a bad circuit:

A health-check is not a steer

When a Performance SLA is inactive or out-of-SLA, FortiOS will not send that health-check’s steered traffic through the failing member. Traffic that never matched an SLA-aware rule still uses the implicit algorithm. Measure, then bind the app to a rule that reads those bits.

Members, SLA, then the rule

Pre-train these four words before you open Network > SD-WAN.

Zone

Logical bundle. Firewall policies and the default static route point here (default name virtual-wan-link). One policy, not one per ISP.

Member

One enrolled interface: wan1, wan2, or an IPsec overlay. Owns gateway, cost (0 = most preferred), and the sequence number used in priority-members.

Performance SLA

Active (or passive) probe per participant. Outputs latency, jitter, packet-loss, alive/dead, and bitmask sla_map. It does not steer by itself.

SD-WAN rule

First-match service: match source / dest / ISDB / app, then apply a strategy to eligible members. Miss every rule → implicit.

Flow 1 · members measured, rule steers the app
Branch FortiGate zone · virtual-wan-link Member 1 · wan1 cost 10 · 203.0.113.1 Member 2 · wan2 cost 5 · 198.51.100.1 SD-WAN rules first-match → strategy Implicit rule leftover · no app identity Health-check Office365 ping / http · members 1 2 latency · jitter · loss SLA target (tune) 100 ms / 30 ms / 1% shipped default 5 / 5 / 0 — too tight wan2 in-SLA cost 5 · selected for Office365 sla_map=0x1 wan1 out-of-SLA jitter above 30 ms sla_map=0x0 · skip Rule Office365 · Lowest Cost (SLA) · ISDB Microsoft-Office365 Reads sla_map. Cheapest in-SLA member = wan2. Session-sticky for the life of the flow. No match? Implicit load-balances. The SLA bits are ignored.

Read left → right. The zone is the container. Probes write in-SLA / out-of-SLA. The explicit rule consumes that bitmask. Implicit never looks at the Office365 health-check.

Say this out loud

The health-check measures. The rule steers. The implicit rule is the leftover bucket. A member that is alive but out-of-SLA is still a valid implicit hash target unless you bound that traffic to an SLA-aware rule.

ObjectLab valueIf missing
Zonevirtual-wan-linkPolicy and static route have nowhere to point. You write one policy per WAN — that is not SD-WAN.
Member 1wan1 · gw 203.0.113.1 · cost 10No underlay A. Cost 10 loses Lowest Cost (SLA) to wan2 when both are in-SLA.
Member 2wan2 · gw 198.51.100.1 · cost 5No cheaper DIA. Cost 0 is “most preferred,” not “free.”
Health-checkOffice365 · members 1 2 · server on the app pathNo sla_map. Lowest Cost (SLA) / Maximize Bandwidth cannot run.
SLA targetlatency 100 ms · jitter 30 ms · loss 1%Shipped defaults 5 / 5 / 0 mark internet DIA out-of-SLA all day.
Explicit ruleOffice365 · ISDB Microsoft-Office365 · mode slaApp hits implicit. SLA is a graph, not a path.
Firewall policylan → virtual-wan-link · NAT on DIASteering has no permit. SD-WAN is not a security policy.

Measure then steer

Order is the whole job. Skip the SLA and Lowest Cost (SLA) has nothing to read. Skip the explicit rule and the SLA has nobody to talk to.

Path · SLA diamond, then steer or skip
Decision diamond labeled SLA splitting traffic into a healthy steer path and a skip path
Feel of the branch: measure first, then pick the member. Exact gates — first-match, then strategy, then in-SLA — are in the next SVG. Artwork labels are not FortiOS field names.
Flow 2 · one Office 365 session through path select
LAN session 10.20.20.40 → O365 Rule match? ISDB / app first Implicit hash · ignore SLA In-SLA? sla_map on members Skip wan1 out-of-SLA · not used Lowest cost? among in-SLA wan2 cost 5 · selected Safe go-live: members → health-check → tune SLA → explicit ISDB rule above implicit → prove selected Lowest Cost (SLA) and Maximize Bandwidth (SLA) require an SLA target. Manual and Best Quality do not — they can ignore the probe you just built. ISDB (Internet Service) steers on the first packet. Application Control signatures classify late — first packets may already be on implicit. A dest-all rule above Office365 is a silent steal. Treat the SD-WAN rule list like a firewall policy.

Three ANDs for Office 365 on wan2: explicit rule matched, wan2 in-SLA, wan2 cheapest among in-SLA members. Miss the first AND and implicit owns the session.

Rules vs implicit · how to steer the app

SD-WAN rules are first-match, top down, same mental model as a firewall policy. The last row is not a rule you created — it is the implicit catch-all FortiOS always has.

ControlWhat it doesWhat it does not do
Explicit ruleMatches source / dest / Internet Service / application, then runs a strategy on the listed members.Does not permit traffic. The firewall policy lan → zone still has to allow it.
Implicit ruleEverything that matched nothing. Load-balances with the algorithm on the implicit rule (source-IP, sessions, spillover, …).Does not read your Office365 SLA. Does not know Teams from bulk download.
Internet Service (ISDB)First-packet identity from FortiGuard IP/port database. This is the reliable application-steering match.Not the same as Application Control signatures, which need bytes — and SSL inspection for HTTPS.
Lowest Cost (SLA)Among members that meet the required SLA target, pick the lowest cost. Session-sticky. Voice-safe.Does not re-rank a live call when jitter improves on the other WAN. That is Best Quality, and it will move the call.
Best QualityRe-ranks by a quality factor (latency / jitter / loss / …). SLA target optional.Unsafe for long-lived media. A “better” member mid-call is a glitch, not a win.
Maximize Bandwidth (SLA)Load-shares across all in-SLA members.Will split related flows. Do not use for a single Teams meeting.
ISDB first, signatures later

Fortinet’s application-steering examples bind business apps (Office 365, SIP) with Lowest Cost (SLA) and recreational apps with Best Quality. For first-packet steer, set Destination to the Internet Service (Microsoft-Office365, Microsoft-Teams). Application Control IDs on HTTPS without inspection classify after the session already egressed. Source: FortiOS Administration Guide — Dynamic application steering with lowest cost and best quality strategies.

Shipped SLA defaults are a lab accident on DIA

FortiOS SLA-target defaults are latency 5 ms, jitter 5 ms, packet-loss 0%. That is a metro Ethernet number, not an internet underlay. Lowest Cost (SLA) then sees both members out-of-SLA and you debug “SD-WAN is broken.” Tune per app — lab uses 100 / 30 / 1 for Office 365. Voice-like 80 / 30 / 1 is a design choice, not a shipped default.

Runbook Side A / B / C

Lab: LAN 10.20.20.0/24, zone virtual-wan-link, wan1 gw 203.0.113.1 cost 10, wan2 gw 198.51.100.1 cost 5, health-check Office365. HTTP/HTTPS DIA. Do not invent a third overlay on this page.

Side A — underlay, zone, policy

  1. Enroll the members

    Network > SD-WAN > SD-WAN Zones — enable SD-WAN, keep zone virtual-wan-link, add wan1 and wan2 with gateways and costs. CLI: config system sdwanconfig members. A member that is not in the zone is invisible to every rule.

  2. Default route + firewall policy

    Static default whose outgoing interface is the zone, not a single WAN. Policy: srcintf=landstintf=virtual-wan-link, NAT on, log all sessions. If clients still have a more-specific route out wan1, SD-WAN never sees the packet. Source: FortiOS “Configuring the SD-WAN interface.”

Side B — measure, then write the app rule

  1. Performance SLA on the members

    Network > SD-WAN > Performance SLAs — create Office365. Protocol ping or HTTP toward a server on the app path. Participants: Specify wan1 + wan2 (not every overlay you never use). Enable SLA Target. Set latency 100, jitter 30, packet-loss 1. Lowest Cost (SLA) and Maximize Bandwidth require this target; Manual / Best Quality do not. Source: Link health monitor / Performance SLA overview.

  2. Explicit application rule above implicit

    Network > SD-WAN > SD-WAN Rules — Create New. Name Office365. Destination: Internet Service Microsoft-Office365 (add Microsoft-Teams if that is the ticket). Strategy: Lowest Cost (SLA). Interface preference: wan1, wan2. Required SLA target: Office365#1. Save. Confirm it sits above any dest-all rule and above implicit.

  3. Leave implicit for leftover bulk

    Do not “fix” implicit by pinning it to wan1. Implicit is the bucket for traffic you have not identified. Source-IP or session load-balance is fine for generic HTTPS. It is not fine for the meeting.

https://192.0.2.10/ · Network › SD-WAN › Performance SLAs › Office365
Training mock · not live

Network › SD-WAN › Performance SLAs › Create New

Office365 — link health monitor

Office365
Ping · outlook.office365.com
Specify · wan1, wan2
Enabled
100 ms
30 ms · 1%

Source: FortiOS Administration Guide — Link health monitor. SLA Target is required when a rule uses Lowest Cost (SLA) or Maximize Bandwidth (SLA). Latency is calculated over the last 30 probes (default GUI hint 5 ms — overwrite it). Do not leave Update static route enabled on a SaaS-only probe unless you intend every flow to leave that member.

https://192.0.2.10/ · Network › SD-WAN › SD-WAN Rules › Office365
Training mock · not live

Network › SD-WAN › SD-WAN Rules › Create New

Office365 — priority rule

Office365
all
Microsoft-Office365
Lowest Cost (SLA)
wan1, wan2
Office365#1

Source: FortiOS — SD-WAN rules lowest cost (SLA); Dynamic application steering. After OK, drag this rule above any dest-all row. Implicit stays last and unnamed. CLI mode is set mode sla with config sla pointing at the health-check.

CLI — members, SLA, then the app rule
config system sdwan
    set status enable
    config members
        edit 1
            set interface "wan1"
            set gateway 203.0.113.1
            set cost 10
        next
        edit 2
            set interface "wan2"
            set gateway 198.51.100.1
            set cost 5
        next
    end
    config health-check
        edit "Office365"
            set server "outlook.office365.com"
            set members 1 2
            config sla
                edit 1
                    set latency-threshold 100
                    set jitter-threshold 30
                    set packetloss-threshold 1
                next
            end
        next
    end
    config service
        edit 1
            set name "Office365"
            set mode sla
            set internet-service enable
            set internet-service-name "Microsoft-Office365"
            set health-check "Office365"
            set priority-members 1 2
        next
    end
end

Side C — proof

  1. SLA bits

    diagnose sys sdwan health-check Office365 — each seq shows state(alive), latency / jitter / packet-loss, and sla_map. In-SLA is 0x1 for target 1. Out-of-SLA is 0x0. Dead is not the same as out-of-SLA: dead failed failtime; out-of-SLA is alive but above threshold.

  2. Selected member

    diagnose sys sdwan service — Service(1) Mode(sla), Members listed with selected on the cheapest in-SLA seq. If Office 365 sessions still egress wan1, the rule did not match (ISDB miss, or a dest-all above it). Source: FortiOS diagnose examples on Performance SLA / service.

  3. Forward traffic log

    Generate one Outlook session from 10.20.20.40. Log & Report > Forward Traffic: dstintf should be wan2 while wan2 is in-SLA. If dstintf is wan1 and sla_map on wan1 is 0x0, you matched implicit or the wrong rule.

Green success

One session after commit

After the rule is saved, an Outlook session from the LAN does this:

  1. Packet hits the firewall policy lan → virtual-wan-link. Permit is not a path yet.
  2. SD-WAN walks explicit rules top-down. ISDB Microsoft-Office365 matches rule 1 on the first packet.
  3. Strategy Lowest Cost (SLA) reads health-check Office365. Members with sla_map=0x0 are skipped. Among remaining, lowest cost wins — lab: wan2 cost 5 over wan1 cost 10.
  4. Session is sticky on that member. A later jitter spike that takes wan2 out-of-SLA can fail the member for new sessions; existing stickiness depends on SLA fail/recovery timers — do not assume mid-flow teleport.
  5. Unmatched bulk HTTPS never entered step 2. Implicit hashed it. The Office365 SLA did not vote.
Multiple health-checks on one member

When a member has more than one health-check, FortiOS removes that member’s routes from the SD-WAN group only when all of those checks fail. One green probe to 8.8.8.8 will keep the member eligible even if the Office365 probe is dead. Participants should be the members you actually steer — not “All SD-WAN Members” out of habit.

Traps + proof

Proof · selected member in diagnose, not a green WAN icon
Operator desk with a monitor showing abstract WAN health checkmarks and log lines
Artwork. Real proof is CLI: diagnose sys sdwan health-check then diagnose sys sdwan service. A green physical interface does not mean in-SLA, and in-SLA does not mean the app matched the rule.
SymptomLikely causeProof / fix
SLA graphs look healthy; Teams still on the bad ISPNo explicit app rule, or dest-all above it. Implicit hashed the session.diagnose sys sdwan service — if Service(1) never lists the session’s members as selected for that ISDB, move the app rule to the top.
Both members out-of-SLA on day oneLeft SLA target at 5 ms / 5 ms / 0%.Tune to realistic DIA numbers. Lab 100 / 30 / 1. Re-read Measure then steer.
Health-check dead on one WAN onlyProbe server blocked on that ISP, or wrong participants.Two servers if you must distinguish “path down” from “server down.” Specify members; do not probe overlays you do not steer.
HTTPS app still takes implicit for the first secondsMatched Application Control, not ISDB. Classification is late.Use Internet Service for first-packet steer. Signatures are a second identity, not a replacement.
Voice glitches every few minutes on “the better circuit”Strategy is Best Quality. It re-ranks live sessions.Lowest Cost (SLA) for media. Best Quality for bulk that can move.
All traffic left wan1 when Office365 SLA failedupdate-static-route enabled on that health-check. Out-of-SLA withdrew the member for every flow.Leave update-static-route for true underlay death. A SaaS probe should not black-hole the default route.
Policy to wan1 still works in the browserBypass. Clients never hit the zone.One policy to virtual-wan-link. Kill per-WAN policies and leftover statics.
Member “selected” but sessions black-holeNo route / gateway on that member. Steering picked a next-hop the RIB does not have.get router info routing-table all. SD-WAN is not a substitute for a usable default via the zone.
Pilot checklist

Knowledge check

Six judgment calls on measure-then-steer — not menu trivia.

Q1

Both WAN icons are green. Teams media still egresses the jittery wan1. Performance SLA Office365 exists. First check?

Correct: b. A health-check does not steer. Implicit ignores SLA. Re-read Why the ISP is up and Members, SLA, then the rule.
Q2

Members are enrolled. Health-check is in-SLA on both. The only SD-WAN rule is implicit. What happens to Outlook?

Correct: a. Implicit is the leftover bucket. Measure, then write the app rule. Re-read Rules vs implicit.
Q3

You create a Lowest Cost (SLA) rule and leave the SLA target at FortiOS shipped defaults on two internet DIA members. Likely result?

Correct: c. Official SLA-target defaults are 5 / 5 / 0. Lowest Cost (SLA) requires that target. Re-read Measure then steer and the defaults callout.
Q4

wan1 cost 10, wan2 cost 5, both in-SLA. Teams must stay on one path for the life of the meeting. Strategy?

Correct: b. Lowest Cost (SLA) is the voice-safe explicit strategy. Best Quality re-ranks; Maximize Bandwidth splits. Re-read Rules vs implicit and Flow 2.
Q5

A junior matches Office 365 with Application Control signatures only, no Internet Service. The first packets already left on wan1. Why?

Correct: a. First-packet application steering is ISDB. Re-read Flow 2 and the ISDB callout.
Q6

What is green proof that Office 365 is steered, not merely measured?

Correct: d. Graphs and LEDs are not path select. Re-read Side C and Traps + proof.

Sources

Related: SD-WAN SLA + five strategies · SD-WAN + ZTNA · Policy lookup + NAT · FortiGate interview · Troubleshooting command center