Arquitectura
Diagrama de componentes
Sección titulada «Diagrama de componentes»Cliente Wi-Fi ──> Punto de Acceso (hostapd) ──> Catsplash │ │ │ ┌────┴────┐ │ │ Firewall│ │ │(iptables)│ │ └─────────┘ │ │ │ ┌────┴────┐ │ │ SQLite │ │ │ (WAL) │ │ └─────────┘ │ │ │ ┌────┴────┐ │ │ Portal │ │ │ Web │ │ └─────────┘Componentes principales
Sección titulada «Componentes principales»main.go (Punto de entrada)
Sección titulada «main.go (Punto de entrada)»- Carga configuración (TOML + flags de CLI).
- Abre base de datos SQLite con WAL.
- Inicializa firewall (iptables).
- Configura redirección DNAT.
- Inicia el Reaper (gestor de expiración de sesiones).
- Inicia el monitor de tráfico.
- Arranca el servidor web del portal.
- Espera señal de terminación para limpiar recursos.
config/ (Configuración)
Sección titulada «config/ (Configuración)»Carga y valida la configuración desde un archivo TOML. Soporta sobrescritura mediante flags de CLI (--iface, --wan, --port, --db).
firewall/ (Firewall)
Sección titulada «firewall/ (Firewall)»Módulo que gestiona iptables:
- Init(): Crea cadena personalizada
CATS_PREROUTING, NAT Masquerade, reglas FORWARD. - SetupRedirect(): Añade regla DNAT para redirigir tráfico HTTP al portal.
- AllowClient(): Inserta 2 reglas FORWARD (subida/bajada) + 1 regla NAT (bypass).
- BlockClient(): Elimina las reglas anteriores.
- Teardown(): Limpieza completa al salir.
state/ (Estado)
Sección titulada «state/ (Estado)»Gestión de sesiones con SQLite:
- DB: Abre conexión SQLite con WAL, migraciones automáticas.
- Reaper: Hilo que cada 10 segundos revisa sesiones expiradas y las cierra.
- Client: Estructura con MAC, IP, estado, tiempos, tráfico y límites.
server/ (Servidor web)
Sección titulada «server/ (Servidor web)»Sirve el portal cautivo:
/portal- Página de bienvenida con formulario de autenticación./auth- Procesa la autenticación y libera al cliente./admin- Panel de administración con autenticación básica./(catch-all) - Intercepta cualquier petición HTTP y redirige al portal.
catsctl/ (CLI)
Sección titulada «catsctl/ (CLI)»Herramienta de administración desde terminal con comandos: status, list, auth, kick, extend, limit, band.
Flujo de autenticación
Sección titulada «Flujo de autenticación»- Cliente se conecta al WiFi y recibe IP por DHCP.
- Cliente intenta navegar (ej.
http://ejemplo.com). - iptables redirige el puerto 80 al portal Catsplash (DNAT).
- Catsplash muestra el portal de bienvenida.
- Usuario acepta los términos → POST a
/auth. - Catsplash inserta reglas de firewall para liberar al cliente.
- Cliente tiene acceso a Internet hasta que expire su sesión.
- Al expirar, el Reaper bloquea al cliente y limpia las reglas.
Testing con network namespaces
Sección titulada «Testing con network namespaces»La suite de pruebas crea namespaces aislados:
ns_router: Ejecuta Catsplash.ns_wan: Simula Internet público.ns_client [1..100]: Clientes simulados con IP y MAC únicas.