Les Machines Virtuelles
Qu’est-ce que la virtualisation ?
Les machines virtuelles (VMs) sont au cœur de l’informatique moderne. Que ce soit pour le cloud computing, le développement logiciel, les tests de sécurité ou l’administration système, la virtualisation est une compétence fondamentale. Ce guide couvre les principes de fonctionnement, les architectures d’hyperviseurs, et la mise en pratique.
La virtualisation est une technologie qui permet de créer des versions logicielles (virtuelles) de ressources matérielles : processeurs, mémoire, stockage, réseau. Concrètement, elle permet d’exécuter plusieurs systèmes d’exploitation isolés sur une seule machine physique.
Pourquoi virtualiser ?
| Avantage | Description |
|---|---|
| Isolation | Chaque VM est un environnement cloisonné. Un crash ou une compromission d’une VM n’affecte pas les autres ni l’hôte. |
| Consolidation | Un seul serveur physique peut héberger 10, 20, voire 100+ VMs, réduisant les coûts matériels de 60 à 80%. |
| Portabilité | Une VM est un ensemble de fichiers. Elle peut être copiée, déplacée, sauvegardée, restaurée facilement. |
| Snapshots | Possibilité de capturer l’état complet d’une VM à un instant T et d’y revenir instantanément. |
| Multi-OS | Exécuter Linux, Windows, BSD, etc. simultanément sur la même machine physique. |
| Scalabilité | Provisionner de nouvelles VMs en quelques minutes au lieu de commander du matériel. |
| Sécurité | Tester des logiciels malveillants, des configurations risquées, dans un bac à sable isolé. |
Historique rapide
- 1960s : IBM développe la virtualisation sur mainframes (CP/CMS)
- 1998 : VMware est fondée, apportant la virtualisation sur x86
- 2003 : Xen, premier hyperviseur open source performant
- 2006 : Intel VT-x et AMD-V ajoutent le support matériel de la virtualisation dans les processeurs
- 2007 : KVM intégré au noyau Linux
- 2008 : Microsoft lance Hyper-V
- 2010s : Le cloud computing (AWS, Azure, GCP) repose massivement sur la virtualisation
Fonctionnement interne d’une VM
La couche d’abstraction matérielle
Le principe fondamental est l’abstraction : l’hyperviseur crée une couche logicielle entre le matériel réel et les systèmes invités. Chaque VM “croit” disposer de son propre matériel dédié.
graph TB
subgraph "Machine Physique"
HW["🖥️ Matériel Physique<br/>CPU • RAM • Disque • NIC"]
HV["⚙️ Hyperviseur<br/>Couche d'abstraction"]
subgraph "VM 1"
V1OS["OS Invité<br/>Ubuntu 24.04"]
V1APP["Applications<br/>Nginx, PostgreSQL"]
end
subgraph "VM 2"
V2OS["OS Invité<br/>Windows Server"]
V2APP["Applications<br/>IIS, SQL Server"]
end
subgraph "VM 3"
V3OS["OS Invité<br/>Debian 12"]
V3APP["Applications<br/>Docker, Kubernetes"]
end
end
HW --> HV
HV --> V1OS
HV --> V2OS
HV --> V3OS
V1OS --> V1APP
V2OS --> V2APP
V3OS --> V3APP
style HW fill:#e74c3c,color:#fff
style HV fill:#f39c12,color:#fff
style V1OS fill:#3498db,color:#fff
style V2OS fill:#3498db,color:#fff
style V3OS fill:#3498db,color:#fff
style V1APP fill:#2ecc71,color:#fff
style V2APP fill:#2ecc71,color:#fff
style V3APP fill:#2ecc71,color:#fffComposants virtualisés
L’hyperviseur émule ou paravirtualise les composants suivants pour chaque VM :
- vCPU (Virtual CPU) : Le planificateur de l’hyperviseur répartit les cycles CPU physiques entre les vCPUs des VMs. Chaque VM peut disposer de 1 à N vCPUs.
- vRAM : La mémoire est divisée et attribuée à chaque VM. L’hyperviseur gère les tables de pages imbriquées (Nested Page Tables / EPT chez Intel, RVI chez AMD).
- vDisk : Le stockage est virtualisé via des fichiers image disque (VMDK, VDI, QCOW2, VHDX). Ces fichiers contiennent l’intégralité du système de fichiers de la VM.
- vNIC (Virtual Network Interface) : Chaque VM reçoit une carte réseau virtuelle avec sa propre adresse MAC, connectée à un switch virtuel.
- vGPU : Certains hyperviseurs permettent le partage du GPU physique entre VMs (GPU passthrough, SR-IOV, vGPU NVIDIA GRID).
Extensions matérielles de virtualisation
Les processeurs modernes intègrent des instructions dédiées à la virtualisation :
| Technologie | Fabricant | Rôle |
|---|---|---|
| VT-x | Intel | Virtualisation CPU, modes root/non-root |
| AMD-V (SVM) | AMD | Équivalent AMD de VT-x |
| EPT | Intel | Traduction d’adresses mémoire à deux niveaux (Second Level Address Translation) |
| RVI (NPT) | AMD | Équivalent AMD d’EPT |
| VT-d / AMD-Vi | Intel / AMD | IOMMU — permet le passthrough de périphériques PCI vers les VMs |
| SR-IOV | Standard PCI-SIG | Partage matériel d’un périphérique PCIe entre plusieurs VMs |
Vérifier le support : Sous Linux,
grep -E 'vmx|svm' /proc/cpuinfoaffiche les flags de virtualisation. Sous Windows,systeminfoindique si Hyper-V est compatible.
Les hyperviseurs : Type 1 vs Type 2
L’hyperviseur (ou VMM — Virtual Machine Monitor) est le logiciel qui crée et gère les machines virtuelles. On distingue deux architectures fondamentalement différentes.
Hyperviseur de Type 1 (Bare-Metal)
L’hyperviseur s’installe directement sur le matériel, sans OS intermédiaire. Il accède directement au CPU, à la RAM et aux périphériques. C’est l’architecture utilisée en production et dans les datacenters.
graph TB
subgraph "Architecture Type 1 — Bare-Metal"
HW1["🖥️ Matériel Physique<br/>CPU • RAM • Stockage • Réseau"]
HYP1["⚙️ Hyperviseur Type 1<br/>ESXi / Hyper-V / Xen / KVM*"]
subgraph VM_A["VM A"]
OS_A["OS Invité A"]
APP_A["Apps A"]
end
subgraph VM_B["VM B"]
OS_B["OS Invité B"]
APP_B["Apps B"]
end
subgraph VM_C["VM C"]
OS_C["OS Invité C"]
APP_C["Apps C"]
end
end
HW1 --> HYP1
HYP1 --> OS_A --> APP_A
HYP1 --> OS_B --> APP_B
HYP1 --> OS_C --> APP_C
style HW1 fill:#e74c3c,color:#fff
style HYP1 fill:#e67e22,color:#fff
style OS_A fill:#3498db,color:#fff
style OS_B fill:#3498db,color:#fff
style OS_C fill:#3498db,color:#fff
style APP_A fill:#2ecc71,color:#fff
style APP_B fill:#2ecc71,color:#fff
style APP_C fill:#2ecc71,color:#fffCaractéristiques :
- Accès direct au matériel → performances maximales
- Moins de surface d’attaque (pas d’OS hôte complet)
- Gestion centralisée de dizaines/centaines de VMs
- Conçu pour le haute disponibilité (HA, live migration, failover)
Exemples : VMware ESXi, Microsoft Hyper-V Server, Citrix Hypervisor (ex-XenServer), Proxmox VE, KVM (intégré au noyau Linux)
Hyperviseur de Type 2 (Hosted)
L’hyperviseur s’exécute par-dessus un système d’exploitation hôte, comme une application classique. L’OS hôte gère le matériel, et l’hyperviseur lui demande des ressources.
graph TB
subgraph "Architecture Type 2 — Hosted"
HW2["🖥️ Matériel Physique<br/>CPU • RAM • Stockage • Réseau"]
HOST_OS["💻 Système d'Exploitation Hôte<br/>Windows / macOS / Linux"]
HYP2["⚙️ Hyperviseur Type 2<br/>VirtualBox / VMware Workstation / Parallels"]
subgraph VM_X["VM X"]
OS_X["OS Invité X"]
APP_X["Apps X"]
end
subgraph VM_Y["VM Y"]
OS_Y["OS Invité Y"]
APP_Y["Apps Y"]
end
OTHER["📁 Autres applications<br/>de l'hôte (navigateur, IDE...)"]
end
HW2 --> HOST_OS
HOST_OS --> HYP2
HOST_OS --> OTHER
HYP2 --> OS_X --> APP_X
HYP2 --> OS_Y --> APP_Y
style HW2 fill:#e74c3c,color:#fff
style HOST_OS fill:#9b59b6,color:#fff
style HYP2 fill:#e67e22,color:#fff
style OS_X fill:#3498db,color:#fff
style OS_Y fill:#3498db,color:#fff
style APP_X fill:#2ecc71,color:#fff
style APP_Y fill:#2ecc71,color:#fff
style OTHER fill:#95a5a6,color:#fffCaractéristiques :
- Facile à installer (comme une application)
- Cohabite avec les applications de l’hôte
- Overhead supplémentaire : les requêtes passent par l’OS hôte → latence accrue
- Idéal pour le développement, les tests, l’apprentissage
Exemples : Oracle VirtualBox, VMware Workstation/Fusion, Parallels Desktop, GNOME Boxes
Comparaison directe Type 1 vs Type 2
| Critère | Type 1 (Bare-Metal) | Type 2 (Hosted) |
|---|---|---|
| Performance | Excellente (accès direct au matériel) | Bonne (overhead de l’OS hôte) |
| Latence | Minimale | Plus élevée (couche OS supplémentaire) |
| Sécurité | Surface d’attaque réduite | Dépend de la sécurité de l’OS hôte |
| Installation | Dédiée (remplace l’OS) | Simple (application classique) |
| Usage | Production, datacenters, cloud | Développement, tests, apprentissage |
| Coût | Souvent payant (licences entreprise) | Souvent gratuit (VirtualBox) |
| Nombre de VMs | Dizaines à centaines | Quelques-unes |
| Live migration | Oui | Non |
| HA / Clustering | Oui | Non |
Cas particulier : KVM
KVM (Kernel-based Virtual Machine) est un cas hybride intéressant. Techniquement, c’est un module du noyau Linux qui transforme le kernel en hyperviseur de Type 1. Mais comme Linux reste opérationnel en tant qu’OS hôte, il est parfois classé comme Type 2.
graph TB
subgraph "Architecture KVM"
HWK["🖥️ Matériel Physique"]
LINUX["🐧 Noyau Linux + Module KVM<br/>(L'OS hôte DEVIENT l'hyperviseur)"]
QEMU["QEMU<br/>(Émulation des périphériques)"]
subgraph VM_K1["VM 1"]
OSK1["OS Invité"]
end
subgraph VM_K2["VM 2"]
OSK2["OS Invité"]
end
APPS_HOST["Applications hôte Linux"]
end
HWK --> LINUX
LINUX --> QEMU
LINUX --> APPS_HOST
QEMU --> OSK1
QEMU --> OSK2
style HWK fill:#e74c3c,color:#fff
style LINUX fill:#8e44ad,color:#fff
style QEMU fill:#e67e22,color:#fff
style OSK1 fill:#3498db,color:#fff
style OSK2 fill:#3498db,color:#fff
style APPS_HOST fill:#95a5a6,color:#fffComparatif des solutions de virtualisation
| Solution | Type | Licence | OS Hôte | Points forts | Points faibles |
|---|---|---|---|---|---|
| VMware ESXi | Type 1 | Propriétaire (gratuit limité) | Bare-metal | Leader du marché, écosystème riche (vSphere, vCenter) | Coût des licences entreprise, acquisition par Broadcom |
| VMware Workstation | Type 2 | Propriétaire (gratuit depuis 2024) | Win/Linux | Performances, snapshots avancés | Moins de communauté open source |
| VirtualBox | Type 2 | GPLv2 (open source) | Win/Mac/Linux | Gratuit, multiplateforme, communauté active | Performances GPU limitées |
| Hyper-V | Type 1 | Intégré à Windows | Win (bare-metal) | Natif Windows, gratuit avec Windows Pro/Server | Écosystème Windows uniquement |
| KVM/QEMU | Type 1 (hybride) | GPLv2 | Linux | Intégré au kernel, performances natives, gratuit | Configuration CLI complexe |
| Proxmox VE | Type 1 | AGPLv3 | Bare-metal (Debian) | Interface web, KVM + LXC, clustering gratuit | Support commercial payant |
| Parallels | Type 2 | Propriétaire | macOS | Optimisé Apple Silicon, intégration macOS | macOS uniquement, payant |
| Xen/Citrix | Type 1 | GPLv2 / Propriétaire | Bare-metal | Paravirtualisation performante, utilisé par AWS | Complexité de configuration |
VMware
VMware (désormais propriété de Broadcom) est l’un des acteurs historiques de la virtualisation.
VMware Workstation / Fusion (Usage personnel)
Depuis 2024, VMware Workstation (Windows/Linux) et Fusion (macOS) sont gratuits pour un usage personnel.
Installation :
- Téléchargez depuis le site de Broadcom
- Lancez l’installateur et suivez les instructions
- Créez une nouvelle VM :
- “Créer une nouvelle machine virtuelle”
- Installation typique ou personnalisée
- Sélectionnez votre ISO
- Configurez les ressources (CPU, RAM, disque)
Fonctionnalités clés :
- Snapshots chaînés : arbre de snapshots avec branches multiples
- Clonage : linked clones (économie d’espace) ou full clones
- Réseau virtuel avancé : Virtual Network Editor avec NAT, bridge, host-only personnalisables
- Support 3D accéléré : DirectX 11 / OpenGL 4.1
- Partage de dossiers via VMware Tools
- Chiffrement de VM : protection par mot de passe de l’intégralité de la VM
VMware ESXi / vSphere (Usage professionnel)
Architecture datacenter complète :
- ESXi : hyperviseur bare-metal installé directement sur le serveur
- vCenter Server : gestion centralisée d’un cluster de serveurs ESXi
- vMotion : migration à chaud de VMs entre serveurs sans interruption
- DRS (Distributed Resource Scheduler) : équilibrage automatique de charge
- vSAN : stockage distribué sur les disques locaux des serveurs
- HA : redémarrage automatique des VMs en cas de panne d’un hôte
graph TB
subgraph "Infrastructure VMware vSphere"
VC["vCenter Server<br/>Gestion centralisée"]
subgraph ESXi_1["Serveur ESXi 1"]
VM1A["VM A"]
VM1B["VM B"]
end
subgraph ESXi_2["Serveur ESXi 2"]
VM2A["VM C"]
VM2B["VM D"]
end
subgraph ESXi_3["Serveur ESXi 3"]
VM3A["VM E"]
VM3B["VM F"]
end
SAN["Stockage Partagé<br/>(SAN / NFS / vSAN)"]
end
VC --> ESXi_1
VC --> ESXi_2
VC --> ESXi_3
ESXi_1 --> SAN
ESXi_2 --> SAN
ESXi_3 --> SAN
VM1A -.->|"vMotion"| VM2A
style VC fill:#1a5276,color:#fff
style SAN fill:#7d3c98,color:#fff
style VM1A fill:#3498db,color:#fff
style VM1B fill:#3498db,color:#fff
style VM2A fill:#3498db,color:#fff
style VM2B fill:#3498db,color:#fff
style VM3A fill:#3498db,color:#fff
style VM3B fill:#3498db,color:#fffVirtualBox
Oracle VirtualBox est la solution de virtualisation gratuite et open source la plus populaire pour un usage desktop.
Installation et création de VM
- Téléchargez depuis virtualbox.org
- Installez le logiciel + l’Extension Pack (USB 3.0, chiffrement, PXE boot)
- Création via l’interface :
- “Nouvelle” → Nom, type d’OS, version
- Allocation RAM (ex : 4096 Mo)
- Disque dur virtuel : VDI dynamiquement alloué (économise l’espace)
- Configuration réseau
Création via CLI :
# Créer et enregistrer la VMVBoxManage createvm --name "UbuntuVM" --ostype Ubuntu_64 --register
# Configurer CPU et RAMVBoxManage modifyvm "UbuntuVM" --memory 4096 --cpus 2 --vram 128
# Créer un disque de 40 GoVBoxManage createhd --filename "UbuntuVM.vdi" --size 40000
# Ajouter un contrôleur SATA et attacher le disqueVBoxManage storagectl "UbuntuVM" --name "SATA" --add sata --controller IntelAhciVBoxManage storageattach "UbuntuVM" --storagectl "SATA" --port 0 --device 0 \ --type hdd --medium "UbuntuVM.vdi"
# Attacher un ISO au lecteur DVDVBoxManage storagectl "UbuntuVM" --name "IDE" --add ideVBoxManage storageattach "UbuntuVM" --storagectl "IDE" --port 0 --device 0 \ --type dvddrive --medium ubuntu-24.04-live-server-amd64.iso
# Configurer le réseau en NATVBoxManage modifyvm "UbuntuVM" --nic1 nat
# Démarrer la VMVBoxManage startvm "UbuntuVM"Fonctionnalités notables
- Guest Additions : pilotes et utilitaires améliorant les performances et l’intégration (redimensionnement d’écran, copier-coller, dossiers partagés)
- Snapshots : sauvegarde de l’état complet avec possibilité de retour instantané
- Teleportation : migration de VMs entre deux instances VirtualBox
- Import/Export OVA : format standard pour la portabilité des VMs
- Headless mode : exécution sans interface graphique via
VBoxManage startvm "VM" --type headless
Hyper-V
Hyper-V est l’hyperviseur natif de Microsoft, intégré dans Windows 10/11 Pro/Enterprise et Windows Server.
Particularité architecturale
Contrairement à ce qu’on pourrait penser, Hyper-V est un hyperviseur de Type 1. Lorsqu’il est activé, il s’insère entre le matériel et Windows, qui devient lui-même une VM privilégiée appelée la “partition parente”.
graph TB
subgraph "Architecture Hyper-V"
HW_HV["🖥️ Matériel Physique"]
HYP_HV["⚙️ Hyperviseur Hyper-V<br/>(Type 1 — Bare-Metal)"]
subgraph Parent["Partition Parente (Root)"]
WIN_HOST["Windows Hôte<br/>(VM privilégiée)"]
MGMT["Outils de gestion<br/>Hyper-V Manager / PowerShell"]
end
subgraph Child1["Partition Enfant 1"]
CHILD_OS1["Windows Server 2022"]
end
subgraph Child2["Partition Enfant 2"]
CHILD_OS2["Ubuntu 24.04"]
end
end
HW_HV --> HYP_HV
HYP_HV --> WIN_HOST
HYP_HV --> CHILD_OS1
HYP_HV --> CHILD_OS2
WIN_HOST --> MGMT
style HW_HV fill:#e74c3c,color:#fff
style HYP_HV fill:#e67e22,color:#fff
style WIN_HOST fill:#9b59b6,color:#fff
style MGMT fill:#8e44ad,color:#fff
style CHILD_OS1 fill:#3498db,color:#fff
style CHILD_OS2 fill:#3498db,color:#fffActivation et configuration
Via l’interface graphique :
- “Programmes et fonctionnalités” → “Activer ou désactiver des fonctionnalités Windows”
- Cochez “Hyper-V” → OK → Redémarrage
Via PowerShell (administrateur) :
# Activer Hyper-VEnable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
# Créer un commutateur virtuelNew-VMSwitch -Name "MonSwitch" -SwitchType Internal
# Créer une VMNew-VM -Name "ServeurTest" -MemoryStartupBytes 4GB -Generation 2 ` -NewVHDPath "C:\VMs\ServeurTest.vhdx" -NewVHDSizeBytes 50GB ` -SwitchName "MonSwitch"
# Attacher un ISOAdd-VMDvdDrive -VMName "ServeurTest" -Path "C:\ISOs\ubuntu-24.04.iso"
# Configurer la mémoire dynamiqueSet-VMMemory -VMName "ServeurTest" -DynamicMemoryEnabled $true ` -MinimumBytes 2GB -MaximumBytes 8GB
# Démarrer la VMStart-VM -Name "ServeurTest"Fonctionnalités spécifiques
- Génération 2 : support UEFI, Secure Boot, boot PXE sur carte réseau standard
- Mémoire dynamique : allocation adaptative de RAM selon les besoins réels de la VM
- Checkpoints : standard (état complet) ou de production (VSS/fsfreeze pour la cohérence applicative)
- Réplication Hyper-V : réplication asynchrone vers un second hôte pour la reprise après sinistre
- Nested Virtualization : exécuter Hyper-V dans une VM Hyper-V (tests de clusters)
- Discrete Device Assignment (DDA) : passthrough de GPU/NVMe vers une VM
- WSL 2 : utilise en réalité Hyper-V en arrière-plan pour exécuter un vrai noyau Linux
⚠️ Attention : Hyper-V est incompatible avec certains autres hyperviseurs (VirtualBox en mode VT-x par exemple). L’activation de Hyper-V peut impacter les performances des autres solutions.
KVM/QEMU
KVM (Kernel-based Virtual Machine) est le standard de virtualisation sous Linux. Combiné avec QEMU (Quick Emulator), il offre des performances proches du natif.
Installation sous Debian/Ubuntu
# Installer les paquets nécessairessudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
# Ajouter l'utilisateur au groupe libvirtsudo usermod -aG libvirt $USERsudo usermod -aG kvm $USER
# Vérifier que KVM est disponiblekvm-ok# INFO: /dev/kvm exists# KVM acceleration can be usedCréation d’une VM avec virt-install
sudo virt-install \ --name ubuntu-server \ --ram 4096 \ --vcpus 2 \ --disk path=/var/lib/libvirt/images/ubuntu.qcow2,size=40,format=qcow2 \ --os-variant ubuntu24.04 \ --network bridge=br0 \ --graphics vnc \ --cdrom /var/lib/libvirt/isos/ubuntu-24.04-live-server-amd64.isoGestion avec virsh
# Lister les VMsvirsh list --all
# Démarrer / Arrêtervirsh start ubuntu-servervirsh shutdown ubuntu-servervirsh destroy ubuntu-server # Arrêt forcé
# Snapshotvirsh snapshot-create-as ubuntu-server --name "avant-upgrade"virsh snapshot-revert ubuntu-server "avant-upgrade"
# Informationsvirsh dominfo ubuntu-servervirsh domblklist ubuntu-servervirt-manager
virt-manager fournit une interface graphique complète pour gérer KVM/QEMU/libvirt, comparable à l’expérience VirtualBox mais avec les performances de KVM.
Proxmox VE
Proxmox Virtual Environment est une plateforme de virtualisation open source basée sur Debian, combinant KVM (VMs) et LXC (conteneurs).
Points forts
- Interface web complète (pas besoin de client lourd)
- Clustering multi-nœuds intégré et gratuit
- Stockage distribué avec Ceph intégré
- Sauvegardes avec Proxmox Backup Server
- Migration à chaud des VMs et conteneurs
- API REST complète pour l’automatisation
- Firewall intégré par VM/conteneur
graph TB
subgraph "Cluster Proxmox VE"
subgraph Node1["Nœud Proxmox 1"]
KVM1["VM KVM"]
LXC1["Conteneur LXC"]
end
subgraph Node2["Nœud Proxmox 2"]
KVM2["VM KVM"]
LXC2["Conteneur LXC"]
end
subgraph Node3["Nœud Proxmox 3"]
KVM3["VM KVM"]
LXC3["Conteneur LXC"]
end
CEPH["Ceph Storage<br/>(Stockage distribué)"]
WEB["Interface Web<br/>https://proxmox:8006"]
end
WEB --> Node1
WEB --> Node2
WEB --> Node3
Node1 --> CEPH
Node2 --> CEPH
Node3 --> CEPH
style CEPH fill:#7d3c98,color:#fff
style WEB fill:#1a5276,color:#fff
style KVM1 fill:#3498db,color:#fff
style KVM2 fill:#3498db,color:#fff
style KVM3 fill:#3498db,color:#fff
style LXC1 fill:#27ae60,color:#fff
style LXC2 fill:#27ae60,color:#fff
style LXC3 fill:#27ae60,color:#fffCas d’usage concrets
1. Lab de test et apprentissage
Créez un mini-réseau d’entreprise virtualisé pour pratiquer l’administration système :
graph LR
subgraph "Lab virtuel"
FW["pfSense<br/>(Firewall)"]
DC["Windows Server<br/>(Active Directory)"]
WEB["Debian<br/>(Serveur Web)"]
DB["Ubuntu<br/>(Base de données)"]
CLIENT["Windows 11<br/>(Poste client)"]
end
Internet["🌐 Internet"] --> FW
FW --> DC
FW --> WEB
FW --> DB
DC --> CLIENT
style FW fill:#e74c3c,color:#fff
style DC fill:#3498db,color:#fff
style WEB fill:#27ae60,color:#fff
style DB fill:#f39c12,color:#fff
style CLIENT fill:#9b59b6,color:#fff2. Développement multi-environnement
- VM avec l’environnement de staging reproduisant la production
- VM avec une version spécifique d’un OS pour le debugging
- VM avec des outils de pentest (Kali Linux)
3. Homelab et self-hosting
- Proxmox sur un mini-PC pour héberger ses propres services
- VM pour chaque service : Nextcloud, Jellyfin, Home Assistant, Pi-hole
- Sauvegardes automatiques et snapshots réguliers
4. Sécurité et analyse de malwares
- VM isolée (réseau interne uniquement) pour exécuter des échantillons suspects
- Snapshot avant analyse → exécution → analyse → revert au snapshot propre
Performances et optimisation
Bonnes pratiques d’allocation de ressources
| Ressource | Recommandation |
|---|---|
| vCPU | Ne pas allouer plus de vCPUs que de cœurs physiques par VM. Ratio total recommandé : 1:1 à 4:1 selon la charge. |
| RAM | Laisser minimum 2 Go à l’hôte. Utiliser la mémoire dynamique si disponible. |
| Disque | Utiliser l’allocation dynamique (thin provisioning). Préférer les SSD/NVMe. Format QCOW2 (KVM) ou VMDK thin (VMware). |
| Réseau | Utiliser les pilotes paravirtualisés (virtio pour KVM, VMXNET3 pour VMware) pour des performances réseau maximales. |
Pilotes paravirtualisés
Les pilotes paravirtualisés permettent à l’OS invité de “savoir” qu’il est dans une VM et de communiquer directement avec l’hyperviseur, évitant l’émulation coûteuse :
| Hyperviseur | Pilotes | Installation |
|---|---|---|
| VMware | VMware Tools | Installer depuis le menu VM |
| VirtualBox | Guest Additions | sudo apt install virtualbox-guest-utils |
| KVM/QEMU | virtio | Inclus dans le noyau Linux, pilotes Windows via virtio-win ISO |
| Hyper-V | Integration Services | Inclus dans Windows, linux-azure pour Linux |
Formats de disques virtuels
| Format | Hyperviseur | Allocation dynamique | Snapshots | Notes |
|---|---|---|---|---|
| VMDK | VMware | Oui (thin) | Oui | Standard VMware, portable |
| VDI | VirtualBox | Oui | Oui | Format natif VirtualBox |
| QCOW2 | KVM/QEMU | Oui | Oui | Compressible, chiffrable, copy-on-write |
| VHDX | Hyper-V | Oui | Oui | Jusqu’à 64 To, résilient |
| RAW | Tous | Non | Non | Performances maximales, pas de fonctionnalités avancées |
💡 Conversion entre formats :
qemu-img convert -f vmdk -O qcow2 disk.vmdk disk.qcow2
Réseau et sous-réseaux pour VMs
La configuration réseau est essentielle pour vos machines virtuelles. Les logiciels de virtualisation proposent généralement plusieurs modes.
Concepts de base
Un sous-réseau divise un réseau IP en segments logiques :
- Adresse IP : identifie un hôte (ex :
192.168.1.15) - Masque de sous-réseau : sépare la partie réseau de la partie hôte (ex :
255.255.255.0=/24= 254 hôtes possibles) - Passerelle : routeur permettant la communication entre sous-réseaux
Modes de réseau
graph TB
subgraph "Mode NAT"
NAT_INT["🌐 Internet"]
NAT_HOST["Hôte<br/>192.168.1.10"]
NAT_VM["VM<br/>10.0.2.15"]
NAT_INT <--> NAT_HOST <-->|"NAT<br/>(traduction d'adresse)"| NAT_VM
end
subgraph "Mode Bridge"
BR_INT["🌐 Internet"]
BR_ROUTER["Routeur<br/>192.168.1.1"]
BR_HOST["Hôte<br/>192.168.1.10"]
BR_VM["VM<br/>192.168.1.20"]
BR_INT <--> BR_ROUTER
BR_ROUTER <--> BR_HOST
BR_ROUTER <-->|"Même sous-réseau"| BR_VM
end
subgraph "Mode Host-Only"
HO_HOST["Hôte<br/>192.168.56.1"]
HO_VM1["VM 1<br/>192.168.56.101"]
HO_VM2["VM 2<br/>192.168.56.102"]
HO_HOST <--> HO_VM1
HO_HOST <--> HO_VM2
HO_VM1 <--> HO_VM2
end
subgraph "Mode Internal"
INT_VM1["VM 1<br/>172.16.0.1"]
INT_VM2["VM 2<br/>172.16.0.2"]
INT_VM3["VM 3<br/>172.16.0.3"]
INT_VM1 <--> INT_VM2 <--> INT_VM3
end
style NAT_HOST fill:#9b59b6,color:#fff
style NAT_VM fill:#3498db,color:#fff
style BR_HOST fill:#9b59b6,color:#fff
style BR_VM fill:#3498db,color:#fff
style HO_HOST fill:#9b59b6,color:#fff
style HO_VM1 fill:#3498db,color:#fff
style HO_VM2 fill:#3498db,color:#fff
style INT_VM1 fill:#3498db,color:#fff
style INT_VM2 fill:#3498db,color:#fff
style INT_VM3 fill:#3498db,color:#fff| Mode | Accès Internet | Visible sur le LAN | Communication inter-VM | Usage typique |
|---|---|---|---|---|
| NAT | ✅ Via l’hôte | ❌ | ❌ (sauf réseau NAT partagé) | Navigation, mises à jour |
| Bridge | ✅ Direct | ✅ | ✅ | Serveurs, services accessibles |
| Host-Only | ❌ | ❌ | ✅ + hôte | Développement, tests isolés |
| Internal | ❌ | ❌ | ✅ uniquement | Lab réseau, simulation |
Configuration pratique
VMware — Virtual Network Editor :
vmnet0: bridgevmnet1: host-only (défaut192.168.x.0/24)vmnet8: NAT (défaut192.168.x.0/24)- Réseaux personnalisés possibles
VirtualBox :
- “Fichier” → “Outils” → “Network Manager”
- Configurer NAT Networks et Host-Only Networks
- Chaque VM peut avoir jusqu’à 4 cartes réseau avec des modes différents
Hyper-V :
# Créer un commutateur externe (bridge)New-VMSwitch -Name "Externe" -NetAdapterName "Ethernet" -AllowManagementOS $true
# Créer un commutateur interne (host-only)New-VMSwitch -Name "Interne" -SwitchType Internal
# Créer un commutateur privé (internal only)New-VMSwitch -Name "Prive" -SwitchType PrivateExemple de plan d’adressage pour un lab
| Réseau | Plage d’adresses | Masque | Passerelle | Usage |
|---|---|---|---|---|
| DMZ | 10.0.1.0/24 | 255.255.255.0 | 10.0.1.1 | Serveurs web, services exposés |
| Interne | 10.0.2.0/24 | 255.255.255.0 | 10.0.2.1 | Base de données, services internes |
| Gestion | 10.0.3.0/24 | 255.255.255.0 | 10.0.3.1 | Administration, monitoring |
| Utilisateurs | 10.0.10.0/24 | 255.255.255.0 | 10.0.10.1 | Postes clients virtuels |
Virtualisation vs Conteneurisation
La virtualisation et la conteneurisation répondent à des besoins différents. Voici comment elles se comparent :
graph TB
subgraph "Virtualisation"
direction TB
VM_HW["Matériel"]
VM_HYP["Hyperviseur"]
subgraph VM_1_FULL["VM 1"]
VM1_OS["OS complet"]
VM1_BINS["Bins / Libs"]
VM1_APP["App A"]
end
subgraph VM_2_FULL["VM 2"]
VM2_OS["OS complet"]
VM2_BINS["Bins / Libs"]
VM2_APP["App B"]
end
end
subgraph "Conteneurisation"
direction TB
CT_HW["Matériel"]
CT_OS["OS Hôte"]
CT_ENG["Container Engine<br/>(Docker, Podman)"]
subgraph CT1["Container 1"]
CT1_BINS["Bins / Libs"]
CT1_APP["App A"]
end
subgraph CT2["Container 2"]
CT2_BINS["Bins / Libs"]
CT2_APP["App B"]
end
end
VM_HW --> VM_HYP
VM_HYP --> VM1_OS --> VM1_BINS --> VM1_APP
VM_HYP --> VM2_OS --> VM2_BINS --> VM2_APP
CT_HW --> CT_OS --> CT_ENG
CT_ENG --> CT1_BINS --> CT1_APP
CT_ENG --> CT2_BINS --> CT2_APP
style VM_HW fill:#e74c3c,color:#fff
style VM_HYP fill:#e67e22,color:#fff
style VM1_OS fill:#3498db,color:#fff
style VM2_OS fill:#3498db,color:#fff
style CT_HW fill:#e74c3c,color:#fff
style CT_OS fill:#9b59b6,color:#fff
style CT_ENG fill:#e67e22,color:#fff| Critère | VMs | Conteneurs |
|---|---|---|
| Isolation | Complète (noyau séparé) | Partage du noyau hôte |
| Taille | Plusieurs Go (OS complet) | Quelques Mo à centaines de Mo |
| Démarrage | Minutes | Secondes |
| Overhead | Significatif (OS complet par VM) | Minimal |
| Sécurité | Forte (isolation matérielle) | Moindre (partage du noyau) |
| Portabilité | Images lourdes (VMDK, QCOW2) | Images légères (Docker Hub) |
| Multi-OS | Oui (Linux, Windows, BSD…) | Même famille d’OS que l’hôte |
| Cas d’usage | Isolation forte, OS différents, legacy | Microservices, CI/CD, scaling rapide |
💡 En pratique, les deux sont complémentaires : on exécute souvent des conteneurs Docker à l’intérieur de VMs dans les environnements de production (c’est exactement ce que font AWS, Azure et GCP).
Conclusion
La virtualisation est une technologie fondamentale de l’informatique moderne. Maîtriser les concepts d’hyperviseurs, de couches d’abstraction et de configuration réseau est essentiel pour tout professionnel IT.
La compréhension des couches d’abstraction — du matériel à l’application en passant par l’hyperviseur et l’OS invité — permet de faire les bons choix architecturaux et d’optimiser les performances de vos environnements virtualisés.