PegaProx: consolas por dominio via nginx router (8080) + SSH keys nodos
This commit is contained in:
@@ -58,15 +58,26 @@ Panel web para el control y administración centralizada de los 3 nodos Proxmox
|
||||
> 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)
|
||||
## Router nginx (consolas por el dominio) — Sept 2026
|
||||
|
||||
Las consolas (VNC/terminal) **no funcionan a través del túnel Cloudflare** con PegaProx v1.1.1:
|
||||
Las consolas (VNC de VMs y terminal de LXC/nodos) funcionan **por el dominio** mediante nginx como router de WebSockets en el mismo LXC:
|
||||
|
||||
- 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.
|
||||
| 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 |
|
||||
|
||||
**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).
|
||||
**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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user