This is an old revision of the document!
Table of Contents
Installation
aptitude install isc-dhcp-server
Fichiers :
/etc/dhcp/dhcpd.conf
: fichier de configuration/var/lib/dhcpd/dhcpd.leases
: fichier des concessions = base des attributions d'IPs ; ne pas modifier à la main/usr/share/doc/dhcp*/dhcpd.conf.sample
: exemple de fichier de configuration
Configuration simple
Exemple de configuration simple (/etc/dhcp/dhcpd.conf
): pour un serveur desservant le service DHCP sur 3 interfaces (disons eth0, eth1 et eth2) :
# option globales s'appliquant par défaut à tous les subnets option domain-name "lan"; option domain-name-servers 10.1.2.108, 10.1.2.24; option netbios-name-servers 10.1.2.250, 10.1.2.251; option ntp-servers 10.1.2.100; default-lease-time 86400; max-lease-time 86400; log-facility local7; # eth0 subnet 10.0.0.0 netmask 255.255.255.0 { range 10.0.0.1 10.0.0.10; # range est utiliser pour déclarer des plages adressées dynamiquement range 10.0.0.20 10.0.0.29; # on peut attribuer différentes plages d'IP dans un subnet option routers 10.0.0.254; } # eth1 ; ce réseau est découpé en plusieurs pools subnet 10.1.0.0 netmask 255.255.255.0 { # pool default pool { range 10.1.0.1 10.1.0.100; # on interdit les PC dont l'adresse MAC n'est pas renseignée dans une directive "host" deny unknown-clients; } # pool masterisation de PCs pool { range dynamic-bootp 10.1.0.101 10.1.0.150; allow unknown-clients; max-lease-time 7200; # 2h } option routers 10.1.0.254; option subnet-mask 255.255.255.0; option broadcast-address 10.1.0.255; option domain-name "lan-tech"; } # eth2 subnet 10.2.0.0 netmask 255.255.255.0 { option domain-name "lan-srv"; range 10.2.0.1 10.2.0.200; option routers 10.2.0.254; }
Pour réserver une IP à un PC (on parle d'adressage DHCP statique) on l'associe à son adresse MAC (pour être propre on le déclarera dans un fichier dédié, /etc/dhcp/hosts-lan.conf
par exemple) :
# liste des réservations d'IPs host pc-patron { hardware ethernet 00:01:02:03:04:05; fixed-address 10.1.0.1; option host-name "pc-patron"; } # on utilise un group pour mutualiser les options group { # permet d'utiliser le nom des hosts comme "option host-name" # ce qui nous évite de les préciser en double pour chaque host ! use-host-decl-names on; host pc-grouillot1 { hardware ethernet 00:00:00:00:00:01; fixed-address 10.1.0.101; } host pc-grouillot2 { hardware ethernet 00:00:00:00:00:02; fixed-address 10.1.0.102; } }
Pour les clients bootp, il faut en plus spécifier au moins le fichier de boot :
host pc-techos { hardware ethernet 00:00:00:00:00:02; fixed-address 10.1.0.102; filename "pxelinux.0"; next-server 10.1.0.2; }
Ne pas oublier d'inclure ce fichier dans la conf
# à ajouter dans dhcp.conf include "/etc/dhcp/hosts-lan.conf";
Diverses options
DHCP relay
Pour desservir des réseaux qui ne sont pas directement connectés au serveur DHCP, on utilisera le DHCP Relay. Cela fonctionne ainsi :
- quelque part un client broadcaste un DHCPDISCOVER
- une bonne âme (un routeur par exemple) branchée sur ce réseau, est configurée pour relayer cette requête vers notre serveur : c'est un “DHCP relay”, ou “IP helper”. Son rôle consiste à convertir la requête broadcastée en un paquet unicast, et de le router vers le serveur DHCP. Ce paquet unicast sera envoyé avec l'IP du routeur comme
GIADDR
, permettant au serveur DHCP d'identifier le réseau du client, et contiendra toutes les infos du client (notamment son adresse MAC, dans le champsCHADDR
). - le serveur DHCP reçoit le DHCPDISCOVER “via” une de ces interfaces, et traite la transaction comme normalement, mais en envoyant ses réponses au routeur.
Exemple de cas pratique :
client <----10.0.0.0/24----> (10.0.0.1) routeur (192.168.0.1/24) <---> serveur DHCP (192.168.0.2/24 sur eth0)
Le routeur devra être configuré pour relayer les requêtes DHCP reçues sur le réseau 10.0.0.0/24 à destination du serveur DHCP 192.168.0.2.
Exemple de configuration du serveur DHCP :
[..] # eth0 # ici, le serveur n'attribue aucune IP sur le réseau 192.168.0.0/24 # qui ne sert que de transit pour recevoir les requêtes relayées shared-network { subnet 192.168.0.0 netmask 255.255.255.0 { } subnet 10.0.0.0 netmask 255.255.255.0 { option subnet-mask 255.255.255.0; option broadcast-address 10.0.0.255; option routers 10.0.0.1; option domain-name "remote-network.example"; range 10.0.0.2 10.0.0.100; } }
DHCP Forticlient
Ce que je veux faire :
- un concentrateur VPN sur un firewall Fortigate
- des clients qui établisse des VPN IPSec “dialup” avec un Forticlient
- ces derniers reçoivent leurs IP en DHCP depuis le serveur DHCP centralisé
- seuls les clients connus = déclarés sur le serveur DHCP reçoivent leurs propres IPs (réservées = adressage DHCP statique)
Pour avoir passé un peu de temps à comprendre pourquoi ça ne marche pas, il faut savoir que le type de hardware envoyé dans la requête DHCP relayée n'est pas “ethernet” mais “unknown-31” (en tout cas avec un client VPN Forticlient v5.6.0 !). ne sont pas de type “hardware ethernet”. Donc si on veut faire de l'adressage statique et interdire les clients inconnus :
subnet forticlient [...] { # interdire les clients inconnus deny unknown-clients; } # pas bien : (vos clients seront traités comme "unknown client" = pas d'IP pour eux ; # voir même "no free leases" car aucune directive "range" n'est présente !) host toto { hardware ethernet 00:11:22:33:44:55; fixed-address 10.0.0.1; } # bien : host toto { hardware unknown-31 00:11:22:33:44:55; fixed-address 10.0.0.1; }
Pour s'assurer du type de hardware d'un client, supprimer “deny unknown-clients;”, ajouter un “range” d'IP à attribuer aux clients inconnus, se connecter avec le client, et (enfin) regarder dans le fichier /var/lib/dhcpd/dhcpd.leases
le type de hardware de notre client (on le retrouve avec son adresse MAC ou IP).
Failover
Exemple de configuration failover :
# sur le primaire dhcp1.local failover peer "failover-partner" { primary; address dhcp1.local; port 519; peer address dhcp2.local; peer port 520; max‐response‐delay 60; max‐unacked‐updates 10; mclt 3600; split 128; load balance max seconds 3; } # sur le secondaire dhcp2.local failover peer "failover-partner" { secondary; address dhcp2.local; port 520; peer address dhcp1.local; peer port 519; max‐response‐delay 60; max‐unacked‐updates 10; load balance max seconds 3; } # Pour chaque range, il faut l'inclure dans un paragraphe "pool" # et ajouter une référence au failover [..] pool { failover peer "failover-partner"; range 10.2.0.1 10.2.0.200; [..] }
Diagnostic
# tester le fichier de configuration par défaut (/etc/dhcp/dhcpd.conf) sans relancer le service : dhcpd -t # tester le fichier de configuration spécifié : dhcpd -t -cf /etc/dhcpd/dhcpd-perso.conf