5.5 KiB
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.
- Repo: https://github.com/PegaProx/project-pegaprox
- Docs: https://docs.pegaprox.com
- Licencia: AGPL-3.0
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):
- Token del conector con "Invalid tunnel secret" → el token se había copiado mal/regenerado; pedirlo fresco del dashboard.
- Error 1016/530 → el registro DNS viejo
pegaproxbloqueaba el public hostname; se borró y el túnel recreó el CNAME.- Error 502 con x509 → Type
HTTPScontra un origen con cert autofirmado.- Error 502 con connection reset → Type
HTTPScontra PegaProx en modo reverse proxy (HTTP plano); el Type correcto esHTTP.- 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
101duplicado (bug upstream, reproducible sin Cloudflare); desactivado el interceptor (use_websocket_handler=False+ overriderun_websocketenapp.py). - Handler de PegaProx conectaba
wss://{host}:{port-VNC}en vez del puerto API (8006); parche localapi_portenvms.py. - El reloj de TYAN estuvo desfazado y provocó
401 invalid PVEVNC ticketintermitentes; 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@pamen 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.comantes 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