Fortinet FortiGate + FortiAP
En el panel, el sitio debe tener el tipo de hardware Fortinet FortiGate (RADIUS).
:::caution FortiGate no es FortiAP Cloud
Si el login del huésped va a una URL con post=.../fgtauth&magic=..., el equipo es un FortiGate. Con el tipo FortiAP Cloud el FortiGate rechaza el login sin consultar el RADIUS. Revisa el tipo de hardware del sitio antes que cualquier otra cosa.
:::
Valores que necesitas
Reemplaza los valores entre < >. Los tomas del panel (Sitio → Access points) o te los entrega el equipo de Bitwifi.
| Valor | Qué es | Ejemplo |
|---|---|---|
<SSID> | Nombre del SSID (y de su objeto VAP) | CLIENTES-WIFI |
<PORTAL_HOST> | Host del portal de tu sitio | portal.bitwifiapp.com |
<API_HOST> | Host de la API que usa el portal | — |
<RADIUS_SERVER> | Servidor RADIUS de Bitwifi | — |
<SECRET> | Secret RADIUS del sitio | — |
<VLAN> | VLAN de clientes, solo en modo bridge | 145 |
<RED> / <MASCARA> / <GW> | Red propia del SSID, solo en modo túnel | 10.49.0.0 / 255.255.252.0 / 10.49.0.1 |
<WAN> | Interfaz de salida a internet, solo en modo túnel | wan1 |
Aplica todo en el FortiGate. Si es un HA, hazlo en el primario y se sincroniza solo.
1. Servidor RADIUS
GUI: User & Authentication → RADIUS Servers → Create New. Nombre Bitwifi, servidor <RADIUS_SERVER>, puerto 11812, autenticación PAP. Usa Test Connectivity para comprobarlo. El accounting solo se configura por CLI:
config user radius
edit "Bitwifi"
set server "<RADIUS_SERVER>"
set secret <SECRET>
set radius-port 11812
set auth-type pap
config accounting-server
edit 1
set status enable
set server "<RADIUS_SERVER>"
set secret <SECRET>
set port 11813
next
end
next
end
config user group
edit "Bitwifi-Guest"
set group-type firewall
set member "Bitwifi"
set authtimeout 60
next
end
- El usuario y la contraseña son la MAC del cliente en minúsculas con
:. Bitwifi la registra cuando el huésped completa el portal. - Bitwifi envía
Session-Timeouty el FortiGate lo aplica como límite duro (hard radius).authtimeout 60es la inactividad en minutos. - El grupo
Bitwifi-Guestsolo se usa en modo túnel.
Comprobar:
diagnose test authserver radius Bitwifi pap aa:bb:cc:dd:ee:ff aa:bb:cc:dd:ee:ff
Si esa MAC no está registrada, la respuesta esperada es un rechazo: confirma que el servidor contesta. Un timeout indica un problema de red o de secret.
2. Walled garden
Son los destinos que el huésped puede abrir antes del login. Los objetos se pueden crear en la GUI (Policy & Objects → Addresses, tipo FQDN); la exempt list solo se crea por CLI.
config firewall address
edit "bitwifi-portal"
set type fqdn
set fqdn "<PORTAL_HOST>"
next
edit "bitwifi-api"
set type fqdn
set fqdn "<API_HOST>"
next
edit "bitwifi-assets"
set type fqdn
set fqdn "assets.bitwifiapp.com"
next
edit "fonts-googleapis"
set type fqdn
set fqdn "fonts.googleapis.com"
next
edit "fonts-gstatic"
set type fqdn
set fqdn "fonts.gstatic.com"
next
edit "dns-google-1"
set subnet 8.8.8.8 255.255.255.255
next
edit "dns-google-2"
set subnet 8.8.4.4 255.255.255.255
next
end
config firewall addrgrp
edit "bitwifi-walled-garden"
set member "bitwifi-portal" "bitwifi-api" "bitwifi-assets" "fonts-googleapis" "fonts-gstatic" "dns-google-1" "dns-google-2"
next
end
config user security-exempt-list
edit "bitwifi-walled-garden"
config rule
edit 1
set dstaddr "bitwifi-walled-garden"
set service "ALL"
next
end
next
end
- Crea los objetos antes del grupo. Si un miembro no existe, FortiOS muestra
entry not found in datasourcey descarta el bloque. - No agregues YouTube, Google,
gstatic.comen general nigoogleusercontent.com. Comparten IPs conconnectivitycheck.gstatic.com; Android cree que ya tiene internet y no abre el portal. - Si Android sigue sin abrir el portal, quita también
fonts-googleapisyfonts-gstatic. - FortiGate no admite comodines en FQDN, así que el login con Facebook o Instagram es limitado. Revisa Walled garden.
Comprobar:
show user security-exempt-list bitwifi-walled-garden
diagnose firewall fqdn list-v4
3. SSID
Elige un modo según el sitio.
Opción A: túnel con red propia (recomendada)
El FortiGate aplica el portal y el SSID se vuelve una interfaz con su propia red. En un SSID existente, pon portal-type auth antes de local-bridging disable.
config wireless-controller vap
edit "<SSID>"
set ssid "<SSID>"
set security captive-portal
set portal-type auth
set selected-usergroups "Bitwifi-Guest"
set external-web "https://<PORTAL_HOST>/"
set security-exempt-list "bitwifi-walled-garden"
set security-redirect-url "https://<PORTAL_HOST>/"
set local-bridging disable
set intra-vap-privacy enable
next
end
config system interface
edit "<SSID>"
set ip <GW> <MASCARA>
set allowaccess ping
next
end
config system dhcp server
edit 0
set interface "<SSID>"
set default-gateway <GW>
set netmask <MASCARA>
set dns-service specify
set dns-server1 8.8.8.8
set dns-server2 8.8.4.4
set lease-time 3600
config ip-range
edit 1
set start-ip <PRIMERA_IP>
set end-ip <ULTIMA_IP>
next
end
next
end
config firewall policy
edit 0
set name "<SSID>-Internet"
set srcintf "<SSID>"
set dstintf "<WAN>"
set srcaddr "all"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set nat enable
next
end
-
El login se envía a
https://<GW>:1000/fgtauth. Si aparece un aviso de certificado, desactiva HTTPS en la autenticación:config user settingset auth-secure-http disableend -
La policy no lleva grupos: el portal se aplica en el SSID.
Opción B: bridge (el tráfico sale por una VLAN del switch)
El FortiAP aplica el portal. Solo portal-type external-auth admite el portal externo junto con la exempt list; con portal-type auth en bridge sale command parse error.
config wireless-controller vap
edit "<SSID>"
set ssid "<SSID>"
set security captive-portal
set portal-type external-auth
set external-web "https://<PORTAL_HOST>/"
set radius-server "Bitwifi"
set radius-mac-auth disable
set security-exempt-list "bitwifi-walled-garden"
set security-redirect-url "https://<PORTAL_HOST>/"
set local-bridging enable
set vlanid <VLAN>
set intra-vap-privacy enable
next
end
- Si
vlanidestá mal o queda en0, los clientes no reciben IP: Windows muestra169.254.x.xy Android se queda en "Obteniendo dirección IP". - El login se envía a
http://<IP-portal-del-AP>:2092/fgtauth, dentro de la VLAN de clientes. Si no conecta, usa la opción A. - Para revisar el portal en el propio FortiAP:
fapportal_diag -d intf.
Si el SSID es nuevo
Asígnalo al perfil de los APs: WiFi & Switch Controller → FortiAP Profiles → el perfil → SSIDs (Manual). Por CLI, revisa los perfiles con show wireless-controller wtp-profile y en la radio que corresponda agrega append vaps "<SSID>".
4. Diagnóstico
| Qué revisar | Comando |
|---|---|
| Configuración del SSID | show wireless-controller vap <SSID> |
| Clientes conectados | get wireless-controller wtp-status |
| Leases DHCP (solo túnel) | execute dhcp lease-list <SSID> |
Usuarios autenticados (deben salir con hard radius) | diagnose firewall auth list |
Debug del RADIUS:
diagnose debug application fnbamd -1
diagnose debug enable
Al terminar:
diagnose debug disable
diagnose debug reset
Notas de la CLI de FortiOS: grep acepta un solo patrón y no tiene -e; si un next falla se descarta toda la edición; abort sale sin guardar.