Aller au contenu Skip to main content

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 ?

AvantageDescription
IsolationChaque VM est un environnement cloisonné. Un crash ou une compromission d’une VM n’affecte pas les autres ni l’hôte.
ConsolidationUn 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.
SnapshotsPossibilité de capturer l’état complet d’une VM à un instant T et d’y revenir instantanément.
Multi-OSExé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:#fff

Composants 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 :

TechnologieFabricantRôle
VT-xIntelVirtualisation CPU, modes root/non-root
AMD-V (SVM)AMDÉquivalent AMD de VT-x
EPTIntelTraduction d’adresses mémoire à deux niveaux (Second Level Address Translation)
RVI (NPT)AMDÉquivalent AMD d’EPT
VT-d / AMD-ViIntel / AMDIOMMU — permet le passthrough de périphériques PCI vers les VMs
SR-IOVStandard PCI-SIGPartage matériel d’un périphérique PCIe entre plusieurs VMs

Vérifier le support : Sous Linux, grep -E 'vmx|svm' /proc/cpuinfo affiche les flags de virtualisation. Sous Windows, systeminfo indique 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:#fff

Caracté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:#fff

Caracté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èreType 1 (Bare-Metal)Type 2 (Hosted)
PerformanceExcellente (accès direct au matériel)Bonne (overhead de l’OS hôte)
LatenceMinimalePlus élevée (couche OS supplémentaire)
SécuritéSurface d’attaque réduiteDépend de la sécurité de l’OS hôte
InstallationDédiée (remplace l’OS)Simple (application classique)
UsageProduction, datacenters, cloudDéveloppement, tests, apprentissage
CoûtSouvent payant (licences entreprise)Souvent gratuit (VirtualBox)
Nombre de VMsDizaines à centainesQuelques-unes
Live migrationOuiNon
HA / ClusteringOuiNon

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:#fff

Comparatif des solutions de virtualisation

SolutionTypeLicenceOS HôtePoints fortsPoints faibles
VMware ESXiType 1Propriétaire (gratuit limité)Bare-metalLeader du marché, écosystème riche (vSphere, vCenter)Coût des licences entreprise, acquisition par Broadcom
VMware WorkstationType 2Propriétaire (gratuit depuis 2024)Win/LinuxPerformances, snapshots avancésMoins de communauté open source
VirtualBoxType 2GPLv2 (open source)Win/Mac/LinuxGratuit, multiplateforme, communauté activePerformances GPU limitées
Hyper-VType 1Intégré à WindowsWin (bare-metal)Natif Windows, gratuit avec Windows Pro/ServerÉcosystème Windows uniquement
KVM/QEMUType 1 (hybride)GPLv2LinuxIntégré au kernel, performances natives, gratuitConfiguration CLI complexe
Proxmox VEType 1AGPLv3Bare-metal (Debian)Interface web, KVM + LXC, clustering gratuitSupport commercial payant
ParallelsType 2PropriétairemacOSOptimisé Apple Silicon, intégration macOSmacOS uniquement, payant
Xen/CitrixType 1GPLv2 / PropriétaireBare-metalParavirtualisation performante, utilisé par AWSComplexité 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 :

  1. Téléchargez depuis le site de Broadcom
  2. Lancez l’installateur et suivez les instructions
  3. 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:#fff

VirtualBox

Oracle VirtualBox est la solution de virtualisation gratuite et open source la plus populaire pour un usage desktop.

Installation et création de VM

  1. Téléchargez depuis virtualbox.org
  2. Installez le logiciel + l’Extension Pack (USB 3.0, chiffrement, PXE boot)
  3. 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 :

Fenêtre de terminal
# Créer et enregistrer la VM
VBoxManage createvm --name "UbuntuVM" --ostype Ubuntu_64 --register
# Configurer CPU et RAM
VBoxManage modifyvm "UbuntuVM" --memory 4096 --cpus 2 --vram 128
# Créer un disque de 40 Go
VBoxManage createhd --filename "UbuntuVM.vdi" --size 40000
# Ajouter un contrôleur SATA et attacher le disque
VBoxManage storagectl "UbuntuVM" --name "SATA" --add sata --controller IntelAhci
VBoxManage storageattach "UbuntuVM" --storagectl "SATA" --port 0 --device 0 \
--type hdd --medium "UbuntuVM.vdi"
# Attacher un ISO au lecteur DVD
VBoxManage storagectl "UbuntuVM" --name "IDE" --add ide
VBoxManage storageattach "UbuntuVM" --storagectl "IDE" --port 0 --device 0 \
--type dvddrive --medium ubuntu-24.04-live-server-amd64.iso
# Configurer le réseau en NAT
VBoxManage modifyvm "UbuntuVM" --nic1 nat
# Démarrer la VM
VBoxManage 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:#fff

Activation et configuration

Via l’interface graphique :

  1. “Programmes et fonctionnalités” → “Activer ou désactiver des fonctionnalités Windows”
  2. Cochez “Hyper-V” → OK → Redémarrage

Via PowerShell (administrateur) :

Fenêtre de terminal
# Activer Hyper-V
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
# Créer un commutateur virtuel
New-VMSwitch -Name "MonSwitch" -SwitchType Internal
# Créer une VM
New-VM -Name "ServeurTest" -MemoryStartupBytes 4GB -Generation 2 `
-NewVHDPath "C:\VMs\ServeurTest.vhdx" -NewVHDSizeBytes 50GB `
-SwitchName "MonSwitch"
# Attacher un ISO
Add-VMDvdDrive -VMName "ServeurTest" -Path "C:\ISOs\ubuntu-24.04.iso"
# Configurer la mémoire dynamique
Set-VMMemory -VMName "ServeurTest" -DynamicMemoryEnabled $true `
-MinimumBytes 2GB -MaximumBytes 8GB
# Démarrer la VM
Start-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

Fenêtre de terminal
# Installer les paquets nécessaires
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
# Ajouter l'utilisateur au groupe libvirt
sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER
# Vérifier que KVM est disponible
kvm-ok
# INFO: /dev/kvm exists
# KVM acceleration can be used

Création d’une VM avec virt-install

Fenêtre de terminal
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.iso

Gestion avec virsh

Fenêtre de terminal
# Lister les VMs
virsh list --all
# Démarrer / Arrêter
virsh start ubuntu-server
virsh shutdown ubuntu-server
virsh destroy ubuntu-server # Arrêt forcé
# Snapshot
virsh snapshot-create-as ubuntu-server --name "avant-upgrade"
virsh snapshot-revert ubuntu-server "avant-upgrade"
# Informations
virsh dominfo ubuntu-server
virsh domblklist ubuntu-server

virt-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:#fff

Cas 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:#fff

2. 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

RessourceRecommandation
vCPUNe pas allouer plus de vCPUs que de cœurs physiques par VM. Ratio total recommandé : 1:1 à 4:1 selon la charge.
RAMLaisser minimum 2 Go à l’hôte. Utiliser la mémoire dynamique si disponible.
DisqueUtiliser l’allocation dynamique (thin provisioning). Préférer les SSD/NVMe. Format QCOW2 (KVM) ou VMDK thin (VMware).
RéseauUtiliser 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 :

HyperviseurPilotesInstallation
VMwareVMware ToolsInstaller depuis le menu VM
VirtualBoxGuest Additionssudo apt install virtualbox-guest-utils
KVM/QEMUvirtioInclus dans le noyau Linux, pilotes Windows via virtio-win ISO
Hyper-VIntegration ServicesInclus dans Windows, linux-azure pour Linux

Formats de disques virtuels

FormatHyperviseurAllocation dynamiqueSnapshotsNotes
VMDKVMwareOui (thin)OuiStandard VMware, portable
VDIVirtualBoxOuiOuiFormat natif VirtualBox
QCOW2KVM/QEMUOuiOuiCompressible, chiffrable, copy-on-write
VHDXHyper-VOuiOuiJusqu’à 64 To, résilient
RAWTousNonNonPerformances 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
ModeAccès InternetVisible sur le LANCommunication inter-VMUsage typique
NAT✅ Via l’hôte❌ (sauf réseau NAT partagé)Navigation, mises à jour
Bridge✅ DirectServeurs, services accessibles
Host-Only✅ + hôteDéveloppement, tests isolés
Internal✅ uniquementLab réseau, simulation

Configuration pratique

VMware — Virtual Network Editor :

  • vmnet0 : bridge
  • vmnet1 : host-only (défaut 192.168.x.0/24)
  • vmnet8 : NAT (défaut 192.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 :

Fenêtre de terminal
# 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 Private

Exemple de plan d’adressage pour un lab

RéseauPlage d’adressesMasquePasserelleUsage
DMZ10.0.1.0/24255.255.255.010.0.1.1Serveurs web, services exposés
Interne10.0.2.0/24255.255.255.010.0.2.1Base de données, services internes
Gestion10.0.3.0/24255.255.255.010.0.3.1Administration, monitoring
Utilisateurs10.0.10.0/24255.255.255.010.0.10.1Postes 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èreVMsConteneurs
IsolationComplète (noyau séparé)Partage du noyau hôte
TaillePlusieurs Go (OS complet)Quelques Mo à centaines de Mo
DémarrageMinutesSecondes
OverheadSignificatif (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-OSOui (Linux, Windows, BSD…)Même famille d’OS que l’hôte
Cas d’usageIsolation forte, OS différents, legacyMicroservices, 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.