Sommaire
1. Introduction
2. Installation
3. Configuration
3.1 /etc/default/dhcp3-server
3.2 /etc/dhcp3/dhcpd.conf
4. Les commandes
5. Liens et Ressources
1 Introduction
La mise en place d'un serveur DHCP permet de récupérer une adresse IP automatiquement via le serveur. Pour illuster son intérêt, supposons que vous ayez un ordinateur portable se fiant au protocol DHCP pour lui fournir son adresse IP. Il y a un serveur DHCP sur votre réseau local chez vous ainsi qu'au travail. Dans ce cas, un branchement du cable réseau, et le tour est joué. Autrement, j'espère que vous connaissez la définition des deux réseaux locaux et les adresses disponibles.2 Installation
Pour installer le server dhcp, la commande est la suivante :# apt-get install dhcp3-serverA la suite de cette commande, les packages dhcp3-server et dhcp3-common seront installés. Le système essayera ensuite de lancé dhcp3-server mais vous obtiendrez :
Starting DHCP server: dhcpd3 failed to start - check syslog for diagnostics. invoke-rc.d: initscript dhcp3-server, action "start" failed.C'est tout à fait normal, il faut le configurer un minimum pour pouvoir le lancer.
3 Configuration
Il y a deux fichiers à renseigner afin de configurer le serveur dhcp :- /etc/default/dhcp3-server
- /etc/dhcp3/dhcpd.conf
3.1 /etc/default/dhcp3-server
Ce fichier contient l'interface sur laquelle doit écouter le serveur. On modifie la ligne INTERFACES="", qui est d'ailleurs la seule ligne du fichier, en y ajoutant l'interface que l'on veut. Par exemple, mon serveur dhcp doit tourner sur l'interface eth1 donc, j'obtiens :INTERFACES="eth1"
3.2 /etc/dhcp3/dhcpd.conf
Ce fichier permet de définir toute la configuration du serveur DHCP.3.2.1 Utilisation simple
L'exemple suivant ne montre qu'une partie de la configuration pour mettre en évidence la déclaration d'un réseau et d'un hôte spécifique auquel on veut attribuer une ip fixe.
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.5 192.168.0.20;
option routers 192.168.0.1;
option domain-name-servers 80.10.246.2, 80.10.246.129;
}
host server2 {
hardware ethernet 00:C0:9F:AF:83:85;
fixed-address 192.168.0.2;
}
Cette exemple déclare un réseau local en 192.168.0.0/255.255.255.0
dont les adresses seront automatiquement attribuées entre 192.168.0.5
et 192.168.0.20. Le serveur principal est déclaré en 192.168.0.1. De
plus, les DNS sont définis grâce à l'option
domain-name-servers. L'adresse 192.168.0.2 sera associée à
l'ordinateur dont l'adresse MAC est 00:C0:9F:AF:83:85.
Ayant declaré des serveurs DNS dans la configuration du serveur DHCP,
cela signifie que l'on présuppose que les machines du réseau local ont
le droit de se connecter à Internet. Cependant, déclarer une
passerelle par défaut et des DNS n'est pas suffisant pour permettre
une connexion Internet aux ordinateurs du reseau local. Il faut
activer le partage NAT et autoriser le forwarding. Jettez un coup
d'oeil ici : Script De Configuration Des Interfaces Reseau Avec
Firewall.
De cette manière, on obtient une ip fixe pour certains ordinateurs
(serveurs) et une ip non fixes pour les autres.
Maintenant que tout est configuré, on lance le démon :
# /etc/init.d/dhcp3-server startEt on vérifie bien que tout fonctionne.
3.2.2 Création des pools et class
La configuration suivante met en évidence l'utilisation des pools et des classes pour créer différents "sous-réseaux" ; elle est minimale et n'est qu'une base de départ. La mise en place de ces différents groupes a pour objectif de permettre une meilleur localisation des ressources sur le réseau. Il est ainsi possible de distinguer un serveur, d'un poste utilisateur et mieux encore, d'une machine étrangère au réseau ; un firewall basé sur cette architecture pourrait interdire ses ressources à des machines étrangères, ou leur interdire d'accéder à Internet. Cette méthode n'est en aucun cas une mesure fiable pour sécuriser un réseau, mais elle a le mérite d'écarter certains petits malins 8).
# Créer la classe de niveau 1 spécifique à un identifiant LAN_1*
class "lan_level_1" {
match if substring (option dhcp-client-identifier,0,5) = "LAN_1";
}
# Créer la classe de niveau 2 spécifique à un identifiant LAN_2*
class "lan_level_2" {
match if substring (option dhcp-client-identifier,0,5) = "LAN_2";
}
# Créer le réseau privé 192.168.0.0/24
subnet 192.168.0.0 netmask 255.255.255.0 {
# Associer la plage [100-120] pour les machines inconnues sur le réseau
pool {
deny members of "lan_level_1";
deny members of "lan_level_2";
range 192.168.0.100 192.168.0.120;
}
# Associer la plage [10-20] aux machines de niveau 1
pool {
allow members of "lan_level_1";
deny members of "lan_level_2";
range 192.168.0.10 192.168.0.20;
}
# Associer la plage [2-5] aux machines de niveau 2
pool {
deny members of "lan_level_1";
allow members of "lan_level_2";
range 192.168.0.3 192.168.0.5;
# Configuration du second serveur via son adr MAC
host etch {
hardware ethernet 00:C0:9F:AF:83:85;
fixed-address 192.168.0.2;
}
}
}
Pour définir les classes, je fais mention de l'option
dhcp-client-identifier. Il faut ajouter cette option dans le ficher
/etc/dhcp3/dhclient.conf pour les différents utilisateurs en fonction
des groupes.
send dhcp-client-identifier "LAN_1_PC1"Dans l'éventualité où vous auriez des stations windows sur votre réseau, il faut faire comme cela depuis un prompt :
# ipconfig /setclassid "Connexion au réseau local" LAN_1_PC1Le poste se voit affecter l'id "LAN_1_PC1".
3.2.3 DHCP et update DNS
La configuration présentée s'intègre dans le cadre d'un serveur DHCP s'appuyant sur les points suivants :- Déclaration d'un réseau 192.168.0.0/24 géré par un master DHCP uniquement
- Création de pools pour maîtriser l'allocation des adresses ip des clients en fonction de leur uid sur le réseau
- Intégration du domaine example.com au réseau
- Update dynamique des données pour la zone example.com et son inverse grâce à une clef TSIG
# Mettre à jour le serveur DNS
ddns-update-style interim;
ddns-updates on;
# Charger la signature (TSIG) pour pouvoir autoriser les transactions
# avec BIND
include "/etc/bind/ns-example-com_rndc-key";
# Déclarer le serveur DHCP en tant que master
authoritative;
# Refuser les adresses mac en double
deny duplicates;
# Refuser les messages DHCPDECLINE indiquant un conflit réseau.
ignore declines;
# Enregistrer uniquement le nom d'hôte si le FQDN n'est pas géré par le
# serveur
ignore client-updates;
# Lister des serveurs DNS pour le réseau
option domain-name-servers 192.168.0.1;
# Informer les clients de la présence d'un serveur de temps local
ntp-servers 192.168.0.1
# Gérer les leases
default-lease-time 18000;
max-lease-time 36000;
# Créer les différentes classes
class "level_1" {
match if substring (option dhcp-client-identifier,0,5) = "LAN_1";
}
class "level_2" {
match if substring (option dhcp-client-identifier,0,5) = "LAN_2";
}
# Mettre en place le réseau local 192.168.0.0/24
subnet 192.168.0.0 netmask 255.255.255.0 {
# Lister les options du réseau
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
# Associer un nom de domaine pour la zone
option domain-name "example.com";
# Gérer l'update DNS (le reverse est fait par défaut)
ddns-domainname "example.com";
# Définir les zones DNS que DHCP doit mettre à jour
zone example.com. {
primary 127.0.0.1;
key ns-example-com_rndc-key;
}
zone 0.168.192.in-addr.arpa.
{
primary 127.0.0.1;
key ns-example-com_rndc-key;
}
# Gérer les machines "visiteurs"
pool {
deny members of "level_1";
deny members of "level_2";
range 192.168.0.100 192.168.0.120;
}
# Gérer les machines identifiées mais sans autorisation
pool {
allow members of "level_1";
deny members of "level_2";
range 192.168.0.20 192.168.0.50;
}
# Gérer les machines identifiées avec autorisation
pool {
deny members of "level_1";
allow members of "level_2";
range 192.168.0.10 192.168.0.15;
}
}
Pour le serveur de temps local, il faut configurer le client dhcp en
ajoutant l'option ntp-servers pour la directive request. Pour obtenir
le hostname des machines clientes, il est impératif d'envoyer le
hostname au serveur avec la directive send host-name