1 Introduction
Dynamic Host Configuration Protocol (DHCP) est un terme anglais désignant un protocole réseau dont le rôle est d'assurer la configuration automatique des paramètres TCP/IP d'une station, notamment en lui assignant automatiquement une adresse IP et un masque de sous-réseau. DHCP peut aussi configurer l'adresse de la passerelle par défaut, des serveurs de noms DNS et des serveurs de noms NBNS (connus sous le noms de serveurs WINS sur les réseaux de la société Microsoft).
La conception initiale d'Internet_protocol (IP) supposait la préconfiguration de chaque ordinateur connecté au réseau avec les paramètres TCP/IP adéquats : c'est l'adressage statique. Sur des réseaux de grandes dimensions ou étendues, où des modifications interviennent souvent, l'adressage statique engendre une lourde charge de maintenance et des risques d'erreurs. En outre les adresses assignées ne peuvent être utilisées même si l'ordinateur qui la détient n'est pas en service : un cas typique où ceci pose problème est celui des fournisseurs d'accès à internet (Fournisseur d'accès à Internet) ou ISP en anglais, qui ont en général plus de clients que d'adresses IP à leur disposition, mais dont tous les clients ne sont jamais connectés en même temps.
DHCP apporte une solution à ces deux inconvénients :
- Seuls les ordinateurs en service utilisent une adresse de l'espace d'adressage;
- Toute modification des paramètres (adresse de la passerelle, des serveurs de noms) est répercutée sur les stations lors du redémarrage;
- La modification de ces paramètres est centralisée sur les serveurs DHCP.
Le protocole a été présenté pour la première fois en octobre 1993 et est défini par la RFC1531, modifiée et complétée par les RFC 1534, RFC 2131 et RFC 2132.
2 Installation
2.1 Debian
Pour l'installation, comme d'habitude c'est assez simple :
aptitude
|
aptitude install dhcp3-server
|
2.2 OpenBSD
Sous OpenBSD, rien à installer, juste à l'activer. Editez le fichier rc.conf et insérez les interfaces qui doivent fournir le DHCP :
/etc/rc.conf
|
dhcpd_flags="sis1 vr0"
|
Puis nous allons créer le fichier de réservations :
touch
|
touch /var/db/dhcpd.leases
|
2.3 FreeBSD
Nous allons installer un serveur DHCP :
pkg_add
|
pkg_add -vr isc-dhcp41-server
|
Editez ensuite le fichier rc.conf pour y insérer votre configuration par défaut avec les interfaces sur lesquelles le serveur DHCP va écouter :
/etc/rc.conf
|
# Network services
dhcpd_enable="YES"
dhcpd_flags="-q"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="vr1 vr2"
dhcpd_chuser_enable="YES" # runs w/o privileges?
dhcpd_withuser="dhcpd" # user name to run as
dhcpd_withgroup="dhcpd" # group name to run as
dhcpd_chroot_enable="YES" # runs chrooted?
dhcpd_devfs_enable="YES" # use devfs if available?
dhcpd_rootdir="/var/db/dhcpd" # directory to run in
|
2.4 NetBSD
Sur NetBSD, le service existe déjà de base :
/etc/rc.conf
|
# DHCPd Server
dhcpd=YES
dhcpd_flags="-q vr1 vr2"
|
Indiquez les interfaces sur lesquelles vous voulez qu'elles tournent (vr1 et vr2 ici).
2.5 Red Hat
Pour installer un serveur DHCP sur Red Hat :
yum
|
yum install dhcp
|
Avant de modifier la configuration, nous allons copier une configuration classique :
cp
|
cp -f /usr/share/doc/dhcp-*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
|
3 Configuration
3.1 Exemple 1 : Debian
Editez le fichier /etc/dhcp3/dhcpd.conf sous Debian :
/etc/dhcp3/dhcpd.conf
|
# dhcpd.conf
# Sample configuration file for ISC dhcpd
# option definitions common to all supported networks...
# Autoritee serveur sur le reseau
authoritative;
# Refuse les adresses MAC en double.
deny duplicates;
# Ignore les messages DHCPDECLINE des clients, permet d'éviter
# l'abandon successif d'adresses.
ignore declines;
# Divers renseignements sont disponible pour paramétrer les clients.n
# voir man dhcp-options pour la liste. Dans notre cas ces options
# sont les mêmes pour tout nos réseaux.au
# option lpr-servers 192.168.0.7;
option netbios-name-servers 192.168.0.2;option smtp-server 192.168.0.1;# option pop-server 192.168.0.2;
# Indiquez l'adresse de votre réseau ou sous réseau avec son masque.qu
# Paramètres pour le réseau 192.168.0.0/240/
subnet 192.168.0.0 netmask 255.255.255.0 {
### Options DNS ###
# Nom de votre domaine pour cette zone.
option domain-name "deimos.fr";
# Nom ou adresses des DNS pour tout nos réseaux.a
option domain-name-servers 192.168.0.2, 212.27.32.176, 212.27.32.177;
# méthode de mise à jour du DNS :
ddns-update-style interim;
# mise à jour autorisée
ddns-updates on;
# ici, on force la mise à jour par le serveur DHCP
ignore client-updates;
# on force également la mise à jour des IP fixes
update-static-leases on;
# Information sur votre réseau :
option routers 192.168.0.138;option subnet-mask 255.255.255.0;option broadcast-address 192.168.0.255;
# routes statiques que les clients récupereront
option static-routes
172.16.0.0 192.168.0.138,
10.0.0.0 192.168.0.138;
# Plages d'adresses couvertes par DHCP.
Range 192.168.0.15 192.168.0.50;default-lease-time 21600;
max-lease-time 43200;
### Réservations ###
# Ordi1host earth { hardware ethernet 24:13:D4:E9:15:56; fixed-address 192.168.0.3; option host-name "earth";} # Ordi2host ordiminix { hardware ethernet 22:0c:6e:34:80:56; fixed-address 192.168.0.4; option host-name "flower";}
# faire appel à d'autres fichiers de conf
include "/etc/dhcp3/dhcpd.machintruc";
include "/etc/dhcp3/dhcpd.bidulechouette";
}
|
Lorsque vous avez terminé, redémarrer le service et tout fonctionnera :
dhcp3-server
|
/etc/init.d/dhcp3-server restart
|
3.2 Exemple 2 : Red Hat
Editez le fichier /etc/dhcp/dhcpd.conf pour y ajouter la configuration souhaitée. Ici j'ai 2 ranges déclarés. Chaque range a sa propre interface :
/etc/dhcp/dhcpd.conf
|
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "deimos.fr";
option domain-name-servers ns1.deimos.fr, ns2.deimos.fr;
default-lease-time 600;max-lease-time 7200;
# Use this to enble / disable dynamic dns updates globally.
ddns-update-style none;allow booting;allow bootp;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
subnet 10.102.2.32 netmask 255.255.255.224 { option routers 10.102.2.63; option subnet-mask 255.255.255.224; option domain-name-servers 192.168.0.69; range 10.102.2.33 10.102.2.62; next-server 10.102.2.1; filename "pxelinux.0";} subnet 10.102.2.64 netmask 255.255.255.224 { option routers 10.102.2.65; option subnet-mask 255.255.255.224; option domain-name-servers 192.168.0.69; range 10.102.2.66 10.102.2.94; next-server 10.102.2.1; filename "pxelinux.0";}
# This is a very basic subnet declaration.
#subnet 10.254.239.0 netmask 255.255.255.224 {
# range 10.254.239.10 10.254.239.20;
# option routers rtr-239-0-1.deimos.fr, rtr-239-0-2.deimos.fr;
#}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.
#subnet 10.254.239.32 netmask 255.255.255.224 {
# range dynamic-bootp 10.254.239.40 10.254.239.60;
# option broadcast-address 10.254.239.31;
# option routers rtr-239-32-1.deimos.fr;
#}
# A slightly different configuration for an internal subnet.
#subnet 10.5.5.0 netmask 255.255.255.224 {
# range 10.5.5.26 10.5.5.30;
# option domain-name-servers ns1.internal.deimos.fr;
# option domain-name "internal.deimos.fr";
# option routers 10.5.5.1;
# option broadcast-address 10.5.5.31;
# default-lease-time 600;
# max-lease-time 7200;
#}
# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
#host passacaglia {
# hardware ethernet 0:0:c0:5d:bd:95;
# filename "vmunix.passacaglia";
# server-name "toccata.fugue.com";
#}
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
#class "foo" {
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}
#shared-network 224-29 {
# subnet 10.17.224.0 netmask 255.255.255.0 {
# option routers rtr-224.deimos.fr;
# }
# subnet 10.0.29.0 netmask 255.255.255.0 {
# option routers rtr-29.deimos.fr;
# }
# pool {
# allow members of "foo";
# range 10.17.224.10 10.17.224.250;
# }
# pool {
# deny members of "foo";
# range 10.0.29.10 10.0.29.230;
# }
#}
|
Puis je vais déclarer les interfaces sur lesquelles le service dhcpd doit écouter :
/etc/sysconfig/dhcpd
|
# Command line options here
DHCPDARGS="eth1 eth2";
|
Comme je le disais plus haut, j'ai une interface par range, donc nous allons rajouter les routes qui vont bien :
/etc/sysconfig/network-scripts/route-eth1
|
ADDRESS1=10.102.2.32
NETMASK1=255.255.255.224
GATEWAY1=10.102.2.63
|
/etc/sysconfig/network-scripts/route-eth2
|
ADDRESS2=10.102.2.64
NETMASK2=255.255.255.224
GATEWAY2=10.102.2.94
|
Puis je redémarre le service :
service
|
service restart dhcpd
|
3.3 Exemple 3 : FreeBSD / NetBSD
Sous FreeBSD, la configuration est similaire aux autres versions :
/usr/local/etc/dhcpd.conf/? ou /etc/dhcpd.conf
|
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "deimos.fr";option domain-name-servers 8.8.8.8, 192.168.10.138;
default-lease-time 600;
max-lease-time 7200;
# Use this to enable / disable dynamic dns updates globally.
ddns-update-style none;
# If this DHCP server is the official DHCP server for the local# network, the authoritative directive should be uncommented.authoritative; # Allow each client to have exactly one lease, and expire# old leases if a new DHCPDISCOVER occursone-lease-per-client true; # Tell the server to look up the host name in DNSget-lease-hostnames true; # Ping the IP address that is being offered to make sure it isn't# configured on another node. This has some potential repercussions# for clients that don't like delays.ping-check true;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
# No service will be given on this subnet, but declaring it helps the
# DHCP server to understand the network topology.
#-----------------------------------------# Subnet declaration#-----------------------------------------subnet 192.168.1.0 netmask 255.255.255.0 { range 192.168.1.100 192.168.1.199; option domain-name-servers 8.8.8.8; option domain-name "deimos.fr"; option routers 192.168.1.254; option broadcast-address 192.168.1.255; default-lease-time 600; max-lease-time 7200;} #-----------------------------------------# Hostname declaration#-----------------------------------------#host ipad_deimos {# hardware ethernet 00:...;# fixed-address 192.168.1.90;#}
#subnet 10.152.187.0 netmask 255.255.255.0 {
#}
# This is a very basic subnet declaration.
#subnet 10.254.239.0 netmask 255.255.255.224 {
# range 10.254.239.10 10.254.239.20;
# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
#}
# This declaration allows BOOTP clients to get dynamic addresses,
# which we don't really recommend.
#subnet 10.254.239.32 netmask 255.255.255.224 {
# range dynamic-bootp 10.254.239.40 10.254.239.60;
# option broadcast-address 10.254.239.31;
# option routers rtr-239-32-1.example.org;
#}
# A slightly different configuration for an internal subnet.
#subnet 10.5.5.0 netmask 255.255.255.224 {
# range 10.5.5.26 10.5.5.30;
# option domain-name-servers ns1.internal.example.org;
# option domain-name "internal.example.org";
# option routers 10.5.5.1;
# option broadcast-address 10.5.5.31;
# default-lease-time 600;
# max-lease-time 7200;
#}
# Hosts which require special configuration options can be listed in
# host statements. If no address is specified, the address will be
# allocated dynamically (if possible), but the host-specific information
# will still come from the host declaration.
#host passacaglia {
# hardware ethernet 0:0:c0:5d:bd:95;
# filename "vmunix.passacaglia";
# server-name "toccata.fugue.com";
#}
# Fixed IP addresses can also be specified for hosts. These addresses
# should not also be listed as being available for dynamic assignment.
# Hosts for which fixed IP addresses have been specified can boot using
# BOOTP or DHCP. Hosts for which no fixed address is specified can only
# be booted with DHCP, unless there is an address range on the subnet
# to which a BOOTP client is connected which has the dynamic-bootp flag
# set.
#host fantasia {
# hardware ethernet 08:00:07:26:c0:a5;
# fixed-address fantasia.fugue.com;
#}
# You can declare a class of clients and then do address allocation
# based on that. The example below shows a case where all clients
# in a certain class get addresses on the 10.17.224/24 subnet, and all
# other clients get addresses on the 10.0.29/24 subnet.
#class "foo" {
# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
#}
#shared-network 224-29 {
# subnet 10.17.224.0 netmask 255.255.255.0 {
# option routers rtr-224.example.org;
# }
# subnet 10.0.29.0 netmask 255.255.255.0 {
# option routers rtr-29.example.org;
# }
# pool {
# allow members of "foo";
# range 10.17.224.10 10.17.224.250;
# }
# pool {
# deny members of "foo";
# range 10.0.29.10 10.0.29.230;
# }
#}
|
Vu que j'ai fais des réservations avec des includes et que je mon service DHCP est chrooté, je vais me créer une petite arborescence qui va me simplifier la vie :
|
mkdir /var/db/dhcpd/etc/dhcpd.d
cd /usr/local/etc
ln -s /var/db/dhcpd/etc/dhcpd.d .
|
Dedans je vais avoir mes fichiers de réservation.
Puis pour démarrer le service :
isc-dhcpd
|
/usr/local/etc/rc.d/isc-dhcpd start
|
4 Ressources
How To Set Up DHCP Failover