By Manny Fernandez

August 25, 2026

FortiGate SSID Types: Traffic Modes, Security Modes, and the Complete VAP Option Breakdown

1. Executive Summary

Objective

On a FortiGate wireless controller, an SSID is not just a name you broadcast. It is a Virtual Access Point (VAP) object whose traffic mode decides where client data terminates, whether your firewall policies and UTM inspection ever see that traffic, and what happens when the CAPWAP control channel dies. This guide documents every SSID type FortiOS supports (tunnel, bridge, mesh backhaul, and local standalone), then breaks down the full VAP option set behind them: security modes, VLAN behavior, roaming, client control, survivability, and monitoring.

Target Audience

Network and wireless engineers, security engineers, systems engineers, and sysadmins deploying FortiAP under integrated FortiGate control. You should be comfortable in the FortiOS CLI and with VLAN trunking.

The one-line takeaway: traffic mode is the single highest-impact SSID decision you will make. Everything else on the VAP is tuning. Pick the mode wrong and half your security stack is decorative.

2. Prerequisites & Architecture

Assumed Knowledge

  • 802.11 fundamentals: BSSID, beacons, probe requests, association, the 4-way handshake.
  • VLAN tagging and 802.1Q trunking on an access switch.
  • RADIUS and EAP basics, including RADIUS attribute return.
  • FortiOS CLI structure (config / edit / set / next / end), firewall policies, and interface roles.
  • CAPWAP discovery and FortiAP authorization on the controller.

Environment / Lab Requirements

  • FortiGate with the WiFi controller feature available. Syntax in this guide is written against FortiOS 7.4.x and 7.6.x. Older builds have a subset of these attributes.
  • At least one FortiAP. A tri-radio 6 GHz capable model is useful for the WPA3 and OWE sections. Two APs are needed for the mesh and roaming sections.
  • A PoE switch with an 802.1Q trunk to the AP port for the bridge-mode and dynamic-VLAN sections.
  • A RADIUS server (FortiAuthenticator, NPS, or FreeRADIUS) for the Enterprise and MAC-auth sections.
  • Test clients: one modern WPA3 capable client and one deliberately old client, because transition modes are only interesting when something legacy is on the air.

Component Table

Component Role Example Address / Value
FortiGate 200F (FortiOS 7.4.x) Wireless controller, policy and UTM enforcement 192.168.10.1
FortiAP (tri-radio) CAPWAP managed AP, mesh root or leaf 192.168.10.20
FortiSwitch (PoE) AP power and 802.1Q trunk for bridge mode 192.168.10.2
FortiAuthenticator RADIUS for 802.1X, MAC auth, and dynamic VLAN 192.168.10.50
Corp SSID (tunnel) WPA2/WPA3 Enterprise, centrally inspected 10.30.0.0/24, VAP interface corp-tun
IoT SSID (bridge) Local switching onto a tagged VLAN at the AP VLAN 50
Guest SSID (tunnel) Captive portal, isolated 10.40.0.0/24
Mesh backhaul SSID Wireless uplink between root and leaf APs acme.mesh.root (hidden)

3. Step-by-Step Implementation Workflow

The Four SSID Traffic Modes at a Glance

Mode Defining CLI Where client data lands FortiGate policy / UTM applies? Use it when
Tunnel (default) set local-bridging disable Inside the CAPWAP data tunnel, terminating on a software interface named after the VAP Yes, fully Corporate and guest SSIDs, centralized inspection, simple L3 design
Bridge set local-bridging enable On the FortiAP Ethernet port, native or tagged onto a VLAN No, unless the VLAN is routed back through the FortiGate Branch sites, high east-west throughput, local printers and servers
Mesh backhaul set mesh-backhaul enable Nowhere directly. It carries CAPWAP for leaf APs over the air Not applicable, it is infrastructure Warehouses, courtyards, temporary sites with no cable path
Local standalone set local-standalone enable On the AP itself, optionally NATed behind the AP uplink with AP-served DHCP No while standalone WAN outage survivability, teleworker APs, remote sites with fragile links

Related but not a VAP type: a FortiAP Ethernet port can also be bridged directly into an SSID from the AP profile (config wireless-controller wtp-profile > config lan > set port1-mode bridge-to-ssid). That gives a wired device the same policy treatment as a wireless client on the same VAP. Very useful for desk phones and teleworker APs.

Phase 1: Baseline the Controller and AP

Goal: confirm the WiFi controller is exposed, the AP is authorized, and the country/regulatory domain is correct before any VAP exists.

Action: enable the controller feature if it is hidden, authorize the AP by serial, and set the country code on the AP profile. Country code changes force a radio restart, so do it first.

config system global
    set wireless-controller enable
end

config wireless-controller wtp
    edit "FP431GTF20000000"
        set admin enable
        set name "AP-FLOOR1-01"
        set wtp-profile "FAP-STD"
    next
end

config wireless-controller wtp-profile
    edit "FAP-STD"
        set ap-country US
    next
end

GUI verification: WiFi and Switch Controller > Managed FortiAPs. The AP should show a green connected state and a firmware version. If the menu is missing entirely, enable it under System > Feature Visibility.

Phase 2: Build a Tunnel-Mode SSID

Goal: create a VAP whose client traffic is carried inside CAPWAP to the FortiGate, terminating on a software interface you can address, DHCP, and firewall like any other LAN interface.

Action: create the VAP, then treat the interface of the same name as a normal L3 interface: give it an IP, attach a DHCP scope, and write policy.

config wireless-controller vap
    edit "corp-tun"
        set ssid "<ACME-Corp>"
        set local-bridging disable
        set security wpa2-only-enterprise
        set auth radius
        set radius-server "<FAC-RADIUS>"
        set encrypt AES
        set pmf optional
        set schedule "always"
        set intra-vap-privacy disable
        set broadcast-ssid enable
        set max-clients 0
    next
end

config system interface
    edit "corp-tun"
        set ip 10.30.0.1 255.255.255.0
        set allowaccess ping
        set role lan
        set device-identification enable
    next
end

config system dhcp server
    edit 0
        set interface "corp-tun"
        set netmask 255.255.255.0
        set default-gateway 10.30.0.1
        set dns-service default
        set lease-time 28800
        config ip-range
            edit 1
                set start-ip 10.30.0.20
                set end-ip 10.30.0.220
            next
        end
    next
end

config firewall policy
    edit 0
        set name "corp-wifi-to-internet"
        set srcintf "corp-tun"
        set dstintf "<wan1>"
        set srcaddr "all"
        set dstaddr "all"
        set service "ALL"
        set action accept
        set schedule "always"
        set nat enable
        set utm-status enable
        set av-profile "default"
        set webfilter-profile "default"
        set application-list "default"
        set ssl-ssh-profile "certificate-inspection"
        set logtraffic all
    next
end

GUI verification: WiFi and Switch Controller > SSIDs. Traffic Mode should read Tunnel, and the SSID appears under Network > Interfaces as a child of the WiFi controller with the IP you assigned.

Note on split tunneling: tunnel mode does not have to be all or nothing. With set split-tunneling enable on the VAP plus a split-tunneling ACL on the AP profile, selected destinations (typically internet-bound traffic or the local AP subnet) exit at the AP while everything else still tunnels home. Useful for teleworker APs where you want corporate traffic inspected but do not want to hairpin Netflix across the VPN.

Phase 3: Build a Bridge-Mode (Local Switching) SSID

Goal: put wireless clients directly onto a wired VLAN at the AP so their traffic never crosses the CAPWAP data path.

Action: enable local bridging and, if the target VLAN is tagged, set the VLAN ID on the VAP. The AP switchport must trunk that VLAN. A bridge-mode VAP creates no FortiGate interface and takes no IP address.

config wireless-controller vap
    edit "iot-brg"
        set ssid "<ACME-IoT>"
        set local-bridging enable
        set vlanid 50
        set security wpa2-only-personal
        set passphrase "<strong-psk>"
        set pmf optional
        set intra-vap-privacy enable
        set broadcast-suppression dhcp-up dhcp-starvation arp-unknown arp-poison netbios-ns netbios-ds all-other-bc
        set max-clients-ap 0
    next
end

Optional AP-side inspection. On supported FortiAP models you can push a UTM profile so bridged traffic still gets scanned locally instead of escaping inspection entirely:

config wireless-controller vap
    edit "iot-brg"
        set utm-status enable
        set utm-profile "<fap-utm-profile>"
        set utm-log enable
    next
end

GUI verification: WiFi and Switch Controller > SSIDs, Traffic Mode = Bridge, with a VLAN ID field instead of an IP/Netmask field. On the switch, confirm VLAN 50 is tagged on the AP port and the AP management VLAN is untagged or native.

Phase 4: Build a Mesh Backhaul SSID

Goal: give cable-less APs a wireless uplink by dedicating an SSID to carrying CAPWAP between a root AP and one or more leaf APs.

Action: create a hidden mesh VAP with a strong PSK, assign it to the root AP radio you intend to use for backhaul, and provision the leaf APs to join it. Provision leaves while they are still cabled so the mesh settings land cleanly, then unplug them.

config wireless-controller vap
    edit "mesh-bh"
        set ssid "<acme.mesh.root>"
        set mesh-backhaul enable
        set security wpa2-only-personal
        set passphrase "<mesh-psk>"
        set broadcast-ssid disable
    next
end

config wireless-controller wtp-profile
    edit "FAP-STD"
        config radio-2
            set vap-all manual
            set vaps "mesh-bh" "corp-tun"
        end
    next
end

If a leaf AP must be provisioned by hand (no cable available, or it is coming from a standalone state), the FortiAP local CLI accepts the mesh parameters directly. Key names vary slightly by platform and firmware, so run cfg -s first and confirm what your build exposes:

# On the FortiAP console (leaf AP)
cfg -s
cfg -a MESH_AP_TYPE=1
cfg -a MESH_AP_SSID=<acme.mesh.root>
cfg -a MESH_AP_PASSWD=<mesh-psk>
cfg -c
reboot

GUI verification: WiFi and Switch Controller > Managed FortiAPs. A joined leaf shows its connection as mesh rather than Ethernet, and the root AP lists it as a downstream node.

Phase 5: Add Local Standalone Survivability

Goal: keep an SSID serving clients when the FortiGate is unreachable, either because the WAN is down or the controller rebooted.

Action: enable local standalone on a locally bridged VAP. Add NAT, an AP-served DHCP scope, and explicit DNS if the site has no other DHCP or resolver during an outage. Without DNS, clients will associate happily and still tell you the WiFi is broken.

config wireless-controller vap
    edit "branch-brg"
        set ssid "<ACME-Branch>"
        set local-bridging enable
        set local-standalone enable
        set local-standalone-nat enable
        set ip 10.99.99.1 255.255.255.0
        set dhcp-lease-time 7200
        set local-standalone-dns enable
        set local-standalone-dns-ip 1.1.1.1 9.9.9.9
        set local-authentication enable
        set security wpa3-sae-transition
        set passphrase "<wpa2-psk>"
        set sae-password "<wpa3-sae-password>"
        set pmf optional
    next
end

Design reality: while an AP is in standalone, nothing you configured on the FortiGate is enforcing anything. There are no policies, no UTM, no user-based logging. Treat a standalone SSID as a deliberately reduced-trust network and scope what it can reach when the controller returns.

Phase 6: The Security Mode Breakdown

Goal: pick the right value for set security and understand what it forces elsewhere on the VAP.

GUI Name CLI Value Auth / Key PMF Notes
Open open None Off Cleartext over the air. Use OWE instead unless a legacy device forces your hand.
Enhanced Open (OWE) owe Unauthenticated Diffie-Hellman Required No passphrase, but each client gets a unique key. The correct modern guest default.
Captive Portal captive-portal Portal login after open association Off Layer 2 is still open. Portal auth is an access control, not encryption.
WPA2 Personal wpa2-only-personal PSK, AES-CCMP Optional The mode that supports MPSK (multiple pre-shared keys) for IoT segmentation.
WPA2 Personal + Captive Portal wpa2-only-personal+captive-portal PSK plus portal Optional Encrypted guest with per-user accountability. Common in hospitality.
WPA2 Enterprise wpa2-only-enterprise 802.1X / EAP via RADIUS or local group Optional Pairs with dynamic VLAN, OKC, and 802.11r. The corporate workhorse.
WPA3 SAE wpa3-sae SAE (Dragonfly) Mandatory Offline dictionary attacks against the handshake stop working here. Required on 6 GHz.
WPA3 SAE Transition wpa3-sae-transition SAE and PSK on one BSSID Optional Needs both passphrase and sae-password. Some older clients still choke on the mixed RSN element.
WPA3 Enterprise only wpa3-only-enterprise 802.1X with stronger cipher suites Mandatory The path to 192-bit / Suite-B style deployments on supported APs and clients.
WPA3 Enterprise transition wpa3-enterprise-transition 802.1X, WPA2 and WPA3 clients together Optional The realistic migration step for a mixed corporate fleet.
Hotspot 2.0 OSU osen Online signup for Passpoint Varies Used with a hotspot20-profile. Carrier and venue deployments.
Legacy WPA / WEP wpa-only-personal, wep64, wep128 TKIP or WEP Off Broken. If an OT device demands it, isolate that SSID to its own VLAN and policy set.

WPA3 SAE with transition and the sub-options that matter:

config wireless-controller vap
    edit "corp-sae"
        set ssid "<ACME-Secure>"
        set security wpa3-sae-transition
        set passphrase "<wpa2-psk-for-legacy>"
        set sae-password "<wpa3-sae-password>"
        set sae-groups 19 20 21
        set sae-h2e-only disable
        set pmf optional
        set gtk-rekey enable
        set gtk-rekey-intv 86400
    next
end

OWE with a transition BSSID for guest networks that must still accept old clients. The transition pair is one open BSSID advertising the OWE BSSID and vice versa:

config wireless-controller vap
    edit "guest-owe"
        set ssid "<ACME-Guest>"
        set security owe
        set owe-groups 19 20 21
        set owe-transition enable
        set owe-transition-ssid "<ACME-Guest-Legacy>"
        set pmf enable
    next
    edit "guest-open"
        set ssid "<ACME-Guest-Legacy>"
        set security open
        set broadcast-ssid disable
        set owe-transition enable
        set owe-transition-ssid "<ACME-Guest>"
    next
end

WPA2 Enterprise with 802.1X, EAP reauthentication, and RADIUS accounting:

config wireless-controller vap
    edit "corp-tun"
        set security wpa2-only-enterprise
        set auth radius
        set radius-server "<FAC-RADIUS>"
        set eap-reauth enable
        set eap-reauth-intv 86400
        set dynamic-vlan enable
        set okc enable
        set ptk-rekey disable
    next
end

Multiple PSK (MPSK) gives every device or device class its own passphrase and optional VLAN on a single SSID. This is the cleanest way to retire a dozen IoT SSIDs:

config wireless-controller mpsk-profile
    edit "MPSK-IoT"
        config mpsk-group
            edit "cameras"
                set vlan-type fixed-vlan
                set vlan-id 60
                config mpsk-key
                    edit "cam-lobby"
                        set passphrase "<camera-key>"
                        set concurrent-clients 4
                    next
                end
            next
            edit "printers"
                set vlan-type fixed-vlan
                set vlan-id 61
                config mpsk-key
                    edit "print-fleet"
                        set passphrase "<printer-key>"
                    next
                end
            next
        end
    next
end

config wireless-controller vap
    edit "iot-brg"
        set security wpa2-only-personal
        set mpsk-profile "MPSK-IoT"
    next
end

Captive portal options. The portal type controls what the user is actually asked to do:

config wireless-controller vap
    edit "guest-tun"
        set ssid "<ACME-Guest>"
        set security captive-portal
        set portal-type auth+disclaimer
        set selected-usergroups "<guest-group>"
        set security-exempt-list "<portal-exempt>"
        set security-redirect-url "https://<your_domain>/welcome"
        set captive-portal-auth-timeout 0
        set captive-portal-session-timeout-interval 0
        set intra-vap-privacy enable
    next
end

Portal types available on the VAP:

  • auth, auth+disclaimer, disclaimer: credential login, login plus terms, or terms only.
  • email-collect: capture an email address before granting access.
  • auth-mac: authenticate once, then remember the MAC so returning devices skip the portal.
  • external-auth and external-macauth: hand off to a hosted portal via set external-web and set external-logout.

MAC-based access control comes in two flavors: a static list held on the FortiGate, or RADIUS MAC authentication where the MAC is the username:

config wireless-controller vap
    edit "iot-brg"
        set mac-filter enable
        set mac-filter-policy-other deny
        config mac-filter-list
            edit 1
                set mac <aa:bb:cc:dd:ee:ff>
                set mac-filter-policy allow
            next
        end
        set radius-mac-auth enable
        set radius-mac-auth-server "<FAC-RADIUS>"
        set radius-mac-auth-usergroups "<iot-mac-group>"
    next
end

Phase 7: VLAN Assignment Options

Goal: get clients into the right VLAN, statically, per user, or per AP group.

Static VLAN (bridge mode): set vlanid 50 on the VAP, trunk VLAN 50 to the AP port. Done.

Dynamic VLAN (RADIUS assigned): enable it on the VAP and return the standard three attributes from RADIUS: Tunnel-Type = VLAN (13), Tunnel-Medium-Type = IEEE-802 (6), Tunnel-Private-Group-Id = the VLAN ID. In tunnel mode you must also pre-create VLAN subinterfaces under the SSID interface, otherwise the assignment has nowhere to land.

config wireless-controller vap
    edit "corp-tun"
        set dynamic-vlan enable
    next
end

# Tunnel mode only: the VLANs must exist as subinterfaces of the SSID
config system interface
    edit "corp-vl110"
        set vdom "root"
        set interface "corp-tun"
        set vlanid 110
        set ip 10.110.0.1 255.255.255.0
        set allowaccess ping
        set role lan
    next
    edit "corp-vl120"
        set vdom "root"
        set interface "corp-tun"
        set vlanid 120
        set ip 10.120.0.1 255.255.255.0
        set allowaccess ping
        set role lan
    next
end

VLAN pooling spreads clients across several VLANs on one SSID, either by AP group (keeps a building on its own subnet), round robin, or a hash of the client MAC. It is the standard answer to a broadcast domain that has grown too large:

config wireless-controller vap
    edit "corp-tun"
        set vlan-pooling wtp-group
        config vlan-pool
            edit 110
                set wtp-group "<bldg-a>"
            next
            edit 120
                set wtp-group "<bldg-b>"
            next
        end
    next
end

GUI verification: WiFi and Switch Controller > SSIDs, edit the SSID, and confirm the VLAN Pooling and Dynamic VLAN toggles. Per-client results show under WiFi and Switch Controller > WiFi Clients, where the VLAN column reflects what RADIUS actually returned.

Phase 8: Client Control, Airtime, and Broadcast Hygiene

Goal: stop the SSID from wasting airtime and stop clients from talking to each other when they have no business doing so. This is where a dense deployment is won or lost.

config wireless-controller vap
    edit "corp-tun"
        set intra-vap-privacy enable
        set broadcast-ssid enable
        set probe-resp-suppression enable
        set probe-resp-threshold "-85"
        set max-clients 0
        set max-clients-ap 64
        set multicast-enhance enable
        set me-disable-thresh 32
        set multicast-rate 6000
        set dtim 1
        set broadcast-suppression dhcp-up dhcp-down dhcp-starvation arp-known arp-unknown arp-reply arp-poison netbios-ns netbios-ds all-other-bc
        set ldpc rx-tx
        set high-efficiency enable
        set target-wake-time enable
        set schedule "always"
        set qos-profile "<wifi-qos>"
    next
end

The QoS profile is where per-SSID and per-station rate limiting, WMM, and admission control live:

config wireless-controller qos-profile
    edit "wifi-qos"
        set uplink 0
        set downlink 0
        set uplink-sta 10000
        set downlink-sta 20000
        set burst enable
        set wmm enable
        set wmm-uapsd enable
        set call-admission-control enable
        set call-capacity 10
    next
end

Two options here are commonly misread:

  • max-clients is a limit for the SSID across the whole controller, while max-clients-ap caps clients per AP. Zero means unlimited on both.
  • multicast-enhance converts multicast to unicast for better delivery, but me-disable-thresh disables that conversion once the client count exceeds the threshold, because unicasting a stream to 200 clients is worse than multicasting it once.

Phase 9: Roaming and the 802.11 Amendment Options

Goal: keep voice and video sessions alive across AP boundaries by cutting reauthentication time and giving clients better roaming information.

config wireless-controller vap
    edit "corp-tun"
        set fast-roaming enable
        set ft-mobility-domain 100
        set ft-over-ds enable
        set ft-r0-key-lifetime 480
        set okc enable
        set voice-enterprise enable
        set 80211k enable
        set 80211v enable
        set mbo enable
        set mbo-cell-data-conn-pref prefer-not
        set pmf optional
        set pmf-assoc-comeback-timeout 1
        set pmf-sa-query-retry-timeout 2
    next
end
Option What it actually does Watch out for
fast-roaming (802.11r) Fast BSS Transition, pre-computed keys so roaming skips the full EAP exchange Older clients may fail to associate at all on an FT-enabled SSID. Test the fleet, not just your laptop.
ft-mobility-domain Groups APs into one FT domain Must match across every controller and VAP serving the same SSID, or roams silently fall back to full auth.
ft-over-ds Allows FT through the distribution system instead of over the air Some clients only support over-the-air FT. Leaving both paths available is usually safest.
okc Opportunistic key caching, a lighter alternative to FT for WPA2 Enterprise Enterprise security modes only. It does nothing for a PSK SSID.
80211k / 80211v Neighbor reports and BSS transition management, so clients roam with better information They are advisory. A sticky client can still ignore a transition request.
voice-enterprise Turns on the certified voice bundle (11k, 11v, and FT together) Enabling it overrides individual toggles. Set it, then re-check the resulting config.
pmf Protected Management Frames, blocks deauth and disassoc spoofing Mandatory for SAE, OWE, and 6 GHz. Use optional during any transition period.

Phase 10: Bind the SSIDs to Radios

Goal: an SSID that is not attached to a radio does not exist on the air. This is the step people forget, then spend an hour debugging.

Action: either let a radio broadcast all tunnel or all bridge SSIDs, or select them manually. Use a VAP group when the same set of SSIDs is reused across many profiles.

config wireless-controller vap-group
    edit "acme-ssids"
        set vap "corp-tun" "guest-tun" "iot-brg"
    next
end

config wireless-controller wtp-profile
    edit "FAP-STD"
        config radio-1
            set mode ap
            set vap-all manual
            set vaps "acme-ssids"
        end
        config radio-2
            set mode ap
            set vap-all manual
            set vaps "acme-ssids" "mesh-bh"
        end
        config radio-3
            set mode ap
            set vap-all manual
            set vaps "corp-sae"
        end
    next
end

6 GHz rule of thumb: only WPA3 based security (SAE, OWE, or WPA3 Enterprise) with PMF required is permitted on a 6 GHz radio. Do not put a WPA2 or transition-mode SSID on radio 3 and expect it to beacon. Give 6 GHz its own dedicated WPA3 VAP.

4. Verification & Validation

Step 1: confirm the controller believes the VAPs exist and are bound.

show wireless-controller vap
diagnose wireless-controller wlac -c vap
diagnose wireless-controller wlac -c wtp
diagnose wireless-controller wlac -c sta

What success looks like: -c vap lists each SSID with its security mode and bridging state. -c wtp shows the AP in a connected state with a non-zero uptime. -c sta shows associated clients with their MAC, IP, VLAN, radio band, and signal.

Step 2: trace a single client end to end. Filter on the client MAC and watch association, key exchange, and RADIUS in one stream:

diagnose wireless-controller wlac sta_filter <aa:bb:cc:dd:ee:ff> 2
diagnose debug enable

# stop when finished
diagnose wireless-controller wlac sta_filter 00:00:00:00:00:00 0
diagnose debug disable
diagnose debug reset

What success looks like: a clean progression from authentication to association to a completed key handshake, followed by an IP address. Repeated association and deauthentication cycles point at PSK or PMF mismatch. A stall right after association points at RADIUS.

Step 3: prove the data path for tunnel mode. Sniff on the SSID interface itself, which only works because tunnel mode terminates on the FortiGate:

diagnose sniffer packet corp-tun "udp port 67 or udp port 68 or arp" 4 0 a
execute ping-options source 10.30.0.1
execute ping <client_ip>

Step 4: prove the data path for bridge mode. The FortiGate cannot see this traffic, so verify at the AP and the switch instead:

# On the FortiAP console
cfg -s
brctl show
iwconfig

# On the FortiSwitch, confirm the client MAC is learned on the AP port in the right VLAN
diagnose switch mac-address list | grep <aa:bb:cc:dd:ee:ff>

What success looks like: brctl show lists the VAP interface in the same bridge as the AP Ethernet interface, and the switch learns the wireless client MAC on the AP port inside the SSID VLAN.

Step 5: validate authentication independently of wireless. If 802.1X or MAC auth is failing, take the radio out of the equation:

diagnose test authserver radius <FAC-RADIUS> mschap2 <username> <password>
diagnose debug application fnbamd -1
diagnose debug enable

What success looks like: an authentication succeeded result that also lists the returned groups and VLAN attributes. If the VLAN attributes are missing here, dynamic VLAN was never going to work over the air either.

GUI verification: WiFi and Switch Controller > WiFi Clients gives you SSID, AP, band, channel, signal strength, security mode, and VLAN per client in one table. Dashboard > WiFi widgets and Log & Report > WiFi Events cover the historical view.

5. Troubleshooting & “Gotchas”

Gotcha 1: Bridge-mode SSIDs are invisible to your firewall policies

Symptom: web filtering, application control, and antivirus are configured, tested, and doing nothing. Forward traffic logs show no wireless sessions at all.

Cause: local bridging is enabled, so client frames go straight out the AP Ethernet port. The FortiGate never sees a session to inspect.

show wireless-controller vap <ssid_name> | grep -i bridging
diagnose wireless-controller wlac -c vap
diagnose sniffer packet any "host <client_ip>" 4 20 a   # expect silence in bridge mode

Resolution: pick one. Switch the SSID to tunnel mode, route the bridged VLAN back through the FortiGate as its own interface with policy, or enable AP-side UTM on supported models. Do not leave it half-configured and assume inspection is happening.

Gotcha 2: Dynamic VLAN assignment silently does nothing

Symptom: users authenticate successfully but all land in the SSID base subnet, or get no address at all.

Cause: one of three things. Dynamic VLAN is not enabled on the VAP, RADIUS is not returning the full attribute set (Tunnel-Type, Tunnel-Medium-Type, and Tunnel-Private-Group-Id all three are required), or in tunnel mode the VLAN subinterfaces under the SSID interface do not exist.

diagnose test authserver radius <FAC-RADIUS> mschap2 <username> <password>
diagnose debug application fnbamd -1
diagnose debug enable
diagnose wireless-controller wlac -c sta          # check the VLAN column
show system interface | grep -A5 <ssid_name>

Resolution: confirm the three RADIUS attributes in the fnbamd output, create the missing VLAN subinterfaces under the SSID interface, then re-test. In bridge mode, confirm the VLANs are trunked to the AP port instead.

Gotcha 3: WPA3, OWE, and PMF break older clients

Symptom: new phones connect instantly. A handheld scanner, a badge printer, or an older laptop cannot see the SSID or fails at association.

Cause: SAE and OWE require PMF, and a client with no PMF support cannot complete association. On 6 GHz the standard itself forbids the legacy modes, so a mixed-mode SSID simply will not appear there.

diagnose wireless-controller wlac sta_filter <aa:bb:cc:dd:ee:ff> 2
diagnose debug enable
show wireless-controller vap <ssid_name> | grep -i -e security -e pmf -e sae

Resolution: move to a transition mode (wpa3-sae-transition or an OWE transition pair) with set pmf optional, and keep 6 GHz on a separate WPA3-only VAP. If a specific legacy device still refuses, give it its own tightly scoped SSID rather than weakening the corporate one.

Gotcha 4: Mesh backhaul eats your client capacity, or builds a loop

Symptom: throughput on leaf APs is roughly half of what the root delivers, or worse, the network floods after somebody cables a leaf AP back into the same switch for testing.

Cause: a shared radio carries both backhaul and client traffic, so every frame is transmitted twice. Separately, a mesh leaf with Ethernet bridging enabled and a cable back to the same L2 domain is a textbook loop.

diagnose wireless-controller wlac -c wtp        # confirm mesh parent and child relationships

# On the FortiAP console
cfg -s
cw_diag -c mesh
brctl show

Resolution: dedicate one radio to backhaul and leave the other for clients, keep the hop count as low as the site allows, and never leave a mesh leaf cabled into the same broadcast domain while Ethernet bridging is on. Enable loop protection on the access switch ports as a safety net.

Appendix A: VAP Option Quick Reference

Attribute availability varies by FortiOS version, FortiAP model, and the selected security mode. Inside config wireless-controller vap, type set ? to see exactly what your build exposes.

Function Key attributes
Identity and mode ssid, local-bridging, mesh-backhaul, local-standalone, split-tunneling, broadcast-ssid, schedule
Security and keys security, encrypt, passphrase, sae-password, sae-groups, sae-h2e-only, owe-groups, owe-transition, gtk-rekey, ptk-rekey, pmf
Authentication auth, radius-server, usergroup, eap-reauth, radius-mac-auth, mac-filter, mpsk-profile, portal-type, selected-usergroups, external-web
VLAN vlanid, dynamic-vlan, vlan-pooling, vlan-pool, nac, nac-profile
Client control max-clients, max-clients-ap, intra-vap-privacy, probe-resp-suppression, probe-resp-threshold, address-group
Airtime and traffic broadcast-suppression, multicast-enhance, me-disable-thresh, multicast-rate, dtim, qos-profile, rates-11ax-mcs-map, high-efficiency, target-wake-time, ldpc
Roaming fast-roaming, ft-mobility-domain, ft-over-ds, ft-r0-key-lifetime, okc, voice-enterprise, 80211k, 80211v, mbo
Survivability local-standalone, local-standalone-nat, local-standalone-dns, local-authentication, ip, dhcp-lease-time
Inspection and visibility utm-status, utm-profile, utm-log, dhcp-option82-insertion, hotspot20-profile

Closing

Design the SSID around where you need enforcement, not around what is convenient to configure. Tunnel mode when the FortiGate must see the traffic. Bridge mode when the traffic belongs on a local VLAN and you have another enforcement point. Mesh when there is no cable. Local standalone when the site has to keep working without you. Then spend your tuning effort on the options that actually change client behavior: security mode, PMF, VLAN assignment, broadcast suppression, and roaming.


Recent posts

  • If you've spent any time configuring user authentication on... Full Story

  • DNS is one of those technologies that quietly underpins... Full Story

  • BGP issues on FortiGate firewalls usually trace back to... Full Story

  • Every time your laptop talks to your router, a... Full Story

  • If you've spent any time configuring NAT on a... Full Story

  • If you have spent any time configuring firewall policies... Full Story

  • High availability on FortiGate is one of those features... Full Story

  • If you've configured SD-WAN on a FortiGate, you've almost... Full Story

  • FortiLink is the management protocol that turns a FortiSwitch... Full Story

  • FortiSwitches are pretty rock solid from Mean Time Between... Full Story

  • This is a quicky tip.  Have you ever gone... Full Story

  • DNS is one of those quiet pieces of internet... Full Story

  • This article is an updated version of the previous... Full Story

  • You will add ns2 as a secondary (slave) BIND9... Full Story

  • In the process of deploying my lab, I needed... Full Story

  • RFC 8805, used to be known as Self-Correcting IP... Full Story

  • Years back, I wrote an article about certificate pinning. ... Full Story

  • FortiGates have the ability to send alerts to Microsoft... Full Story

  • In this post, I am going to walk through... Full Story

  • Troubleshooting VoIP on a FortiGate can feel like trying... Full Story

  • Prior to FortiOS 7.0, there were three commands to... Full Story

  • In this post, I am going to go over... Full Story

  • What we are going to do:  We are going... Full Story

  • Choosing between FGCP (FortiGate Clustering Protocol) and FGSP (FortiGate... Full Story

  • Creating a VLAN on macOS (The "Pro" Move) A... Full Story

  • This blog post explores the logic behind how macOS... Full Story

  • Pretty Fly for a Wi-Fi Tell My Wi-Fi Love... Full Story

  • Part of my daily gig is creating BoMs (Bill-of-Materials)... Full Story

  • ICMP introduces several security risks, but careful filtering, rate... Full Story

  • The command diag debug application dhcps -1 enables full... Full Story

  • In the world of FortiOS, execute tac report is... Full Story

  • LLDP; What is it The Link Layer Discovery Protocol... Full Story

  • What it actually does When you run diagnose fdsm... Full Story

  • Monkey Bites are bite-sized, high-impact security insights designed for... Full Story

  • I have run macOS in macOS with Parallels but... Full Story

  • Don't be confused with my other FortiNAC posts where... Full Story

  • This is the third session in a multi-part article... Full Story

  • Today I was configuring key-based authentication on a FortiGate... Full Story

  • Netcat, often called the "Swiss Army knife" of networking,... Full Story

  • At its core, IEEE 802.1X is a network layer... Full Story

  • In case you did not see the previous FortiNAC... Full Story

  • This is our 5th session where we are going... Full Story

  • Now that we have Wireshark installed and somewhat configured,... Full Story

  • The Philosophy of Packet Analysis Troubleshooting isn't about looking... Full Story

  • 1. Title & Executive Summary Objective dhcping sends a... Full Story

  • Objective: This guide shows how to use Scapy to... Full Story

  • Executive Summary ipcalc looks like a single, predictable command,... Full Story