Aller au contenu

Installation de Proxmox 9 sur Debian 13

Mise à jour :

Logo Proxmox

La virtualisation est au cœur des environnements modernes, offrant flexibilité et efficacité dans la gestion des ressources. Parmi les solutions disponibles, Proxmox se distingue par sa puissance et sa simplicité. Que ce soit pour des besoins professionnels ou pour votre Homelab, installer Proxmox sur une base Debian 13 est un excellent choix pour créer un environnement robuste et évolutif.

Prérequis

Avant de plonger dans l’installation de Proxmox, il est important de s’assurer que votre système répond à certains prérequis. Ces prérequis sont essentiels pour garantir une expérience fluide et sans encombre tout au long du processus d’installation et d’utilisation.

Assurez-vous que votre machine dispose d’un CPU avec 8 cœurs au minimum, d’au moins 16 Go de RAM et de suffisamment d’espace disque (100 Go minimum recommandé). La virtualisation demande des ressources et une machine puissante garantira de meilleures performances.

Lors de l’installation, veuillez choisir un environnement minimal de Debian 13 sans interface graphique auquel on ajoutera les paquets utilitaires standard.et SSH server pour permettre la connexion distante.

Mise au point du Script d’Installation de Proxmox

Je vais détailler comment je m’y suis pris pour installer Proxmox sur une distribution Debian existante. Je me suis basé sur la documentation officielle.

Mise au point de l’installation

Connectez-vous à votre machine sous Debian 13 via SSH par exemple.

Une fois connecté, il est conseillé de modifier le fichier /etc/hosts. Exécutez les commandes suivantes pour mettre à jour votre système :

Terminal window
su - # Passe en mode superutilisateur
cat > /etc/hosts << EOF
127.0.0.1 localhost
192.168.20.105 proxmox1.robert.priv proxmox1 # Adresse et Nom de votre Proxmox
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
EOF

Pour vérifier que le fichier a bien été modifié, utilisez la commande suivante :

Terminal window
hostname --ip-address
192.168.20.105 # Doit correspondre à l'adresse IP que vous avez mise dans /etc/hosts

J’ai choisi le mode bridge pour permettre aux machines virtuelles d’être directement accessibles sur le réseau local, comme n’importe quel autre appareil, offrant ainsi une meilleure intégration et une plus grande flexibilité pour mes tests et l’administration. Plus d’infos sur bridge ou NAT.

Pour éviter de laisser faire Proxmox, je vais créer un bridge vmbr0. Maio avant il faut identifier les noms des interfaces réseau avec la commande :

Terminal window
ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp1s0: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 68:1d:ef:38:f6:e5 brd ff:ff:ff:ff:ff:ff
3: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 68:1d:ef:38:f6:e6 brd ff:ff:ff:ff:ff:ff
4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 500
link/none
6: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default
link/ether 62:84:4b:2d:c9:d7 brd ff:ff:ff:ff:ff:ff
8: tailscale0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1280 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 500
link/none
10: veth71a39ba@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default
link/ether 8a:99:d2:6f:ed:3a brd ff:ff:ff:ff:ff:ff link-netnsid 0

Je vois que mes interfaces sont enp1s0 et enp3s0. Je vais donc configurer le bridge vmbr0 sur enp3s0 et laisser enp1s0 en mode manual pour éviter les conflits. Voici la configuration réseau que je vais utiliser. Adaptez l’adresse IP statique à votre réseau local.

Terminal window
cat > /etc/network/interfaces << EOF
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
iface enp1s0 inet manual
auto enp3s0
iface enp3s0 inet dhcp
dns-nameserver 4.2.2.1
dns-nameserver 4.2.2.2
dns-nameserver 208.67.220.220
auto vmbr0
iface vmbr0 inet static
address 192.168.20.105/24
bridge-ports enp3s0
bridge-stp off
bridge-fd 0
EOF

Il faut aussi modifier certaines valeurs des paramètres du kernel :

Terminal window
cat > /etc/sysctl.d/proxmox.conf << EOF
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.ip_forward=1
EOF

Et on les applique :

Terminal window
sysctl -p /etc/sysctl.d/proxmox.conf

On peut ensuite ajouter le dépôt Proxmox à la liste de sources APT. Exécutez les commandes suivantes :

Terminal window
cat > /etc/apt/sources.list.d/pve-install-repo.sources << EOL
Types: deb
URIs: http://download.proxmox.com/debian/pve
Suites: trixie
Components: pve-no-subscription
Signed-By: /usr/share/keyrings/proxmox-archive-keyring.gpg
EOL
wget https://enterprise.proxmox.com/debian/proxmox-archive-keyring-trixie.gpg -O /usr/share/keyrings/proxmox-archive-keyring.gpg
# verify
sha256sum /usr/share/keyrings/proxmox-archive-keyring.gpg
136673be77aba35dcce385b28737689ad64fd785a797e57897589aed08db6e45 /usr/share/keyrings/proxmox-archive-keyring.gpg
md5sum /usr/share/keyrings/proxmox-archive-keyring.gpg
77c8b1166d15ce8350102ab1bca2fcbf /usr/share/keyrings/proxmox-archive-keyring.gpg

Ces commandes ajoutent le dépôt Proxmox et importent la clé GPG pour garantir l’authenticité des paquets.

Avec le dépôt en place, nous allons mettre à jour le système :

Terminal window
apt modernize-sources # Met à jour les sources APT pour Debian 13
apt update -y && apt full-upgrade -y
apt install proxmox-default-kernel

Un petit reboot est nécessaire pour que le nouveau kernel soit pris en compte :

Terminal window
systemctl reboot

On peut installer enfin Proxmox :

Terminal window
sudo -i
apt install -y proxmox-ve ksm-control-daemon locales-all chrony libguestfs-tools

J’installe quelques packages supplémentaires à ceux recommandés. Par exemple ksm-control-daemon installe KSM (Kernel Samepage Merging) qui permet de combiner plusieurs pages de mémoire identiques en une seule page, pour économiser de la mémoire.

Le package libguestfs-tools installe un ensemble d’outils pour créer, accéder et modifier des images de disque virtuel. Ces outils vont nous servir à manipuler les systèmes de fichiers et les configurations des templates de machines virtuelles Proxmox.

On nettoie le système :

Terminal window
apt remove linux-image-amd64 'linux-image-6.1*' os-prober -y
rm -f /etc/apt/sources.list.d/pve-install-repo.list

On reboot pour terminer :

Terminal window
systemctl reboot

Au bout de quelques secondes, vous devriez pouvoir accéder à votre machine Proxmox de nouveau.

Accès à l’Interface Web

Une fois la VM redémarrée, vous pouvez accéder à l’interface web de Proxmox en ouvrant un navigateur et en saisissant l’adresse IP de la VM suivie de :8006. Par exemple, https://192.168.20.105:8006.

Depuis une autre VM :

Terminal window
curl -v -k -L https://192.168.20.105:8006 # Remplacez par l'adresse IP de votre Proxmox
...
<script type="text/javascript" src="/proxmoxlib.js?ver=v4.1.3-t1700730770"></script>
<script type="text/javascript" src="/pve2/js/pvemanagerlib.js?ver=8.1.3"></script>
<script type="text/javascript" src="/pve2/ext6/locale/locale-en.js?ver=7.0.0"></script>
<script type="text/javascript">
if (typeof(PVE) === 'undefined') PVE = {};
Ext.History.fieldid = 'x-history-field';
Ext.onReady(function() { Ext.create('PVE.StdWorkspace');});
</script>
</head>
<body>
<!-- Fields required for history management -->
<form id="history-form" class="x-hidden">
<input type="hidden" id="x-history-field"/>
</form>
</body>
</html>
* Connection #0 to host 192.168.3.10 left intact

Connexion Sécurisée à Proxmox

Ça fonctionne, mais il faut installer un certificat pour que la connexion en https fonctionne, indispensable pour utiliser terraform.

Génération et installation d’un certificat auto-signé

Comme à mon habitude, je vais utiliser mkcert que j’ai documenté ici. Important, réalisez toutes les opérations décrites dans ce guide, car il faut ajouter le certificat racine sur votre machine !

Terminal window
mkcert 'proxmox1.robert.priv' localhost 127.0.0.1 ::1
Created a new certificate valid for the following names 📜
- "proxmox1.robert.priv"
- "localhost"
- "127.0.0.1"
- "::1"
The certificate is at "./proxmox1.robert.priv+3.pem" and the key at "./proxmox1.robert.priv+3-key.pem"
It will expire on 25 February 2028 🗓

Nous allons les transférer dans la configuration de Proxmox :

Terminal window
scp -o IdentitiesOnly=yes proxmox1.robert.priv+3.pem proxmox1:/tmp/pveproxy-ssl.pem
scp -o IdentitiesOnly=yes proxmox1.robert.priv+3-key.pem proxmox1:/tmp/pveproxy-ssl.key

On se connecte à la machine, on copie les certificats et on redémarre le service :

Terminal window
ssh promox1
su -
mv /tmp/pveproxy-ssl.pem /etc/pve/nodes/proxmox1/pveproxy-ssl.pem
mv /tmp/pveproxy-ssl.key /etc/pve/nodes/proxmox1/pveproxy-ssl.key
sudo systemctl restart pveproxy.service

Déconnectez-vous et on reteste sans l’option -k de curl qui bypass le contrôle de connexion sécurisée :

Terminal window
curl -v -L https://proxmox1.robert.priv:8006
...
</head>
<body>
<!-- Fields required for history management -->
<form id="history-form" class="x-hidden">
<input type="hidden" id="x-history-field"/>
</form>
</body>
</html>
* Connection #0 to host proxmox1.robert.priv left intact

Nickel Chrome

Vous pouvez maintenant accéder à l’interface web de Proxmox en toute sécurité sans avertissement de certificat.depuis votre navigateur préféré à l’adresse : https://proxmox1.robert.priv:8006.

Proxmox Login

Si votre serveur Proxmox est accessible que depuis le bastion, vous pouvez installer traefik sur le bastion pour faire du reverse proxy et exposer l’interface web de Proxmox en toute sécurité.

Configuration SSH pour se Connecter à Proxmox

Pour pouvoir utiliser Terraform pour provisionner des ressources, il faut autoriser la connexion ssh avec le compte root:

Terminal window
ssh proxmox1
su -
vi /etc/ssh/sshd_config

Si vous ne maitrisez l’éditeur vi, je vous recommande de lire mon guide sur vi.

Recherchez la ligne #PermitRootLogin prohibit-password et remplacez-la par :

Terminal window
PermitRootLogin yes

Si votre configuration SSH contient une directive AllowUsers, vous devez ajouter l’utilisateur root à cette liste. Vérifiez avec :

Terminal window
grep "^AllowUsers" /etc/ssh/sshd_config

Si la ligne existe (par exemple AllowUsers bob alice), ajoutez root :

Terminal window
AllowUsers bob alice root

Pour activer les logs détaillés de SSH et faciliter le dépannage, modifiez également le niveau de log dans /etc/ssh/sshd_config :

Terminal window
vi /etc/ssh/sshd_config

Recherchez la ligne #LogLevel INFO et remplacez-la par :

Terminal window
LogLevel VERBOSE

Les niveaux disponibles sont :

  • QUIET : Logs minimaux
  • FATAL : Uniquement les erreurs fatales
  • ERROR : Erreurs système
  • INFO : Messages informatifs (par défaut)
  • VERBOSE : Logs détaillés pour le dépannage
  • DEBUG, DEBUG1, DEBUG2, DEBUG3 : Niveaux de debug croissants

Une fois les modifications effectuées, vérifiez la configuration :

Terminal window
/usr/sbin/sshd -T | grep loglevel
loglevel VERBOSE

Si tout est correct, redémarrez le service SSH :

Terminal window
systemctl restart sshd.service

Les logs SSH sont consultables avec journalctl :

Terminal window
# Voir les logs SSH en temps réel
journalctl -u ssh -f
# Voir les dernières tentatives de connexion
journalctl -u ssh | tail -50
# Filtrer par période
journalctl -u ssh --since "1 hour ago"
# Rechercher des erreurs spécifiques
journalctl -u ssh | grep -i "failed\|error\|refused"

Configuration de la connexion SSH sans mot de passe

Déconnectez-vous et éditez le fichier de configuration du client ssh de votre bastion :

Terminal window
vi ~/.ssh/config

Ajoutez cette ligne :

Terminal window
Host proxmox1.robert.priv proxmox1
User root

Idem, ajoutez cette ligne dans votre fichier /etc/hosts :

Terminal window
192.168.20.105 proxmox1.robert.priv

On copie la clé SSH publique de notre bastion vers le serveur Proxmox pour éviter d’avoir à saisir le mot de passe à chaque connexion :

Terminal window
ssh-copy-id -i ~/.ssh/id_ed25519.pub proxmox1

On teste enfin :

Terminal window
ssh proxmox1
You have new mail.
Last login: Tue Dec 26 13:06:48 2023 from 192.168.3.1
root@proxmox:~# ...

Conclusion

Avec les étapes que nous avons suivies, votre environnement Proxmox 9 est désormais opérationnel sur une machine tournant sous Debian 13. Cette configuration vous ouvre la porte à une multitude de possibilités dans le domaine de la virtualisation et de la gestion des conteneurs.

Un des avantages de cette installation est la possibilité d’utiliser Terraform pour instancier et gérer des ressources sur Proxmox. Terraform, un outil d’Infrastructure as Code (IaC), permet de déployer et de gérer l’infrastructure de manière automatisée et reproductible. Pour en savoir plus sur l’utilisation de Terraform avec Proxmox, je vous invite à consulter ce guide détaillé : Utiliser Terraform avec Proxmox.

De plus, nous explorerons ensuite l’utilisation de l’inventaire dynamique Ansible avec Proxmox. Ansible est un outil puissant pour l’automatisation de la configuration et la gestion de l’infrastructure et l’inventaire dynamique est un moyen efficace de gérer les ressources virtualisées de manière flexible et scalable.