Tuxvador's Blog
Présentation de WorkItOut — Trouve ton partenaire de sport Rapports quotidiens automatisés CrowdSec par e-mail Gestion programmatique du DNS avec l'API IONOS Premiers pas avec Proxmox VE pour votre laboratoire maison Mon Homelab Proxmox VE : Aperçu de l'infrastructure
EN

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 vmbr0 ou vmbr1)
  • 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 :

DirectiveValeurObjectif
option domain-namehome.labDéfinit le domaine de recherche DNS pour tous les clients
option domain-name-servers8.8.8.8, 1.1.1.1Serveurs DNS transmis aux clients
default-lease-time86400 (24h)Durée par défaut d’un bail
max-lease-time86400 (24h)Durée maximale qu’un client peut demander
ddns-update-stylenoneDésactive les mises à jour DDNS (inutile dans un laboratoire)
authoritativeDé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 :

ConteneurMACIPRôle
dhcp-srv00:1a:2b:a3:ec:58.2Serveur DHCP
mon-srv00:1a:2b:35:9e:14.10Surveillance de sécurité (pile de monitoring)
web-proxy00:1a:2b:e2:df:11.11Proxy inverse / TLS
media-srv00:1a:2b:55:0c:64.13Pile multimédia
file-srv00:1a:2b:94:00:9c.14Serveur de fichiers
dev-srv00:1a:2b:41:af:0a.20Espace de travail Dev
vpn-srv00:1a:2b:53:0c:f5.25Point 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.