1 vnc
GnomeZworc edited this page 2026-05-18 19:47:02 +02:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

📄 1. Résumé architecture (Markdown)

# Architecture VNC over WebSocket avec multiplexage Unix socket

## Vue densemble

Cette architecture permet dexposer des consoles VNC de machines virtuelles QEMU via WebSocket (compatible noVNC), en utilisant des sockets Unix pour renforcer la sécurité et simplifier le réseau.

[ Browser (noVNC) ] ↓ HTTPS / WebSocket [ Caddy (Global, piloté par orchestrateur) ] ↓ [ VNC Gateway (par host) ] ↓ [ Unix socket VNC ] ↓ [ VM QEMU ]


---

## Composants

### 1. QEMU (serveur VNC)

Chaque VM expose son interface VNC via un socket Unix :

```bash
qemu-system-x86_64 -vnc unix:/run/vnc/<vm-id>.sock

Caractéristiques :

  • Aucun port TCP exposé
  • Isolation forte par VM
  • Accès restreint via permissions filesystem

2. Organisation des sockets

/run/vnc/
 ├── vm-1.sock
 ├── vm-2.sock
 └── vm-3.sock

Le nom du fichier correspond directement à lidentifiant de la VM (vm-id).


3. VNC Gateway (multiplexeur)

Service unique par host.

Fonction

  • Écoute sur un port TCP unique (ex: :9000)
  • Accepte des connexions WebSocket
  • Route dynamiquement vers le bon socket Unix

Routing implicite

/vnc/<vm-id> → /run/vnc/<vm-id>.sock

Flux

WebSocket ⇄ Gateway ⇄ Unix socket ⇄ VNC (QEMU)

4. Caddy (reverse proxy global)

Configuré dynamiquement par lorchestrateur.

Rôle

  • Terminaison TLS
  • Routage vers le bon host
  • Basé sur le vm-id dans lURL

Exemple

https://example.com/vnc/vm-123

→ routé vers :

http://host-A:9000

5. Orchestrateur

Responsable du mapping :

vm-id → host

Fonctions :

  • allocation des VMs
  • suivi des hosts
  • configuration dynamique de Caddy

Flux complet

1. Client ouvre noVNC
2. Connexion WebSocket :
   wss://example.com/vnc/<vm-id>

3. Caddy :
   → route vers le bon host

4. Gateway :
   → ouvre /run/vnc/<vm-id>.sock

5. Communication VNC établie

Sécurité

Niveau système

  • sockets Unix avec permissions restreintes
  • aucun port VNC exposé

Gateway

  • validation stricte du vm-id
  • prévention path traversal

Edge (Caddy)

  • TLS obligatoire
  • authentification possible (JWT, session)

Avantages

  • Pas de ports dynamiques
  • Multiplexage efficace
  • Isolation forte (Unix sockets)
  • Scalabilité horizontale
  • Simplicité réseau
  • Compatibilité native avec noVNC

Points de vigilance

  • nettoyage des sockets après arrêt VM
  • gestion des timeouts WebSocket
  • limites système (file descriptors)
  • validation stricte des identifiants

Extension possibles

  • multi-tenant (/run/vnc/<tenant>/<vm>.sock)
  • authentification intégrée gateway
  • métriques (connexions actives)
  • autoscaling des hosts