Files
network-documentation/servidores/pegaprox

PegaProx — Panel de Gestión Multi-Nodo

LXC: TYAN VMID 123
IP: 192.168.10.125
URL: https://192.168.10.125:5000
Versión: v1.1.1 (release estable, checkout por tag)
Estado: ✅ running


Descripción

Panel web para el control y administración centralizada de los 3 nodos Proxmox (TYAN, Cisco1, DellT430-2) sin necesidad de cluster Proxmox. Proporciona métricas en vivo, gestión de VMs/LXC, snapshots programados, backups, alertas, RBAC y auditoría.

Infraestructura

Parámetro Valor
Nodo TYAN (192.168.10.3)
VMID 123
Tipo LXC (unprivileged)
OS Ubuntu 24.04
CPU 4 cores
RAM 4 GB
Disco 40 GB (local-lvm)
IP 192.168.10.125/24
Instalación Git tag v1.1.1 en /opt/PegaProx + venv + deploy.sh --no-interactive
Servicio systemctl status pegaprox (systemd, autostart)
Puertos 5000 (Web), 5001 (VNC WebSocket), 5002 (SSH WebSocket)

Acceso

Método Detalle
Web UI (LAN) https://192.168.10.125:5000 (cert autofirmado)
Web UI (exterior) https://pegaprox.consultoria-as.com — vía Cloudflare Tunnel
Consolas (LAN) aceptar una vez https://192.168.10.125:5001 y https://192.168.10.125:5002 en el navegador
Admin usuario admin / Aasi940812
SSH ssh root@192.168.10.125 (password: Aasi940812)

Túnel Cloudflare

Parámetro Valor
Conector cloudflared 2026.9.1 (repo pkg.cloudflare.com, Ubuntu 24.04)
Servicio systemctl status cloudflared (token-managed, /etc/cloudflared/token)
Protocolo http2 forzado via override systemd (/etc/systemd/system/cloudflared.service.d/override.conf) — QUIC a region2 falló en el precheck
Origen Dashboard Zero Trust → Public hostname → Type HTTPS, Service https://localhost:5000, No TLS Verify activado

Troubleshooting del montaje (Sept 2026):

  1. Token del conector con "Invalid tunnel secret" → el token se había copiado mal/regenerado; pedirlo fresco del dashboard.
  2. Error 1016/530 → el registro DNS viejo pegaprox bloqueaba el public hostname; se borró y el túnel recreó el CNAME.
  3. Error 502 con x509 → Type HTTPS contra un origen con cert autofirmado.
  4. Error 502 con connection reset → Type HTTPS contra PegaProx en modo reverse proxy (HTTP plano); el Type correcto es HTTP.
  5. Consolas sin conectar por túnel → activado modo reverse proxy; el frontend enruta los WS por el puerto principal.

Router nginx (consolas por el dominio) — Sept 2026

Las consolas (VNC de VMs y terminal de LXC/nodos) funcionan por el dominio mediante nginx como router de WebSockets en el mismo LXC:

Componente Detalle
nginx 127.0.0.1:8080 (config: /etc/nginx/sites-available/pegaprox)
Panel + API / → http://127.0.0.1:5000 (pywsgi)
Consolas WS paths vncwebsocket/termwebsocket/shellws → http://127.0.0.1:5001 (standalone websockets lib)
Túnel cloudflared token-managed → Service http://localhost:8080 en el dashboard

Flujo verificado end-to-end: login → /api/ws/token → /console (ticket PVEVNC) → handshake 101 por el dominio → banner RFB del nodo ✓

SSH key para los nodos: PegaProx usa el CLI ssh para el túnel VNC (no acepta password). Clave generada en /opt/PegaProx/.ssh_console_key (ed25519), authorized_keys en root de los 3 nodos, y configurada en cada cluster vía PUT /api/clusters/<id> con ssh_key.

Notas de resolución (contexto):

  • Modo reverse-proxy de PegaProx con pywsgi+geventwebsocket emitía el 101 duplicado (bug upstream, reproducible sin Cloudflare); desactivado el interceptor (use_websocket_handler=False + override run_websocket en app.py).
  • Handler de PegaProx conectaba wss://{host}:{port-VNC} en vez del puerto API (8006); parche local api_port en vms.py.
  • El reloj de TYAN estuvo desfazado y provocó 401 invalid PVEVNC ticket intermitentes; verificar NTP si reaparece.
  • La ruta pywsgi de consola sigue con otro defecto (no entrega RFB); por eso las consolas van al 5001 standalone vía nginx.

Nodos Conectados (root@pam para pruebas)

Cluster Host Guests visibles
TYAN 192.168.10.3 14 (todos running)
Cisco1 192.168.10.185 16 (12 running)
DellT430-2 192.168.10.187 9 (todos running)

Nota: PegaProx auto-creó un API token para root@pam en cada nodo Proxmox (feature #110). Para producción, considerar crear un usuario PVE dedicado con roles limitados (PVEVMAdmin, PVEDatastoreAdmin, PVESysAdmin) en lugar de root.

Seguridad (pendiente de endurecer)

  • Activar 2FA (TOTP) en la cuenta admin (Settings → Security)
  • Exposición externa via Cloudflare Tunnel (sin puertos abiertos)
  • Activar Cloudflare Access (zero-trust con 2FA) sobre el hostname pegaprox.consultoria-as.com antes de uso en producción
  • Cambiar de root@pam a usuario PVE con permisos limitados al terminar las pruebas
  • La DB está encriptada (SQLCipher); master key en /etc/pegaprox/secret.key (respaldarla)

Actualizaciones

cd /opt/PegaProx
# verificar el tag estable antes de actualizar
git fetch --tags && git tag -l | sort -V | tail -5

O desde la UI: Settings → Updates → Check for Updates.


Documentación de PegaProx - Consultoria-AS
Actualizado: 19 Septiembre 2026