User Tools

Site Tools


informatique:logiciels:dhcpd

This is an old revision of the document!


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 à transformer la requête broadcastée dans un paquet unicast et de le router vers le serveur DHCP. Ce paquet unicast sera envoyé avec comme IP source l'adresse du routeur, mais contiendra toutes les infos du client (notamment son adresse MAC, dans le champs CHADDR).
  • 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
informatique/logiciels/dhcpd.1516976533.txt.gz · Last modified: 2018/01/26 14:22 by pteu