7.6 KiB
Proxy hotspot
El proxy hotspot forma parte del repositorio adn-monitor. Es un relé UDP entre hotspots DMR (Homebrew / HBP) y el MASTER del ADN DMR Peer Server: cada hotspot conectado se asigna a un puerto de destino dedicado en el host del peer server, de modo que muchos hotspots puedan compartir una IP pública sin choques de puertos.
Estructura: proxy/proxy.py, paquete proxy/src/adn_proxy/ (arquitectura limpia). GPL v3 (derivado del proxy original de Simon Adlem, G7RZU).
Por qué va con el monitor (y no dentro del peer server)
No hay un despliegue obligatorio único, pero hoy el proxy vive en el repo adn-monitor a propósito:
- Mismo despliegue que el panel:
ADN_CONFIG_PATH/ADN_PROXY_CONFIG_PATH,adn-monitor.yaml+adn-proxy.yaml, y normalmente el mismo host que PHP y MySQL. - El self-service (
Clients, RPTO,modified) está montado sobre ese ecosistema; el binario del peer server no posee esa base de datos ni el bloquePROXY. - División de roles: el ADN DMR Peer Server es el núcleo de radio (HBP/OpenBridge, bridges, voz, informes TCP). El proxy hotspot es un frente UDP opcional hacia un MASTER que ya escucha en un rango de puertos — útil cuando muchos hotspots comparten una dirección pública.
Integrar el proxy en el peer server (un binario, un adn-server.yaml) es imaginable para empaquetado, pero implica unificar configuración, replantear el cableado de self-service y más mantenimiento — solo compensa si quieres explícitamente un servidor “todo en uno” desplegable.
Fichero de configuración
El proxy no usa adn-server.yaml. Lee un YAML que incluye PROXY, SELF_SERVICE y LOGGER (log del proxy).
Orden de resolución
| Prioridad | Origen | Uso |
|---|---|---|
| 1 | python proxy/proxy.py --config /ruta/fichero.yaml |
Sobrescribe la ruta solo para este proceso. |
| 2 | ADN_PROXY_CONFIG_PATH |
Variable opcional: ruta absoluta a adn-proxy.yaml (config dedicada del proxy). |
| 3 | ADN_CONFIG_PATH |
Legado: ruta a un fichero combinado (p. ej. adn-monitor.yaml con PROXY incrustado — igual que monitor/backend). |
| 4 | Por defecto | proxy/adn-proxy.yaml junto a proxy/proxy.py si no hay variables de entorno. |
Copia proxy/adn-proxy.example.yaml a proxy/adn-proxy.yaml y edita. SELF_SERVICE debe coincidir con monitor/adn-monitor.yaml (mismas credenciales MySQL y PBKDF2).
Secciones leídas del fichero elegido:
PROXY— dirección de escucha, host master, rango de puertos de destino, timeouts, debug, listas negras.SELF_SERVICE— MySQL yUSE_SELFSERVICE(tablaClients, RPTO / opciones).LOGGER—LOG_PATHyPROXY_LOG_FILE(separado delLOG_FILEdeadn-monitor.yamlparamonitor.py).
Entorno opcional (ver proxy/README.md en el repo): p. ej. ADN_PROXY_DEBUG, ADN_PROXY_LISTENPORT.
Claves PROXY (en adn-proxy.yaml, o YAML combinado legado)
| Clave | Rol |
|---|---|
| MASTER | IP o nombre de host del ADN DMR Peer Server. Se resuelve a IPv4 al arrancar (Twisted necesita IP para write()). |
| LISTEN_PORT | Puerto UDP donde los hotspots se conectan al proxy (lo que configuran en el hotspot). |
| LISTEN_IP | Vacío suele significar todas las interfaces; si no, enlazar a esa dirección. |
| PORT / DESTPORT_START | Puerto UDP base en MASTER (alias DESTPORT_START); debe coincidir con SYSTEM.PORT en adn-server. |
| GENERATOR | El mismo entero que SYSTEM.GENERATOR; puertos UDP PORT…PORT+GENERATOR-1 en MASTER (uno por sesión de hotspot proxy). |
| TIMEOUT | Tiempo de inactividad / sesión (segundos). |
| STATS | Registro extra de estadísticas. |
| DEBUG | Log detallado de paquetes (o ADN_PROXY_DEBUG=1). |
| CLIENT_INFO | Información por cliente en logs. |
| BLACK_LIST / IP_BLACK_LIST | Bloquear IDs de radio o IPs de origen. |
Las claves internas tras la carga usan nombres mixtos (Master, ListenPort, …) — ver adn_proxy.infrastructure.config_loader.
El peer server (adn-server.yaml) debe cubrir el rango de puertos
El proxy reenvía tráfico a MASTER:puerto_asignado por cliente; puerto_asignado se elige en PORT…PORT+GENERATOR-1 (la misma semántica de PORT/GENERATOR que en Configuración del servidor).
El ADN DMR Peer Server debe escuchar UDP en ese host en cada puerto de ese rango (normalmente mediante GENERATOR en un bloque SYSTEM).
- Alinea
PROXY.PORTyPROXY.GENERATORconSYSTEM.PORTySYSTEM.GENERATORenadn-server.yaml. - Configuración típica: un
MODE: MASTERconGENERATORque expande aSYSTEM-0…SYSTEM-(N-1)en puertos UDP consecutivos — ver Configuración del servidor.
Si el servidor solo escucha p. ej. en 56400 pero el proxy envía a 56401, ese cliente no se registrará.
Cómo arranca el proceso
- Resolver ruta de config (
--config,ADN_PROXY_CONFIG_PATH,ADN_CONFIG_PATH, o por defectoproxy/adn-proxy.yaml). load_config()parsea YAML →PROXY,SELF_SERVICE,LOG.- Pool MySQL opcional si self-service / funciones de BD están activas.
- El reactor Twisted ejecuta UDP ProxyProtocol en
LISTEN_IP:LISTEN_PORT, reenviando aMASTER:puerto_destino_asignado.
Ejecución (desde la raíz de adn-monitor):
# YAML dedicado del proxy (recomendado)
export ADN_PROXY_CONFIG_PATH=/opt/adn-monitor/proxy/adn-proxy.yaml
python proxy/proxy.py
# O usar por defecto proxy/adn-proxy.yaml tras copiar desde adn-proxy.example.yaml
python proxy/proxy.py
# Legado: un solo YAML combinado con el monitor
export ADN_CONFIG_PATH=/opt/adn-monitor/monitor/adn-monitor.yaml
python proxy/proxy.py
# O ruta explícita para una ejecución
python proxy/proxy.py --config /opt/adn-monitor/proxy/adn-proxy.yaml
Usar systemd u otro supervisor junto a monitor.py y la pila PHP.
RPTO, opciones y self-service
El proxy nunca envía RPTO directamente al hotspot para actualizaciones self-service. Envía RPTO al MASTER (peer server); el servidor actualiza bridges/opciones y aplica el flujo HBP normal.
| Evento | Comportamiento del proxy |
|---|---|
| ~10 s tras login del hotspot (RPTC) | Leer Clients.options de la BD → RPTO → master (MASTER, dport). |
| Cada ~10 s | Filas con modified = 1 → RPTO → master, luego limpiar modified. |
| El hotspot envía RPTO | Reenvío al master; actualizaciones de BD según implementación. |
Detalle: Self-service y proxy/README.md en adn-monitor.
Visibilidad en el monitor
Los hotspots aparecen en el panel solo si el peer server envía informes TCP al mismo host/puerto que ADN_CONNECTION en adn-monitor.yaml. Alinea REPORTS en el servidor con ADN_IP / ADN_PORT. Ver Monitor e informes.
Ver también
- Configuración del monitor —
adn-monitor.yaml(panel, informes, MySQL para backend/monitor); detallePROXYarriba. - Arquitectura — dónde encaja el proxy en la pila.
- Self-service — BD,
modified, temporización RPTO.