Ingeniería inversa del protocolo inform de UniFi para el enrutamiento multiinquilino

Estructura del protocolo inform de UniFi
Cada dispositivo UniFi (puntos de acceso, switches, gateways) se comunica con su controlador mediante HTTP POST al puerto 8080 cada 10 segundos. Esto maneja estadísticas del dispositivo, sincronización de configuración, versiones de firmware y recuentos de clientes. Aunque la carga útil está cifrada con AES-128-CBC, la cabecera contiene identificación del dispositivo en texto plano.
Detalles de la cabecera del paquete
Los primeros 40 bytes de cada paquete inform están sin cifrar:
Desplazamiento Tamaño Campo ────── ───── ────────────────────────── 0 4B Magic: "TNBU" (0x544E4255) 4 4B Versión del paquete (actualmente 0) 8 6B Dirección MAC del dispositivo 14 2B Banderas (cifrado, comprimido, etc.) 16 2B Longitud del IV AES 18 16B IV AES 34 4B Versión de datos 38 4B Longitud de la carga útil 42+ var Carga útil cifrada (AES-128-CBC)
La dirección MAC en el desplazamiento de byte 8 está completamente sin cifrar. "TNBU" es "UBNT" al revés (símbolo bursátil de Ubiquiti y credenciales SSH por defecto).
Extracción de MAC y enrutamiento
Extraer la MAC requiere un código mínimo:
header := make([]byte, 40)
if _, err := io.ReadFull(conn, header); err != nil {
return err
}
if string(header[0:4]) != "TNBU" {
return fmt.Errorf("no es un paquete inform")
}
mac := fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
header[8], header[9], header[10],
header[11], header[12], header[13])Con la MAC en mano, el enrutamiento se vuelve simple: mantener una tabla que mapee direcciones MAC a inquilinos, luego reenviar todo el paquete (cabecera y carga útil cifrada sin modificar) al backend correcto. El proxy se puede implementar en unas 200 líneas de Go con una tabla de búsqueda MAC-a-inquilino en memoria.
Resumen de puertos del controlador
Otros puertos del controlador incluyen:
- 8443 TCP/HTTPS: Interfaz web y API
- 3478 UDP: STUN
- 6789 TCP: Prueba de velocidad (interno)
- 27117 TCP: MongoDB (interno)
- 10001 UDP: Descubrimiento L2 (solo local)
El enrutamiento basado en MAC sirve principalmente como respaldo para casos límite como dispositivos que aún no han sido reconfigurados o dispositivos restablecidos de fábrica que se readoptan. Una vez adoptados, los dispositivos pueden apuntarse a subdominios específicos del inquilino utilizando enrutamiento estándar de cabecera Host.
📖 Read the full source: HN AI Agents
👀 Ver también

boxBot: Un altavoz inteligente de código abierto impulsado por Claude y Hailo AI
Un desarrollador construyó un altavoz inteligente llamado boxBot utilizando Claude para el control de hardware basado en agentes, Raspberry Pi, acelerador de IA Hailo y SDK personalizado, código abierto en GitHub.

RCFlow: Orquestador de código abierto para Claude Code, Codex y OpenCode con gestión de múltiples sesiones
RCFlow es un orquestador AGPL v3 para agentes de codificación de IA (Claude Code, Codex, OpenCode) que proporciona una UI unificada para gestionar sesiones paralelas entre máquinas, con soporte de worktrees, planificación de tareas, seguimiento de artefactos y telemetría en vivo.

Seis Repositorios de GitHub para el Desarrollo de Código con Claude
Un usuario de Reddit probó y compartió seis repositorios de GitHub diseñados para mejorar proyectos de Claude Code, incluyendo herramientas para desarrollo estructurado, generación de interfaz de usuario, gestión de tareas, memoria, exploración del ecosistema y automatización de flujos de trabajo.

RelayPlane Proxy de Código Abierto Muestra una Reducción del 73% en Costos con Enrutamiento del Modelo Claude
RelayPlane, un proxy nativo de npm de código abierto para la API de Anthropic, demostró un ahorro de costos del 73,4% en pruebas comparativas al enrutar solicitudes a los modelos Claude apropiados según la complejidad. La herramienta redujo el costo por 10 solicitudes de $0,0323 a $0,0086 mientras mejoraba la latencia p50 de 1,55s a 0,78s.