---- ====== FORMATION PROXMOX STEPHANE ROBERT ====== ---- ===== CLUSTER ===== Corosync : la communication entre nœuds Corosync assure la communication entre les nœuds. Il envoie des "heartbeats" pour vérifier que chaque nœud est en vie et gère le quorum, le vote qui détermine si le cluster peut fonctionner. pmxcfs : la configuration partagée pmxcfs (Proxmox Cluster File System) est un système de fichiers virtuel monté sur /etc/pve. C'est une base de données SQLite répliquée en temps réel sur tous les nœuds via Corosync. Ce que contient /etc/pve : Configuration des VM et conteneurs (nodes//qemu-server/, nodes//lxc/) Stockages, réseaux, utilisateurs, permissions Certificats SSL du cluster # Vérifier si la virtualisation est activée #grep -E '(vmx|svm)' /proc/cpuinfo ==== Vérifier que tout fonctionne ==== Connectez-vous en SSH ou via la console web (cliquez sur votre nœud → Shell) et vérifiez : # Afficher la version de Proxmox installée #pveversion # Exemple de résultat : # pve-manager/9.1.2/xxxxxxxx (running kernel: 6.17.2-1-pve) # Vérifier que les services Proxmox tournent #systemctl status pve-cluster pvedaemon pveproxy # Vous devez voir "active (running)" pour chaque service # Voir l'espace disque disponible #df -h # Cherchez la ligne "/" pour voir l'espace système # Cherchez "/var/lib/vz" pour l'espace VM (si LVM) Pour vérifier l'IP sur le serveur (au clavier directement branché) : #ip a # Cherchez "inet 192.168.x.x" sous votre interface (enp0s3, eth0...) Pour vérifier que Proxmox répond : #ss -tlnp | grep 8006 # Doit afficher une ligne avec "pveproxy" - sinon le service est arrêté Pour redémarrer le service si nécessaire : #systemctl restart pveproxy ---- ===== STORAGE ===== ==== Commandes pour lire l'état de vos storages ==== Vue globale de tous les storages Proxmox #pvesm status LVM-thin : utilisation du pool (surveiller data% et meta%) #lvs -o lv_name,data_percent,metadata_percent ZFS : état du pool (doit afficher ONLINE) #zpool status ZFS : utilisation de l'espace #zpool list Directory : espace disque classique #df -h ==== À retenir ==== * Storage ≠ Disque : Proxmox organise le stockage en 3 couches (disques → backend → storage). Comprendre cette architecture évite les confusions. * Fichier vs bloc : Directory stocke des fichiers visibles, LVM-thin et ZFS stockent des volumes bloc. Chacun a ses avantages. * Snapshot ≠ Backup : le snapshot est un point de restauration court terme, le backup est une copie indépendante long terme. Vous avez besoin des deux. * LVM-thin : efficace mais à surveiller : thin provisioning est puissant, mais un pool plein = catastrophe. Surveillez à partir de 80%. * ZFS : intégrité contre ressources : checksums et redondance, mais demande de la RAM et des disques en mode HBA. * Directory : simplicité et transparence : idéal pour ISO, backups, templates. Pas optimal pour les VM en production. * Séparez runtime et archives : un storage pour vos VM, un autre pour vos backups. ---- ===== RESEAU ===== Le réseau fonctionne en couches. Deux nous concernent ici : * Un bridge = switch logiciel = travaille en L2 (il regarde les MAC) * Le NAT/routage = travaille en L3 (il regarde les IP) * Un VLAN = étiquetage L2 (tag 802.1Q sur les trames) Le chemin d'un paquet (bridge simple) Quand une VM envoie un paquet vers Internet : VM (eth0) → tap100i0 → vmbr0 → eno1 → switch physique → Internet Le bridge vmbr0 fonctionne comme un switch : il reçoit le paquet de la VM via tap100i0, regarde l'adresse MAC de destination, et le transmet vers eno1 (qui est connecté au réseau physique). Le chemin d'un paquet (NAT) En NAT, c'est différent, le paquet passe par le routage de l'hôte : VM (eth0) → tap100i0 → vmbr0 → ip_forward → NAT (iptables) → eno1 → Internet L'hôte Proxmox remplace l'IP source de la VM par son IP publique avant d'envoyer. Quand la réponse arrive, il fait l'inverse. ==== Configuration de base ==== Si vous avez installé Proxmox normalement, c'est déjà en place. Vérifiez : /etc/network/interfaces auto lo iface lo inet loopback iface eno1 inet manual auto vmbr0 iface vmbr0 inet static address 192.168.1.100/24 gateway 192.168.1.1 bridge-ports eno1 bridge-stp off bridge-fd 0 Points clés : * L'IP est sur vmbr0, pas sur eno1 * eno1 est en manual (pas d'IP) * bridge-ports eno1 connecte le bridge au physique ==== Safe change checklist MODIF CONF RESEAU ==== Modifier le réseau peut vous couper l'accès. Suivez cette procédure systématiquement. Avant de modifier Ces trois points se préparent quand tout va bien : une fois l'accès perdu, il est trop tard pour sauvegarder quoi que ce soit. - 1 * Vérifiez que vous avez un accès console * IPMI/iLO/iDRAC (serveur physique) * Console VNC (hébergeur) * Accès physique clavier/écran - 2 Sauvegardez la config actuelle #cp /etc/network/interfaces /etc/network/interfaces.backup-$(date +%Y%m%d-%H%M) - 3 Notez l'IP et la gateway actuelles #ip -br addr #ip route | grep default Appliquer les changements Rien n'est actif tant que Apply Configuration n'a pas été cliqué : jusque-là, vos modifications dorment dans /etc/network/interfaces.new. La vérification doit suivre immédiatement, pendant que vous disposez encore d'une session ouverte. - Faites vos modifications via l'interface web - Cliquez Apply Configuration - Regardez le Task log (en bas), il doit se terminer par TASK OK - Immédiatement après, vérifiez : # L'hôte répond #ping -c 2 # L'interface web est accessible #curl -k https://:8006 Si vous perdez l'accès La procédure de retour arrière consiste à remettre en place le fichier sauvegardé, puis à le recharger. Elle se déroule entièrement depuis la console, l'interface web étant par définition inaccessible. Accédez via la console (IPMI, VNC, physique) Listez les backups disponibles : #ls -la /etc/network/interfaces* Proxmox crée des backups avec timestamp lors de l'apply. Restaurez le dernier backup fonctionnel : #cp /etc/network/interfaces.backup-YYYYMMDD-HHMM /etc/network/interfaces Réappliquez : #ifreload -a Vérifiez que l'accès est rétabli ==== Vérifications ==== Ces trois contrôles s'enchaînent du plus proche au plus lointain : l'hôte, le bridge, puis la VM. Si le ping vers la passerelle échoue depuis la VM alors que l'hôte répond, le problème est presque toujours dans le rattachement de la carte virtuelle au bon bridge. # L'hôte a une IP sur vmbr0 #ip -br addr | grep vmbr0 # Le bridge est connecté à eno1 #bridge link show # Une VM obtient une IP (DHCP ou statique) # Depuis la VM : #ping 192.168.1.1 # passerelle #ping 8.8.8.8 # internet # Ce que fait "Apply Configuration" en coulisses #ifreload -a # Voir les VLAN configurés sur le bridge #bridge vlan show # Depuis une VM sur VLAN 10 #ping # doit marcher #ping # ne doit PAS marcher (isolation) Activer le routage (persistant) Le routage IP doit être activé pour que le NAT fonctionne. Ne pas utiliser echo 1 > /proc/... (perdu au reboot). # Créer le fichier de config sysctl #echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/99-ip-forward.conf # Appliquer immédiatement #sysctl -p /etc/sysctl.d/99-ip-forward.conf # Vérifier #cat /proc/sys/net/ipv4/ip_forward # doit afficher 1 Port forwarding Pour rendre un service accessible depuis l'extérieur : # Rediriger le port 80 public vers la VM 10.10.10.10 #iptables -t nat -A PREROUTING -i eno1 -p tcp --dport 80 -j DNAT --to 10.10.10.10:80 #iptables -A FORWARD -p tcp -d 10.10.10.10 --dport 80 -j ACCEPT Le dernier test est le plus parlant : depuis la VM, l'adresse renvoyée par un service d'écho doit être l'IP publique de l'hôte, preuve que la traduction d'adresse s'applique bien. # Sur l'hôte : vérifier le routage #cat /proc/sys/net/ipv4/ip_forward # 1 # Sur l'hôte : vérifier les règles NAT #iptables -t nat -L -n -v | grep MASQUERADE # Depuis la VM #ping 8.8.8.8 # internet #curl -s ifconfig.me # doit afficher l'IP publique de l'hôte ==== Commandes de diagnostic ==== Lancez-les dans cet ordre : elles vont du plus général au plus spécifique. L'option -br de ip produit une sortie condensée sur une ligne par interface, bien plus lisible que la sortie complète quand le serveur héberge une dizaine de tap. # État des interfaces #ip -br link #ip -br addr # Bridges et leurs ports #bridge link show # Table de routage #ip route # Règles NAT #iptables -t nat -L -n -v # Logs réseau récents #journalctl -u networking --no-pager -n 30 ==== MTU / Jumbo Frames ==== Pour du stockage réseau (Ceph, NFS, iSCSI), augmenter le MTU à 9000 améliore le débit. Prérequis : tous les équipements du chemin doivent supporter le même MTU. /etc/network/interfaces auto vmbr1 iface vmbr1 inet static address 10.0.0.1/24 bridge-ports eno2 mtu 9000 Test : #ping -M do -s 8972 10.0.0.2 # 8972 + 28 headers = 9000 ---- ===== USERS ===== Vérifier vos permissions Sans entrer dans les procédures de création, voici comment lire l'état de votre RBAC : # Lister tous les utilisateurs #pveum user list # Lister les groupes #pveum group list # Lister les rôles disponibles #pveum role list # Voir les ACL (qui a quoi où) #pveum acl list # Voir les tokens d'un utilisateur #pveum user token list alice@pve # Voir les privilèges d'un rôle #pveum role list PVEVMUser --output json ==== À retenir ==== * Autorisation = Sujet × Rôle × Path : comprendre cette formule évite 90% des erreurs de permissions. * Le slash / est dangereux : une permission sur / se propage partout. Utilisez les paths complets. * Les pools simplifient tout : regroupez les VM par usage et attribuez les permissions sur les pools, pas sur les VM individuelles. * Un token = une tâche : pour l'automatisation, créez un token dédié avec le minimum de droits. * root@pam bypass tout : le compte root Linux n'est pas limité par les ACL Proxmox. Utilisez-le uniquement pour l'urgence. * Console = accès sensible : VM.Console permet de voir et utiliser les sessions ouvertes. Ne le donnez pas aux auditeurs. * Les backups contiennent les données : l'accès au stockage backup = accès aux données des VM. Limitez-le. * Liste à puceRevue trimestrielle : permissions, tokens, groupes. Les droits s'accumulent si on ne nettoie pas. ---- ===== LXC ===== ==== En CLI avec pveam ==== # Mettre à jour la liste des templates disponibles #pveam update # Lister les templates système disponibles #pveam available --section system # Télécharger un template vers le stockage local #pveam download local debian-12-standard_12.7-1_amd64.tar.zst # Lister les templates téléchargés #pveam list local # Entrer dans le conteneur (shell root) #pct enter 101 ==== Aide-mémoire pct ==== Les commandes pct essentielles pour gérer vos conteneurs : | Action | Commande | Notes | | Créer un CT | pct create