Fortinet FortiGate + FortiAP
En el panel, el sitio debe tener el tipo de hardware Fortinet FortiGate (RADIUS).
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 | — |
| Puertos RADIUS | Autenticación y accounting. La guía usa los estándar como ejemplo; usa los que te entregue Bitwifi | 1812 / 1813 |
<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 de autenticación (en el ejemplo, 1812), 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 1812
set auth-type pap
config accounting-server
edit 1
set status enable
set server "<RADIUS_SERVER>"
set secret <SECRET>
set port 1813
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.