No results
Table of Contents
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 d’ensemble
Cette architecture permet d’exposer 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 à l’identifiant 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 l’orchestrateur.
Rôle
- Terminaison TLS
- Routage vers le bon host
- Basé sur le
vm-iddans l’URL
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
Belong to
This project belong to Nicolas Boufidjeline (nicolas.boufidjeline@g3e.fr)