V04 - Vagrant : des labos reproductibles en une commande
Objectif
Décrire des VM dans un fichier texte (
Vagrantfile) et les créer/détruire en une commande. C’est ce que le prof utilise pour distribuer le labo Squid, et c’est un bonus demandé au projet SquidGuard.
1. Principe
flowchart LR VF["📄 Vagrantfile<br/>(description des VM)"] --> V["vagrant up"] BOX[("📦 Box<br/>image de base<br/>ex. debian/bookworm64")] --> V V --> P["Fournisseur<br/>VirtualBox / libvirt"] P --> VM1["VM proxy"] P --> VM2["VM client"] V --> PROV["Provisionnement<br/>(script shell, Ansible)"] PROV --> VM1 PROV --> VM2
| Mot | Sens |
|---|---|
| Box | Image de VM prête à l’emploi (catalogue : portal.cloud.hashicorp.com/vagrant) |
| Provider | L’hyperviseur utilisé : virtualbox (défaut) ou libvirt (plugin) |
| Provisioner | Ce qui configure la VM après création (shell, ansible, file) |
| Synced folder | Le dossier du projet est partagé dans la VM sous /vagrant |
2. Installation
# Pop!_OS / Ubuntu : dépôt HashiCorp
wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install vagrant
# Arch
sudo pacman -S vagrant
# Optionnel : utiliser KVM au lieu de VirtualBox
vagrant plugin install vagrant-libvirtVagrant est sous licence BSL (source disponible) depuis 2023 ; il reste gratuit pour cet usage.
3. Les commandes
| Commande | Effet |
|---|---|
vagrant init debian/bookworm64 | Crée un Vagrantfile minimal |
vagrant up | Crée et démarre toutes les VM du fichier |
vagrant up proxy | Seulement la VM proxy |
vagrant ssh proxy | Se connecter en SSH (sans mot de passe) |
vagrant status | État des VM |
vagrant provision | Relancer le provisionnement |
vagrant reload --provision | Redémarrer + reprovisionner (après modif du Vagrantfile) |
vagrant halt | Éteindre |
vagrant destroy -f | Supprimer les VM |
vagrant box list / vagrant box update | Gérer les box téléchargées |
vagrant up --provider=libvirt | Utiliser KVM |
4. Vagrantfile du labo proxy (fourni)
Fichier : scripts/virtualisation/Vagrantfile - crée proxy (Squid + Apache + listes noires + page de blocage, 192.168.56.10) et client (configuré pour passer par le proxy, 192.168.56.11).
Vagrant.configure("2") do |config|
config.vm.box = "debian/bookworm64"
config.vm.define "proxy" do |proxy|
proxy.vm.hostname = "squid-proxy"
proxy.vm.network "private_network", ip: "192.168.56.10"
proxy.vm.provider "virtualbox" do |vb|
vb.memory = 1024
vb.cpus = 1
end
proxy.vm.provision "shell", inline: <<-SHELL
export DEBIAN_FRONTEND=noninteractive
apt-get update -q
apt-get install -y -q squid apache2 curl
# ... (écriture de /etc/squid/squid.conf, des listes noires et de bloque.html)
systemctl restart squid
SHELL
end
config.vm.define "client" do |client|
client.vm.hostname = "squid-client"
client.vm.network "private_network", ip: "192.168.56.11"
client.vm.provision "shell", inline: <<-SHELL
apt-get update -q && apt-get install -y -q curl
echo 'export http_proxy="http://192.168.56.10:3128"' > /etc/profile.d/proxy.sh
echo 'export https_proxy="http://192.168.56.10:3128"' >> /etc/profile.d/proxy.sh
SHELL
end
endTest :
cd scripts/virtualisation
vagrant up
vagrant ssh client -c "curl -sI http://example.com | head -1; curl -sI https://www.facebook.com | head -1"
# → HTTP/1.1 200 OK puis HTTP/1.1 403 Forbidden (bloqué par le proxy)Les IP
private_networkde VirtualBox doivent être dans 192.168.56.0/21 par défaut (sinon ajouter la plage dans/etc/vbox/networks.conf).
Voir aussi
- S04 - Proxy Squid et SquidGuard · V02 - VirtualBox · P10 - Automatisation avec Ansible
- V07 - Vagrant et KVM (labo du TP déploiement) : Vagrant avec KVM (libvirt), snapshots, labo du TP déploiement
- Retour : 00 - Index général