102 lines
5.1 KiB
Markdown
102 lines
5.1 KiB
Markdown
# 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):**
|
||
> 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.
|
||
|
||
## ⚠️ Consolas vía túnel — LIMITACIÓN conocida (Sept 2026)
|
||
|
||
Las consolas (VNC/terminal) **no funcionan a través del túnel Cloudflare** con PegaProx v1.1.1:
|
||
|
||
- En modo reverse proxy (`PEGAPROX_BEHIND_PROXY=true`), el data path de consolas pasa por gevent/pywsgi y el servidor emite **el handshake `101 Switching Protocols` duplicado** en el stream (verificado con raw socket sin Cloudflare). noVNC recibe el segundo 101 como basura de datos → cierra → "reconectando" ×3 → error.
|
||
- En modo nativo (actual), las consolas van por `wss://…:5001/5002` y **Cloudflare (plan free) no proxyea esos puertos** → imposibles por el túnel.
|
||
- Además, en el handler reverse-proxy existe un bug de variable: `port` (VNC 5900) sobrescribe el puerto API al construir `wss://{host}:{port}` contra PVE → `SSL: WRONG_VERSION_NUMBER`. Se parcheó localmente (`api_port`) y se revirtió al actualizar.
|
||
|
||
**Decisión**: panel por el túnel (OK), consolas por LAN (OK). Reportar bug upstream (doble 101 en reverse-proxy mode) y reintentar con la versión que lo corrija. Los parches locales quedaron revertidos (copia: `vms.py.bak` eliminado; ver historial de esta doc para el diff).
|
||
|
||
## 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)
|
||
- [x] 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
|
||
|
||
```bash
|
||
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*
|