UniFi: Cómo lograr multi-tenancy con ingeniería inversa

Fuentes: Reverse-engineering the UniFi inform protocol — Tamarack

Este artículo de Tamarack Cloud detalla cómo se puede lograr el multi-tenancy en los controladores UniFi, un sistema que normalmente está diseñado para ser de instancia única por cliente. El autor, quien anteriormente ofreció servicios de alojamiento de controladores UniFi, se enfrentó a problemas de rentabilidad debido a la necesidad de una máquina virtual (VPS) dedicada por cada cliente. La solución radica en crear un proxy que dirija el tráfico de 'inform' a los controladores correctos, permitiendo que múltiples clientes compartan la misma infraestructura.

El protocolo 'inform' es crucial para el funcionamiento de UniFi. Los dispositivos (puntos de acceso, switches, gateways) envían periódicamente (cada 10 segundos) una solicitud HTTP POST a un puerto específico (8080) al controlador. Esta comunicación es esencial para la sincronización de configuración, el seguimiento de estadísticas del dispositivo y la actualización de firmware. La carga útil de estos mensajes está cifrada con AES-128-CBC, lo que inicialmente sugería la necesidad de claves de cifrado únicas por dispositivo, complicando la implementación de multi-tenancy.

La clave para la solución reside en el encabezado del paquete 'inform', que contiene información sin cifrar, incluyendo la dirección MAC del dispositivo (6 bytes). El controlador necesita esta dirección MAC para identificar el dispositivo y aplicar la clave de cifrado correcta. El proxy puede leer estos 6 bytes sin necesidad de descifrar el paquete, lo que permite enrutar el tráfico a la instancia de controlador correcta basada en una tabla de correspondencia MAC-cliente. El proxy, implementado en Go, es relativamente simple (aproximadamente 200 líneas de código) y actúa como una capa de fallback para casos como dispositivos no reconfigurados o restablecidos de fábrica.

Además del protocolo 'inform', otros puertos utilizados por el controlador (8443 para la interfaz web, 3478 para STUN, etc.) son más fáciles de gestionar en un entorno multi-tenant. El autor destaca que esta funcionalidad no fue intencionadamente diseñada por Ubiquiti para permitir la construcción de soluciones de terceros, pero la inclusión de la dirección MAC en el encabezado sin cifrar proporciona una oportunidad para la optimización y el multi-tenancy. El artículo concluye que esta técnica transforma una operación que inicialmente era económicamente inviable en un modelo de negocio rentable.