Configuration d'ISC DHCP pour les IP privées dans un Homelab Proxmox
Si vous gérez un homelab Proxmox VE avec plusieurs conteneurs LXC et VM, vous rencontrez rapidement le problème de la gestion des IP. Vous pourriez compter sur le DHCP de votre routeur, mais cela lie votre infrastructure à l’équipement amont qui gère votre réseau. Dans un environnement de laboratoire, vous voulez un contrôle total — des réservations statiques pour les conteneurs d’infrastructure, un pool dynamique pour les VM de test éphémères, et aucune dépendance envers des services externes comme le serveur DHCP d’un routeur domestique.
Cet article vous guide à travers la configuration d’ISC DHCP Server dans un conteneur LXC dédié sur Proxmox VE, en utilisant une configuration de homelab représentative.
Pourquoi un Conteneur DHCP Dédié ?
Il existe plusieurs approches pour le DHCP dans un laboratoire Proxmox :
- Laisser votre routeur amont s’en occuper — simple, mais vous perdez le contrôle. Vous ne pouvez pas définir de réservations statiques sans vous connecter à votre routeur domestique, et tout redémarrage ou remplacement du routeur signifie tout reconfigurer.
- Exécuter DHCP sur l’hôte Proxmox lui-même — fonctionne, mais mélange les préoccupations du système d’exploitation hôte avec les services applicatifs. Vous voulez que votre hyperviseur reste léger.
- Conteneur LXC dédié — séparation nette, facile à sauvegarder, migrer ou reconstruire. C’est la bonne méthode.
Un conteneur DHCP est léger (on parle d’environ ~3 Mo de RAM), a une seule tâche, et peut être isolé par pare-feu de tout sauf du domaine de diffusion qu’il dessert.
Création du Conteneur
Je crée mes conteneurs en utilisant un schéma de nommage cohérent. Ce conteneur s’appelle dhcp-srv avec l’IP statique 10.99.99.2/24.
Prérequis
- Hôte Proxmox VE avec un bridge (généralement
vmbr0ouvmbr1) - Modèle Debian LXC téléchargé (dans mon cas, Debian 13 Trixie)
- Clé publique SSH injectée à la création du conteneur (pas d’authentification par mot de passe nécessaire)
Création du Conteneur via CLI
pct create 200 \
local:vztmpl/debian-13-standard_13.0-1_amd64.tar.zst \
--hostname dhcp-srv \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--storage local-lvm \
--password <mot-de-passe-temporaire> \
--unprivileged 1 \
--ssh-public-keys ~/.ssh/id_ed25519.pub
Le paramètre --ssh-public-keys est essentiel — il injecte votre clé SSH lors de l’extraction du modèle afin que vous puissiez vous connecter en SSH immédiatement après la création sans authentification par mot de passe.
Important : Les modèles Debian 13 (Trixie) n’incluent pas sudo par défaut. Entrez dans le conteneur ensuite et configurez-le :
pct enter 200
apt update && apt install -y sudo
echo '%sudo ALL=(ALL:ALL) ALL' >> /etc/sudoers
usermod -aG sudo tuxvador
exit
Définition d’une IP Statique
Une fois le conteneur démarré, définissez une IP statique en modifiant la configuration réseau. Dans le conteneur :
cat > /etc/network/interfaces << 'EOF'
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.99.99.2/24
gateway 10.99.99.1
EOF
systemctl restart networking
Sur l’hôte Proxmox, 10.99.99.1 est la passerelle configurée sur vmbr0 — le routeur amont qui relie le laboratoire à Internet. L’IP statique du conteneur lui-même est 10.99.99.2, qui est également ce que nous réserverons dans la configuration DHCP elle-même (oui, les serveurs DHCP ont besoin de leur propre adresse statique — celle-ci est configurée au niveau du système d’exploitation, pas via DHCP).
Installation d’ISC DHCP Server
ISC DHCP Server est l’implémentation DHCP classique et éprouvée pour Linux. Il est disponible dans le dépôt principal de Debian :
apt update && apt install -y isc-dhcp-server
Pendant l’installation, il vous sera demandé de configurer l’interface d’écoute. Nous le ferons manuellement plutôt.
Configuration de l’Interface d’Écoute
Modifiez /etc/default/isc-dhcp-server pour indiquer au daemon sur quelle interface écouter :
INTERFACESv4="eth0"
INTERFACESv6=""
Ceci est critique — si vous laissez ce champ vide ou le pointez sur la mauvaise interface, le serveur ne répondra pas aux messages DISCOVER.
Rédaction de la Configuration
C’est le cœur du sujet. La configuration se trouve dans /etc/dhcp/dhcpd.conf. Voici un fichier représentatif :
cat > /etc/dhcp/dhcpd.conf << 'EOF'
option domain-name "home.lab";
option domain-name-servers 8.8.8.8, 1.1.1.1;
default-lease-time 86400;
max-lease-time 86400;
ddns-update-style none;
authoritative;
subnet 10.99.99.0 netmask 255.255.255.0 {
range 10.99.99.80 10.99.99.200;
option routers 10.99.99.1;
option subnet-mask 255.255.255.0;
option broadcast-address 10.99.99.255;
}
host dhcp-srv { hardware ethernet 00:1a:2b:a3:ec:58; fixed-address 10.99.99.2; }
host mon-srv { hardware ethernet 00:1a:2b:35:9e:14; fixed-address 10.99.99.10; }
host web-proxy { hardware ethernet 00:1a:2b:e2:df:11; fixed-address 10.99.99.11; }
host media-srv { hardware ethernet 00:1a:2b:55:0c:64; fixed-address 10.99.99.13; }
host file-srv { hardware ethernet 00:1a:2b:94:00:9c; fixed-address 10.99.99.14; }
host dev-srv { hardware ethernet 00:1a:2b:41:af:0a; fixed-address 10.99.99.20; }
host vpn-srv { hardware ethernet 00:1a:2b:53:0c:f5; fixed-address 10.99.99.25; }
EOF
Analyse de la Configuration
Options Globales :
| Directive | Valeur | Objectif |
|---|---|---|
option domain-name | home.lab | Définit le domaine de recherche DNS pour tous les clients |
option domain-name-servers | 8.8.8.8, 1.1.1.1 | Serveurs DNS transmis aux clients |
default-lease-time | 86400 (24h) | Durée par défaut d’un bail |
max-lease-time | 86400 (24h) | Durée maximale qu’un client peut demander |
ddns-update-style | none | Désactive les mises à jour DDNS (inutile dans un laboratoire) |
authoritative | — | Déclare ce serveur comme faisant autorité pour son sous-réseau |
La directive authoritative est importante. Sans elle, si un client arrive d’un réseau différent et demande son ancienne IP, ISC DHCP refusera silencieusement et le client continuera d’essayer son ancienne adresse (maintenant invalide). authoritative indique aux clients « si je ne connais pas ce bail, oublie-le et prends-en un nouveau. »
Déclaration de Sous-Réseau :
Le sous-réseau couvre la plage privée du laboratoire — 10.99.99.0/24. Le pool dynamique va de .80 à .200. Je commence intentionnellement le pool à .80 pour laisser la partie basse aux conteneurs d’infrastructure statiques et aux usages futurs. L’adresse .1 est la passerelle bridge de l’hôte Proxmox, qui gère le routage inter-conteneurs.
Réservations Statiques :
Chaque conteneur d’infrastructure obtient une réservation d’adresse fixe liée à son adresse MAC. Proxmox attribue des MAC dans la plage 00:1a:2b:xx:xx:xx pour les conteneurs LXC par défaut. La correspondance est simple :
| Conteneur | MAC | IP | Rôle |
|---|---|---|---|
| dhcp-srv | 00:1a:2b:a3:ec:58 | .2 | Serveur DHCP |
| mon-srv | 00:1a:2b:35:9e:14 | .10 | Surveillance de sécurité (pile de monitoring) |
| web-proxy | 00:1a:2b:e2:df:11 | .11 | Proxy inverse / TLS |
| media-srv | 00:1a:2b:55:0c:64 | .13 | Pile multimédia |
| file-srv | 00:1a:2b:94:00:9c | .14 | Serveur de fichiers |
| dev-srv | 00:1a:2b:41:af:0a | .20 | Espace de travail Dev |
| vpn-srv | 00:1a:2b:53:0c:f5 | .25 | Point d’accès VPN |
Notez que j’ai réservé la correspondance MAC-vers-IP du propre serveur DHCP même si elle est configurée statiquement au niveau du système d’exploitation. C’est purement pour la cohérence — la table des baux n’affichera pas d’entrée inconnue pour sa propre adresse, et si je passe un jour le conteneur en DHCP pour une raison quelconque, la réservation s’activera automatiquement.
Démarrage et Test du Serveur
Démarrer le Service
systemctl restart isc-dhcp-server
systemctl status isc-dhcp-server
Vérifiez les journaux pour confirmer qu’il fonctionne :
journalctl -u isc-dhcp-server -n 20 --no-pager
Vérification de l’Attribution des Baux
Lorsque vous créez un nouveau conteneur Proxmox avec ip=dhcp dans sa configuration réseau, vous devriez le voir apparaître dans le fichier des baux :
cat /var/lib/dhcp/dhcpd.leases
Un bail sain ressemble à :
lease 10.99.99.80 {
starts 5 2026/05/23 12:34:56;
ends 5 2026/05/23 12:34:56;
cltt 5 2026/05/23 12:34:56;
binding state active;
next binding state free;
rewind binding state free;
hardware ethernet 00:1a:2b:ab:cd:ef;
}
Test depuis un Conteneur Client
Depuis tout nouveau conteneur ayant reçu un bail DHCP, vérifiez :
ip a show eth0
ip route show
cat /etc/resolv.conf
Vous devriez voir l’IP attribuée, la passerelle (10.99.99.1) et les serveurs DNS (8.8.8.8, 1.1.1.1).
Pièges que j’ai Rencontrés
1. Échecs Silencieux sur une Incohérence d’Interface
Si INTERFACESv4 ne correspond pas au nom réel de l’interface réseau, dhcpd démarre sans erreur mais ne voit jamais aucun message DISCOVER. Vérifiez deux fois la sortie de ip a — dans les conteneurs LXC, l’interface est presque toujours eth0.
2. Plusieurs Serveurs DHCP sur le Même Domaine de Diffusion
Si votre routeur amont a également le DHCP activé, vous verrez des baux conflictuels. Désactivez soit le DHCP sur le routeur, soit configurez un relais DHCP. Dans ma configuration, j’ai désactivé le DHCP sur le routeur FAI et laissé le serveur ISC DHCP du laboratoire gérer tout sur le sous-réseau 10.99.99.0/24.
3. Durée de Bail pour les Conteneurs Éphémères
24 heures convient pour les conteneurs d’infrastructure, mais si vous créez et détruisez fréquemment des conteneurs de test, envisagez de réduire default-lease-time à quelque chose comme 3600 (1 heure) pour éviter l’épuisement des baux.
4. IDs de Conteneurs vs IPs
Proxmox attribue des IDs de conteneurs (100, 101, 102…) mais ceux-ci n’ont aucun rapport avec les adresses IP. Gardez une correspondance dans votre documentation — c’est essentiel à mesure que le laboratoire grandit.
Utilisation des Ressources
ISC DHCP Server est incroyablement léger. Sur un Debian 13 LXC :
- Mémoire : ~3 Mo RSS (atteint ~11 Mo après un afflux de clients)
- Disque : ~2,5 Mo pour le binaire et la configuration
- CPU : négligeable — typiquement moins de 100 ms de temps CPU sur plusieurs jours
Il n’y a aucune excuse pour ne pas exécuter un serveur DHCP dédié dans votre laboratoire.
Alternative : Kea DHCP
ISC DHCP Server est en mode maintenance en amont ; l’Internet Systems Consortium recommande maintenant Kea comme remplacement. Kea offre une API REST moderne, un stockage des baux basé sur une base de données, et de meilleures performances à grande échelle. Pour un homelab avec moins de 50 clients, ISC DHCP est encore parfaitement adéquat et plus simple à configurer. Kea sera couvert dans un futur article.
Résumé
Exécuter un serveur ISC DHCP dédié dans un conteneur LXC vous donne :
- Un contrôle total sur les allocations IP
- Des réservations statiques pour tous les conteneurs d’infrastructure
- Un pool dynamique pour les charges de travail de test / transitoires
- Zéro dépendance envers la configuration du routeur amont
- Un service léger qui ne coûte pratiquement rien en ressources
La configuration entière tient dans un seul fichier (/etc/dhcp/dhcpd.conf) avec moins de 30 lignes significatives. Si un conteneur meurt ou doit être reconstruit, la configuration DHCP est la première chose que je restaure — tout le reste reçoit son IP du serveur automatiquement.
Ceci fait partie d’une série documentant une infrastructure homelab Proxmox VE.