Attribution dynamique d’IP : le DHCP

8 février 2007

Télécharger en PDF

Table des matières

I.Principe 1

1.Définition du terme DHCP 1

2.Fonctionnement de BOOTP 2

3.Fonctionnement du protocole DHCP 2

4.Les baux d'attribution d'adresses IP 3

5.Relai DHCP 3

6.Se procurer un serveur DHCP 4

II.Configurer DHCPD 4

1.Servir une plage d'IP 4

2.Terminal client et démarrage réseau 5

3.Relai DHCP 6

a)Présentation de DHCRELAY 6

b)Configurer dhcrelay 7

c)Configurer dhcpd 7

4.Configuration de la mise à jour dynamique du DNS 8

a)Dans Bind 8

b)Dand Dhcpd 8

c)Vérifications de la configuration 9

d)Mise en garde pour les clients DHCP 9

5.Le fichier de logs de Baux 9

6.Lancement de DHCPD 10

III.Configuration des clients 10

1.Windows 95/98 10

2.Windows NT4/2000/XP 10

3.Debian 10

4.Fedora 10

IV.Et iptables dans tout ça 11

V.Bibliographie 11


I.Principe

1.Définition du terme DHCP

DHCP signifie Dynamic Host Configuration Protocol. Ce protocole permet à un ordinateur qui se connecte sur un réseau local d'obtenir automatiquement sa configuration (principalement réseau). Il suffit juste de dire à votre ordinateur qu'il doit utiliser DHCP. Le but principal étant la simplification de l'administration d'un réseau.

Le protocole DHCP sert principalement à distribuer des adresses IP sur un réseau, mais il a été conçu au départ comme complément au protocole BOOTP (Bootstrap Protocol) qui est utilisé pour lancer une installation ou un OS par le réseau en téléchargeant par TFTP les fichier nécessaires. Un serveur DHCP peut donc renvoyer des paramètres BOOTP ou de configuration propres à un hôte donné.

2.Fonctionnement de BOOTP

Un serveur BOOTP permet de transmettre simplement une adresse IP pour le client demandeur ainsi qu'un nom de fichier et l'adresse d'un serveur sur lequel il pourra aller chercher ce fichier. Ce fichier contient le système d'exploitation que le client devra exécuter.



schéma

3.Fonctionnement du protocole DHCP

Le serveur DHCP permet à la base de fournir de adresses IP. Il doit donc avoir une adresse IP fixe. Il n'est pas nécessaire pour un client de connaître cette IP car le client va broadcaster sa demande.

Le mécanisme de base de la communication est BOOTP (avec trame UDP). Quand une machine est démarrée, elle n'a aucune information sur sa configuration réseau etl'utilisateur n'a rien faire de particulier pour trouver son adresse IP. Dans cette situation, la technique utilisée est le broadcast : pour trouver et dialoguer avec un serveur DHCP, la machine va simplement émettre un paquet de broadcast sur 255.255.255.255 sur le réseau local. Lorsque le serveur DHCP recevra le paquet de broadcast, il renverra un autre paquet de broadcast (ben, oui, le client n'a toujours pas d'IP) contenant toutes les informations pour la configuration du client. Ce broadcast utilise donc les adresses MAC (par exemple d'Ethernet).

Bien que le mécanisme semble simple, il existe plusieurs type de paquets :

Le processus est le suivant :






4.Les baux d'attribution d'adresses IP

Pour éviter que des machines qui se trouvent sur un réseau pour peu de temps ne fassent perdre une adresse IP sur le réseau une fois partis, un mécanisme de limitation de l'attribution d'IP dans le temps a été mis en place pour DHCP. SI le serveur remarque un dépassement de la durée d'une attribution, il envoie un paquet DHCPNAK. Si le client tient compte de la limitation temporelle, il envoie un paquet DHCPREQUEST pour redemander la prolongation de la durée de l'attribution.

5.Relai DHCP

Le problème du DHCP est qu'il faut un serveur par sous réseau car les broadcasts précédents ne passent pas à travers des routeurs. Ainsi, si l'on veut avoir un seul serveur DHCP pour plusieurs sous réseaux, il est nécessaire de mettre, sur chaque sous réseaux, un agent de relai DHCP. Celui-ci va se charger de relayer les requêtes de broadcast (DHCPDISCOVER et DHCPREQUEST) des clients en les renvoyant en unicast au serveur DHCP qu'ils connaissent (de leur configuration) :



schéma

6.Se procurer un serveur DHCP

C'est l'Internet Software Consortium qui développe le serveur DHCP du monde du logiciel libre. La version 3.0 permet de mettre à jour dynamiquement un serveur DNS. Ce serveur est encore en version beta et subit des corrections régulières. Microsoft a bien entendu son propre serveur DHCP pour NT/2K/XP/2K3.

II.Configurer DHCPD


DHCPD permet aussi bien de fournir des IP à des machines Ethernet qu'à des machines sans fils.

Le fichier de configuration de DHCPD est /etc/dhcpd.conf . Toute ligne qui commence par # est un commentaire.

1.Servir une plage d'IP

C'est le rôle classique d'un serveur DHCP :



Important : l'adresse de sous -réseau à fournir à subnet doit absolument être l'adresse d'un sous réseaux sur lequel se trouve le serveur DHCP, autrement dit l'adresse de sous réseau d'une de ses interfaces. Sinon le serveur DHCP ne démarre pas. Cela peut aussi être utilisé pour pouvoir servir des plages IP différentes sur les différentes interfaces du serveur.



# Sample /etc/dhcpd.conf
# Permet de définir l'interface de réponse aux requêtes DHCP
DHCPDARGS=<interface>;

# définit le type de mise à jour des DNS : aucune
ddns-update-style none;

# définit la durée de validité des adresses IP attribuées en secondes
default-lease-time 600;
# définit la durée de validité maximum des adresses IP attribuées en secondes

max-lease-time 7200;

# définit le masque de sous réseaux des adresses IP attribuables
option subnet-mask <masque IP>;

# définit l'adresse de broadcast du sous réseau
option broadcast-address <adresse IP broadcast>;

# définit la (ou les = liste à virgule) passerelles du sous réseau
option routers <IP passerelle>;

# définit l'adresse IP du (ou des = liste à virgule) serveurs DNS du sous réseau

#ou du moins à définir pour les clients
option domain-name-servers <IP DNS>;

# définit le nom de domaine par défaut des clients du sous réseau
option domain-name "nom de domaine";

#alloue un sous réseau pour les clients
subnet <adresse sous réseau> netmask <masque de sous réseau> {
range <IP début sous réseau> <IP fin sous réseau>;

#si vous avez des clients habituels ou serveur statiques

host <nom client> {

      	#adresse MAC du client
	      hardware ethernet XX:XX:XX:XX:XX:XX;
      	#lui donner une adresse fixe
	      fixed-address <IP ou nom DNS client>;

}

#on peut répéter autant de directive host que l'on veut
}


2.Terminal client et démarrage réseau

Voilà encore une utilisation intéressante : lancer un OS ou une installation depuis le réseau...


Le fichier de config est le suivant:

# durée de session d'une adresse IP
default-lease-time 600;
# durée maximum de session d'une IP
max-lease-time 7200;
# serveur principal
authoritative;
#ne pas répondre aux clients inconnus
deny unknown-clients;

#nom de domaine des clients
option domain-name "nom de domaine";
#serveur DNS pour les clients
option domain-name-servers <IP DNS>;
#passerelle pour les clients
option routers <IP passerelle>;

#alloue un sous réseau pour les clients
subnet <adresse sous réseau> netmask <masque sous réseau> {
   #utiliser le nom d'hôte spécifié après host
   use-host-decl-names on;
   #masque du sous réseau
   option subnet-mask <masque sous réseau>;
   #adresse de diffusion du sous réseau
   option broadcast-address <adresse broadcast sous réseau>;
   
   #définit un client à servir
   host <nom client> {
      #adresse MAC du client
      hardware ethernet XX:XX:XX:XX:XX:XX;
      #lui donner une adresse fixe
      fixed-address <IP ou nom DNS client>;
	#serveur à contacter pour d'autres informations
      next-server <IP serveur NFS>;
	#lancer le client depuis le partage NFS <IP serveur NFS>:/diskless
      option root-path "<serveur NFS>:/diskless";
	#lancer le fichier kernel sur le client
      filename "/diskless/kernel";
     }
}

Pour ce qui est du partage NFS, il suffit de mettre dans un dossier /diskless, le contenu adéquat d'un noyau bootable par le réseau, d'une installation réseau ou de n'importe quel programme, OS bootable par le réseau. Et dans /etc/exports :


#autorise tout le monde à monter ce dossier

/diskless (ro)

3.Relai DHCP

a)Présentation de DHCRELAY

L'agent de relai DHCP (dhcrelay) vous permet de relayer les requêtes DHCP et BOOTP depuis un sous réseaux ne comportant pas de serveurs DHCP, à un serveur DHCP situé sur un autre sous réseau.

Quand dhcrelay reçoit une requête DHCP de broadcast, il l'envoie en unicast aux serveurs DHCP contenus dans sa configuration et à réception de la réponse unicast de ce dernier serveur, il renvoit la réponse en broadcast au client.

dhcrelay possède les options de ligne de commande suivante :

Argument

Description

-i nom_interface

Définit une interface sur lequel écouter les requêtes ou sur toutes les interfaces si au moins une option -i n'est pas présente.

-p port

Définit le port sur lequel le serveur écoute les requêtes des clients et les retransmet. Il renvoie la réponse au client sur port+1.

-d

Forcer à exécuter au premier plan

-q

Ne pas afficher la configuration aux démarrage



b)Configurer dhcrelay

Pour que le relayage puisse se faire, il faut configurer :



Sous Fedora/RedHat/Mandriva, on modifiera le fichier /etc/sysconfig/dhcrelay :

#définit la liste espacée du ou des serveurs vers/depuis lesquels dhcrelay

# doit transmettre les requêtes DHCP des clients (locaux à l'agent de relai)

# obligatoire

SERVERS=«IP_du_ou_des_serveurs_DHCP»



#définit d'autres options pour dhcrelay

# et principalement l'option -q

# pour ne pas afficher la configuration au démarrage du démon dhcrelay

# et une ou plusieurs fois l'option -i nom_interface,

# pour écouter seulement sur une ou plusieurs interfaces

OPTIONS=«-q -i nom_interface_écoute»



Sous Debian, on modifiera le fichier /etc/default/dhcp-relay :

#définit la liste espacée du ou des serveurs vers/depuis lesquels dhcrelay

# doit transmettre les requêtes DHCP des clients (locaux à l'agent de relai)

# obligatoire

DHCP_SERVERS=«IP_du_ou_des_serveurs_DHCP»



#définit la liste de la ou des interfaces sur lesquelles dhcrelay

# doit écouter espacée les requêtes DHCP des clients

# obligatoire

INTERFACES=«liste_interfaces_écoute»



#définit d'autres options pour dhcrelay

# principalement l'option -q

# pour ne pas afficher la configuration au démarrage du démon dhcrelay

OPTIONS=«-q»

c)Configurer dhcpd

Pour que le serveur DHCP puisse démarrer et servir des adresses IP par le biais des relais DHCP c'est à dire par des requêtes unicast, il faut indiquer dans le subnet



TODO

4.Configuration de la mise à jour dynamique du DNS

Quoi de plus intéressant pour un administrateur réseau que de n'avoir à inscrire la liste de ces clients et de leurs noms DNS qu'une seule fois dans un système et de pouvoir résoudre des noms DNS de client itinérants. Pour cela, il faut utiliser la capacité de dhcpd a modifier dynamiquement les zones DNS.

Pour cela, il est nécessaire que dhcpd et named tournent ensemble sur le même serveur.

a)Dans Bind

Dans le fichier /etc/named.conf, pour votre zone DNS et sa zone inverse, ajouter les directives zone correspondant : ceci autorise la mise à jour du DNS par le DHCPD tournant sur l'hôte local

allow-update {

127.0.0.1;

}

De plus, si certains hôtes gérés par le DNS ont un nom fixe dans les zones DNS, il est préférable de les supprimer de ces zones pour laisser dhcpd mettre à jour le DNS.

Enfin, il faudra surement donner les droits 770 (et la propriété root:named) aux dossier contenant les fichiers de zones sujets à mise à jour. Par exemple, /var/named ou /var/named/chroot/var/named ou encore /var/lib/named/var/lib/named (et sous dossiers).

b)Dand Dhcpd

Dans le fichier /etc/dhcpd.conf de la manière suivante :

# 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;
zone <nom zone DNS> {
    primary 127.0.0.1;
    }

zone <nom zone DNS inverse> {
    primary 127.0.0.1;
    }

Note :

Note 2 : relancer le service dhcpd et named après cela...et tout devrait être OK pour un test.

c)Vérifications de la configuration

Dans /var/named, à la première attribution d'une IP, deux nouveaux fichiers de zone doivent apparaître, avec le même nom que les zones de votre domaine, mais avec un suffixe .jnl. Si ces fichiers journaux binaires apparaissent c'est que tout fonctionne. Les fichiers de zone sont eux aussi modifiés mais longtemps après. Dans ces fichiers, de nouveaux enregistrements A sont apparus, suivis d'un enregistrement TXT qui permettent d'indiquer que le champ précédent est issu d'une mise à jour dynamique et il ne faut surtout pas le retirer.

d)Mise en garde pour les clients DHCP

La mise à jour dynamique de DNS nécessite de connaître le nom de l'hôte qui vient d'obtenir une IP, surtout si vous voulez conserver une cohérence entre les noms d'hôtes attribués localement et les noms DNS.

Le client DHCP de Windows envoie le nom d'hôte lors de la requête DHCP

Par contre, les clients Linux comme dhclient et même dhcpcd ne le font pas par défaut. Si vous n'y prenez garde, vos machines recevront bien leur configuration, mais la mise à jour DNS ne s'effectuera pas.

Avec dhclient, il faut créer un fichier /etc/dhclient.conf qui contiendra au moins la ligne :

send host-name "nom DNS hôte" ;

5.Le fichier de logs de Baux



On the DHCP server, the file /var/lib/dhcp/dhcpd.leases stores the DHCP client lease database. This file should not be modified by hand. DHCP lease information for each recently assigned IP address is automatically stored in the lease database. The information includes the length of the lease, to whom the IP address has been assigned, the start and end dates for the lease, and the MAC address of the network interface card that was used to retrieve the lease.

All times in the lease database are in Greenwich Mean Time (GMT), not local time.

The lease database is recreated from time to time so that it is not too large. First, all known leases are saved in a temporary lease database. The dhcpd.leases file is renamed dhcpd.leases~, and the temporary lease database is written to dhcpd.leases.

The DHCP daemon could be killed or the system could crash after the lease database has been renamed to the backup file but before the new file has been written. If this happens, there is no dhcpd.leases file that is required to start the service. Do not create a new lease file if this occurs. If you do, all the old leases will be lost and cause many problems. The correct solution is to rename the dhcpd.leases~ backup file to dhcpd.leases and then start the daemon.



Lease-file-name « chemin_et_nom_fichier_lease »;

6.Lancement de DHCPD

[root]# /etc/init.d/dhcpd start

Starting dhcpd [ OK ]


Si un message d'erreur apparaît c'est que vous avez fait une erreur de syntaxe.

III.Configuration des clients

Il n'y a rien à faire de plus que de dire que l'on veut une configuration dynamique.

1.Windows 95/98

Par le panneau de configuration, icône "réseau", cliquez sur "TCP/IP -> <votre carte réseau>. L'adresse IP doit être configurée dynamiquement, c'est d'ailleurs le choix par défaut à l'installation.

Pour vérifier, utiliser winipcfg.

2.Windows NT4/2000/XP

La configuration se fait dans le panneau de configuration, icône "réseau", onglet "protocoles", puis "propriétés" de TCP/IP. Là, vous avez indiqué que la carte doit recevoir une adresse IP dynamiquement.

Pour vérifier, utiliser ipconfig. La commande "ipconfig" permet également:

3.Debian

Dans le fichier /etc/network/interfaces pour chaque interface nécessitant :


#interface avec DHCP

ifce nom_interface inet dhcp

4.Fedora

Il existe divers clients : dhcpcd, dhclient, pump, dhcpxd mais le plus courant est dhclient de l'ISC.

Dans /etc/sysconfig/network-scripts, il y a des fichiers intitulé : ifcfg-interface. Ils doivent contenir au moins ces lignes :

DEVICE="interface"
BOOTPROTO="dhcp"
IPADDR=""
NETMASK=""
ONBOOT="yes"

IV.Et iptables dans tout ça

Le serveur DHCP utilise le port UDP 67 pour écouter les requêtes des clients. Le client DHCP utilise le port UDP 68 pour recevoir la réponse des serveurs DHCP :

iptables -A INPUT -p udp --dport 67 -j ACCEPT

iptables -A OUTPUT -p udp --sport 67 -j ACCEPT

iptables -A INPUT -p udp --dport 68 -j ACCEPT

iptables -A OUTPUT -p udp --sport 68 -j ACCEPT

V.Bibliographie


La principale documentation sur le DHCP est constituée par les incontournables RFCs :

Et puis :

sharevb