T Techclick ← All lessons
Fortinet · FortiSASE · Interactive lesson

FortiClient steering PoP then private app

Ticket: YouTube is filtered, the FortiClient padlock is up, and 10.20.20.80 still times out. That is not “SASE is down.” FortiClient already steered the laptop to a security PoP. Internet is Secure Internet Access at that PoP. The private app is a second hop: PoP → SPA Connector (FortiGate hub) over IPsec, then a private access policy. Split-tunneling the HQ prefix is the usual wrong fix — it bypasses FortiSASE instead of using SPA. Lab: HQ 10.20.20.0/24, app 10.20.20.80:443.

16 min read · L2 primary · Quiz at end

After this page you can

Lessons · FortiSASE series · FortiClient steering

This page vs SWG / ZTNA policy

This lesson is the agent path: FortiClient steers to a security PoP, then SPA to the hub. Agentless SWG, ZTNA rule sets, and SD-WAN on-ramp live on the sibling page. Do not mix those menus into this runbook.

FortiSASE SWG, ZTNA and SD-WAN policy · FortiGate zone, policy, NAT · SASE architecture

Hero · laptop hits a PoP, not the HQ firewall first
Endpoint laptop through a FortiSASE PoP cloud, then split to internet and a private app rack
Mood, not a wiring diagram. Exact path is in the SVG: FortiClient → security PoP → SIA to the internet, or SPA IPsec to the FortiGate hub then 10.20.20.80. Direct to HQ is ZTNA or a bypass, not SPA.
Quick answer

FortiClient enrolled to FortiSASE builds a Cloud Security tunnel to a security PoP. Empty steering bypass destinations = full tunnel (all IPv4 to the PoP). Internet is inspected as SIA on that PoP. Private apps are SPA: the PoP is a spoke of the FortiGate SPA Connector over IPsec; a private access policy must accept client-to-server. Three exceptions skip the PoP: ZTNA to a FortiGate access proxy, steering bypass (split tunnel), local LAN. Proof is Connected Users + hub tunnel/BGP + SPA traffic log. Lab: HQ 10.20.20.0/24, app 10.20.20.80:443.

Why SIA up is not SPA up

The day-one ticket is always the same: “VPN is connected, so the intranet should work.” Wrong. The padlock only proves FortiClient reached a security PoP. SIA (web filter, IPS, DNS) runs on that PoP toward the internet. SPA is a different overlay from that PoP into the on-prem hub. No service connection, no BGP prefix, no private access policy — 10.20.20.80 blackholes at the PoP even while YouTube is cleanly blocked.

Three silent-zero states look identical from the laptop (timeout to the app):

Do not split-tunnel the HQ prefix to “fix” SPA

Steering bypass is for Zoom/Teams bandwidth or for the FortiGate ZTNA access proxy IP/FQDN. Putting 10.20.20.0/24 on the bypass list sends the app around FortiSASE. SPA then has nothing to log. If you wanted ZTNA, say so and bypass the proxy, not the whole LAN.

Steering, PoP, private app — three objects

A steering method is how user-edge traffic is forced to FortiSASE. This page is the FortiClient agent method: install the agent, enroll, auto-connect the Cloud Security tunnel. Agentless (browser proxy) is HTTP/HTTPS only. IPsec-with-routing is for Thin Edge / Secure Edge / Branch On-Ramp, not a laptop.

A security PoP is the FortiSASE location that terminates that tunnel and runs FWaaS. You pick several at provision, plus one analytics PoP (logs) and one endpoint-management location. Users should land on a nearby security PoP. An SPA Connector is the on-prem FortiGate hub; FortiSASE PoPs become its spokes over IPsec, and BGP carries the HQ prefixes (lab 10.20.20.0/24).

Path · enroll, then PoP, then steer, then app
Four glass panels labeled Enroll, PoP, Steer, App
Feel of the order. Exact FortiSASE sequence — PoP first, SPA overlay second, ZTNA around the PoP — is in the SVG below. Do not read the App panel as “FortiClient dials HQ SSL VPN.”

FortiClient steering

Agent on Windows/macOS/Linux/iOS/Android. Outbound UDP 500/4500 to the PoP. Configuration › Profiles › Connection: Endpoint connects to FortiSASE VPN = Automatically. Older trains: Endpoint management › Endpoint profiles.

Security PoP

Terminates the tunnel, inspects SIA. Pick PoPs near users at provision. Geofencing and on-net rules decide whether the agent is even allowed to attach.

SPA overlay

PoP spoke ↔ FortiGate hub IPsec. BGP advertises HQ. Private access policy (client-to-server) is the allow. Hub still needs LAN/DMZ → overlay accept.

Exceptions

ZTNA (direct to FortiGate access proxy), steering bypass (split tunnel), local LAN (printers on the same subnet). None of these hairpin through the PoP.

Say this out loud

FortiClient steers me to a security PoP. The PoP inspects internet. Private apps leave that PoP over IPsec to the hub, then a private access policy. Bypass and ZTNA skip the PoP on purpose.

How a packet is steered

Enroll first. FortiClient registers, pulls the endpoint profile, and (if Automatically) brings up the Cloud Security tunnel to a selected security PoP. Existing tunnel: IPv4 that is not bypassed, not ZTNA, not local-LAN is encapsulated to the PoP. At the PoP, dest-internet hits SIA policy. Dest-HQ hits SPA: overlay to the hub, then private access policy, then the hub firewall. IPv6 is dropped on the agent — only IPv4 traverses the tunnel.

Flow 1 · lab packet laptop → 10.20.20.80:443
1 Enroll FortiClient agent 2 Tunnel UDP 500/4500 3 Security PoP SIA + SPA lookup 4 SPA IPsec PoP spoke → hub 5 Policy private access + hub 6 App 10.20.20.80:443 · HQ 10.20.20.0/24 Internet dest would stop at step 3 (SIA). HQ dest continues 4 → 5 → 6. Proof: Connected Users on PoP · hub IPsec up · BGP has 10.20.20.0/24 · SPA log accept Miss at 4/5: SIA still works. App times out. Do not add HQ as steering bypass. Fix overlay + private access policy + hub LAN→overlay accept. Then re-test 10.20.20.80. ZTNA / bypass / local LAN never enter step 3. They leave the physical NIC. Source: FortiSASE SIA Architecture Guide — steering; SPA Architecture Guide — PoP to SPA Connector.

Read left → right, then the gold bar. PoP is mandatory for SPA. Bypass of 10.20.20.0/24 skips the gold bar on purpose — that is not a repair.

ObjectLab valueIf missing
Endpoint profileDefault: Endpoint connects = Automatically; disconnect button off for non-adminUser never attaches. No Connected Users row. SIA and SPA both dead.
Agent portsUDP 500 and 4500 egress to FortiSASETunnel fails on NAT/guest Wi-Fi that only allows 443. Padlock stays down.
Security PoPProvisioned near the user; analytics PoP separateLong RTT or attach fail. Logs live on the analytics PoP, not the security PoP.
SPA service connectionPoPs as spokes of the FortiGate hub; BGP for 10.20.20.0/24SIA works. Traceroute to 10.20.20.80 dies at the PoP.
Private access policyClient-to-server accept to 10.20.20.80 HTTPSOverlay up, app still deny. Hub policy is a second accept, not a substitute.
Hub overlay policyLAN_HQ / DMZ_HQ → fgt_hub1 accept (server-to-client needs this too)SPA log may show accept; return traffic dies on the hub.

Agent vs bypass vs ZTNA vs SPA

Pick the path the destination actually needs. Mixing them is the usual “internet is fine, SAP is dead, ZTNA rule is green” ticket.

Flow 2 · dest decides the path
Internet / SaaS steer to PoP SIA policy on PoP optional SSA / CASB HQ prefix steer to PoP SPA IPsec to hub 10.20.20.80 via overlay ZTNA proxy bypass the PoP direct to FortiGate access proxy Local LAN stay on NIC printer / share tunnel still up Steering bypass = split tunnel. Empty list = full tunnel. Wildcard FQDN bypass is not supported. ZTNA needs a bypass dest matching the access-proxy IP or FQDN, or FortiClient hairpins ZTNA into the PoP. Subnet bypasses belong on the Default profile — custom profiles cannot create subnet destinations. On-net: Exempt endpoint from FortiSASE auto-connect when endpoint is on-net, or you double-inspect campus users. Source: FortiSASE SIA Architecture Guide — exceptions; SPA using ZTNA Deployment Guide — split tunnel for access proxy.

Four columns, four tickets. Do not toggle NAT on the hub to “fix” a missing bypass for ZTNA.

NeedUseSkip
Inspect all internet from laptopsFortiClient agent, full tunnel, auto-connectAgentless SWG if you need non-HTTP. Alternate VPN clients beside FortiSASE.
Reach 10.20.20.80 with inspection at the PoPSPA: service connection + private access policy + hub overlay acceptSteering bypass for 10.20.20.0/24. That is the opposite of SPA.
Shortest path + posture to a TCP appZTNA connection rules + bypass dest = FortiGate access proxyHairpinning ZTNA through the SIA tunnel. Fortinet documents that as the failure mode.
Keep Zoom off the PoPSteering bypass FQDN on Connection tabWildcard FQDN. Not supported. Bypass the named hosts.
>100 agents behind one public IP on one PoPBranch On-Ramp / Thin Edge / FortiGate Secure EdgeMore FortiClient installs on that NAT. Architecture guide calls this out.

Runbook Side A / B / C

Side A is the agent and profile. Side B is the PoP and SPA overlay. Side C is the private access policy and proof. Do not start at C.

Side A — enroll and steer

  1. Install and enroll FortiClient

    Windows, macOS, Linux, Android, iOS only — platforms FortiSASE lists for the agent. Invite / installer from FortiSASE, not a leftover EMS on-prem package pointed at a different FortiClient Cloud. Source: FortiSASE SIA Architecture Guide — Traffic steering method with FortiClient.

  2. Allow UDP 500/4500

    Guest Wi-Fi and hotel NATs that only pass 443 will leave the padlock down. Confirm the agent can reach FortiSASE on those ports before you debug SPA.

  3. Connection tab — auto-connect

    Configuration › Profiles (older: Endpoint management › Endpoint profiles). Default or Corporate profile. Endpoint connects to FortiSASE VPN = Automatically. Disable Show button to disconnect for non-admin. Enable On/off-net detection and Exempt endpoint from FortiSASE auto-connect when endpoint is on-net for campus laptops.

https://<tenant>.fortisase.com/ · Configuration › Profiles › Default › Connection
Training mock · not live

Configuration › Profiles › Default › Connection

Endpoint profile — Connection

Automatically
Disabled
Enabled · On-net rule set On-Premise
Enabled
FQDN · match as required (not 10.20.20.0/24)
CancelOK

Field names from FortiSASE Administration Guide — Connection, and Endpoint Management Deployment Guide. Subnet bypasses go on Default; custom profiles cannot create them. No wildcard FQDN.

Pilot checklist — Side A
1. FortiClient enrolled to this FortiSASE tenant (not a stray EMS).
2. Connection: Automatically. Disconnect hidden for the user profile.
3. UDP 500/4500 egress proven (not only TCP 443).
4. Steering bypass empty except Zoom/Teams or the ZTNA proxy.
5. On-net exempt enabled for Corporate; left off for NonCorporate.
6. IPv4 only through the tunnel — do not chase IPv6 SPA.

Side B — PoP then SPA overlay

  1. Security and analytics PoPs

    Chosen at provision: multiple security PoPs near users, one analytics PoP for logs, one endpoint-management location. You cannot treat the analytics PoP as a user attach point. GDPR-style log residency is the analytics choice, not the security PoP list. Source: FortiSASE SIA Architecture Guide — Selecting security and analytics PoPs.

  2. SPA service connection

    Network › SPA. Configure FortiSASE security PoPs as spokes of the FortiGate hub (SPA Connector). Build the service connection, wait for IPsec up, confirm BGP has 10.20.20.0/24. View health and VPN tunnel status in FortiSASE; on the hub, verify IPsec and BGP separately.

Side C — private access policy then proof

https://<tenant>.fortisase.com/ · Network › SPA › Private access policy
Training mock · not live

Network › SPA › Private access policy › Create (client-to-server)

Private access · client-to-server

SPA-to-HQ-HTTPS
ACCEPT
Remote agents (user group)
10.20.20.80/32
HTTPS
SPA profile (optional)
CancelOK

Client-to-server is the remote-user → HQ direction. Server-to-client is a separate policy plus a hub firewall policy (incoming LAN_HQ/DMZ_HQ, outgoing overlay e.g. fgt_hub1). Source: FortiSASE SPA deployment guides.

  1. Hub firewall

    On the FortiGate SPA hub: Policy & Objects › Firewall Policy. Incoming LAN_HQ (and DMZ if used), outgoing overlay (fgt_hub1 in Fortinet’s example), destination the remote-agent pool or all as documented, action ACCEPT. NAT only if the hub addressing requires it — do not enable NAT to paper over a missing overlay.

  2. ZTNA only if that is the design

    If the app is ZTNA TCP forwarding, push ZTNA connection rules and add a steering bypass for the access-proxy IP or FQDN. Do not also send that dest through SPA. FortiClient shows the rules on the ZTNA CONNECTION RULES tab after the profile update.

One flow after go-live

Laptop off-net. FortiClient auto-connects to the nearest allowed security PoP. User opens https://10.20.20.80. FortiClient has no bypass and no ZTNA rule for that dest, so the packet is in the Cloud Security tunnel. PoP matches SPA, encapsulates to the hub, private access policy accepts, hub policy accepts, app answers. Return follows the overlay. Internet to the same laptop still dies at the PoP as SIA — two dests, two engines, one tunnel.

Proof · Connected Users and overlay health, not a green icon
Operations desk with health checkmarks and a network map from laptop to cloud to server
Feel of verification. Real proof is the FortiSASE Connected Users list, SPA tunnel/BGP status, hub IPsec, and a private access log line for 10.20.20.80 — captions in the checklist below, not in this image.
Green success

FortiSASE › Connected Users shows the endpoint on a security PoP. Network › SPA shows the hub tunnel healthy. Hub: IPsec up, BGP has 10.20.20.0/24. Private access traffic in the FortiSASE portal lists the test to 10.20.20.80. Browser to the app works from the same laptop that already had SIA.

Traps + proof

SymptomWrong moveRight proof
SIA works, 10.20.20.80 times outAdd HQ to steering bypassSPA tunnel/BGP + private access policy + hub overlay policy. Bypass would hide the failure.
ZTNA app loops or hits the PoPRebuild SPABypass dest = access-proxy IP/FQDN. Connection rules on FortiClient ZTNA tab. Wildcard FQDN will not save you.
Campus laptop still tunnels to SASETell users to click DisconnectOn-net rule set + Exempt auto-connect when on-net. NonCorporate profiles keep auto-connect on purpose.
Padlock never comes up on hotel Wi-FiSPA policy editsUDP 500/4500 blocked. Agent never reached a PoP. Connected Users empty.
Many users behind one NAT, attach flapsMore FortiClient licenses on that public IPArchitecture limit: <100 concurrent agents sharing a source IP per security PoP. Move the site to On-Ramp / Secure Edge.
IPv6-only test “proves SASE is down”Open a TAC for SPA BGPFortiClient blocks IPv6; only IPv4 in the tunnel. Test with IPv4.
Interview one-liner

FortiClient steers IPv4 to a FortiSASE security PoP. Internet is SIA there. Private apps need the SPA overlay to the FortiGate hub plus a private access policy. ZTNA and steering bypass skip the PoP. I prove with Connected Users, hub IPsec/BGP, and the SPA log — not the FortiClient icon.

Knowledge check

Six judgment items. Submit to see reasons. Map misses back to the section named in the reason.

Q1

FortiClient padlock is up and YouTube is filtered, but https://10.20.20.80 times out. First correct move?

Correct: b. Connected tunnel + SIA ≠ SPA. Bypass of HQ hides the overlay failure. Re-read Why SIA up is not SPA up and Flow 1.
Q2

You enabled FortiClient ZTNA TCP forwarding to a FortiGate access proxy. Why add a steering bypass for that proxy?

Correct: c. In FortiSASE, ZTNA is the exception that skips the PoP. Bypass the proxy IP/FQDN, not the whole LAN. Re-read Agent vs bypass vs ZTNA vs SPA.
Q3

The Default profile has no steering bypass destinations. What does FortiClient do with IPv4?

Correct: a. Empty bypass list = full tunnel. Agentless is the web-only method. FortiClient blocks IPv6. Re-read Steering, PoP, private app.
Q4

Hotel Wi-Fi allows TCP 443. FortiClient never attaches. What did the architecture guide require for the agent method?

Correct: d. Side A dies before SPA exists. Do not edit private access policy yet. Re-read Side A and Traps.
Q5

At FortiSASE provision, what do you select?

Correct: a. Users attach to security PoPs. Log residency is the analytics PoP. Re-read Side B.
Q6

Corporate laptops on the campus SSID still auto-connect to FortiSASE and double-inspect. Least-wrong fix?

Correct: c. That is the documented on-net exemption. NonCorporate often keeps auto-connect even on-net. Re-read Side A Connection tab and Traps.

Sources

Related: FortiSASE SWG, ZTNA and SD-WAN policy · FortiGate zone, policy, NAT · SASE architecture · Zero trust vs SASE vs SSE