Résumé
Dans ce chapitre, nous allons présenter brièvement comment configurer les options générales du serveur de noms BIND, comment déclarer une nouvelle zone (nom de domaine) gérée par votre serveur DNS. Ce qui signifie que d'autres ordinateurs sur votre réseau, et peut-être d'Internet, pourront accéder aux services et aux ordinateurs sous vos noms de domaine.
Un serveur DNS permet
d'associer une adresse IP a un nom et vice versa. Par
exemple : www.mandriva.com
(« nom ») est actuellement associé à
212.85.147.118 (« adresse »). Pour
faire une analogie, un serveur de noms agit comme un répertoire
téléphonique : vous fournissez un nom et il retourne un
numéro vous permettant de rejoindre votre correspondant. Par
contre, ce mécanisme est transparent pour l'usager : il ne
verra jamais l'adresse IP grâce au serveur DNS.
BIND (Berkeley Internet Name Domain) est l'implémentation du système DNS basé sur le RFC 1034/1035 (nom de domaine). BIND est composé de 3 parties principales :
un serveur de nom contenant de l'information à propos de la hiérarchie du nom et de la configuration du domaine. Ce serveur est named.
un résolveur,
c'est-à-dire une gamme de routines de la bibliothèque C dont le
but est de traduire des noms en adresse IP. Ces routines sont
appelées par les services Internet comme ftp. Les résolveurs
reçoivent de l'information de BIND
directement. Mais vous pouvez aussi définir l'ordre de
résolution. Cet ordre est défini dans le fichier
/etc/nsswitch.conf. Les sources habituelles
pour la résolution de noms sont le fichier
/etc/hosts et le serveur DNS :
# cat
/etc/nsswitch.conf ... hosts: files nisplus nis dns
...
Il existe 3 types de serveur de nom :
Il s'agit de l'autorité concernant l'information qu'il fournit. Ce type de serveur peut déléguer son autorité pour des sous-domaines. Les serveurs primaires retournent l'information la plus à jour.
Il agit comme serveur de secours pour les résolveurs. Il contient la même information que le serveur primaire et il demande ces mises à jour au serveur primaire. Ce processus se nomme transfert de zone (zone transfer) et il utilise le protocole DNS NOTIFY, un mécanisme permettant au serveur maître d'informer ses subordonnés de changements aux zones.
Celui-ci ne conserve pas l'information localement. Il n'est pas autoritaire. Il demande au serveur primaire ou secondaire de résoudre ses requêtes et garde l'information en cache (antémémoire). Il est principalement utilisé pour réduire le trafic externe dans un réseau et ainsi réduire les besoins de bande passante Internet.
Pour en savoir plus
sur BIND, nous vous recommandons fortement de lire BIND 9 Administrator Reference
Manual (en anglais), disponible localement dans le
répertoire /usr/share/doc. Vous pouvez
également le trouver avec Webmin :
cliquez sur Recherche dans le coin supérieur
droit BIND DNS Server. Vous y trouverez des
liens locaux et Web sur le sujet. Le Reference Manual est
disponible en HTML si vous cliquez sur
bind-9.3.1/html/Bv9ARM.html. Ce manuel est
aussi disponible dans le format PDF
. Enfin, n'hésitez pas à consulter le site officiel de BIND .
Comme Webmin est l'outil graphique le plus complet pour gérer un serveur BIND, vous pouvez aussi consulter le chapitre détaillé dédié à BIND dans 's The Book of Webmin. Vous y trouverez des explications pour presque toutes les options de BIND dans Webmin.
L'installation de BIND est relativement simple, la configuration de base l'est aussi. Par contre, les configurations avancées peuvent devenir très complexe, c'est pourquoi nous en proposons seulement un survol.
Vous avez simplement besoin d'un paquetage : BIND. Il contient le serveur de noms et les outils pour établir la bonne configuration :
# urpmi bind
Par défaut, Mandriva Corporate Server 4
fournit le serveur BIND en mode
chroot. Cela signifie que les programmes de
BIND sont redirigés vers un autre répertoire que celui
d'origine. Il ne peut appeler de fichier à l'extérieur de ce
répertoire. Il s'agit d'une façon pratique d'isoler une
application en laquelle vous n'avez pas confiance et qui peut
être dangereuse pour la sécurité du serveur.
Finalement, voici
l'arborescence principale d'un serveur
BIND.
/var/lib/named est la racine pour le serveur
de noms :
/etc/init.d/named
/var/lib/named/
|-- dev
|-- etc
`-- var
|-- log
|-- named
|-- run
`-- tmp
/var/lib/named/etc contient les fichiers de
configuration principaux :
named.conf:
ce fichier est lu par le démon named au
démarrage. Il contient le chemin pour obtenir tous les fichiers
de données pour chaque domaines gérés, le type de serveur de
noms pour chacun et la configuration générale du serveur de nom.
rndc.conf
et rndc.key : ces fichiers
configurent le comportement de rndc,
qui contrôle l'opération du serveur de nom. Il communique avec
le serveur de noms sur une connexion TCP, envoyant des
commandes signées numériquement.
named : est le démon pour le serveur de nom BIND, qui écoute pour recevoir les requêtes.
Vous trouverez des
fichiers de journalisation dans
/var/lib/named/var/log. Par défaut,
BIND offre une façon de conserver des informations dans des
fichiers différents, selon les requêtes :
default.log :
information générale qui n'est pas classifiée dans d'autres
fichiers journaux, comme les informations de démarrage et
d'arrêt ;
notify.log :
protocole de notification concernant les changements dans les
fichiers de données sur les serveurs maîtres. ;
xfer-in.log : garde les requêtes de transfer de
zone qu'un serveur de noms reçoit une fois
activé ;
xfer-out.log :
requêtes de transfert de zone envoyées par le serveur de nom
lorsqu'il est activé.
Vous pouvez ajouter différents fichiers en utilisant d'autres catégories, mais les principales ont été définies plus haut.
Dans cette section, nous verrons la configuration pas à pas d'un serveur DNS pour répondre aux requêtes locales, en utilisant le module BIND de Webmin. Nous ajouterons une notification pour montrer les fichiers problématiques dans l'arborescence de BIND. Pour utiliser le module de Webmin, vous devez choisir la catégorie Serveur, puis le bouton BIND DNS Server (avec le 8 dans l'icône).
L'écran principal est divisé en deux :
Plusieurs zones sont fournies par défaut. Certaines servent d'exemples alors que d'autres sont essentielles au bon fonctionnement du service :
Root zone : est utilisée par le serveur DNS pour contacter les serveurs root (racine) sur Internet pour résoudre les domaines qui ne sont pas gérés par votre serveur DNS. Cela permet à votre serveur de noms de répondre à des requêtes Internet concernant des noms publics en les redirigeant vers le serveur approprié. À moins que votre serveur soit utilisé dans un réseau local isolé d'Internet ou si vous redirigez toutes les requêtes vers un autre serveur, vous ne devriez pas supprimer cette zone.
localhost et localdomain: sont des fichiers nécessaires pour la résolution en boucle (loopback). 127.0.0 est utilisé pour la résolution en boucle inversée. C'est utile pour des raisons de sécurité et pour utiliser le serveur comme serveur cache.
Vous pouvez supprimer toutes les autres zones. Voici l'arborescence de zone avec les commentaires susmentionnés :
/var/lib/named/var
|-- master
| |-- localdomain.zone
| `-- localhost.zone
|-- named.ca
|-- reverse
| `-- named.local
`-- slaves
Plusieurs paramètres peuvent être ajustés pour optimiser et sécuriser votre serveur DNS.
L'écran Redirections et transfer permet de voir les serveurs de noms à proximité susceptibles de répondre si le serveur DNS local n'est pas apte à répondre directement.
Dans le champ Servers to forward queries to, vous devriez lister les IP des autres serveurs de noms disponibles dans votre réseau local, ainsi qu'au moins 2 autres serveurs sur Internet ceux de votre fournisseur d'accès Internet idéalement. Cette procédure devrait réduire la charge sur votre serveur et accélérer le temps de réponse.
L'écran Adresses and Topology vous permet de définir sur quelles adresses le serveur écoute. Il est plus sûr d'écouter seulement sur les adresses des interfaces internes si le serveur n'est pas prévu pour répondre aux requêtes externes.
Dans le premier champ Addresses, entrez la liste (séparé par des espaces) des adresses sur lesquelles le serveur DNS va répondre. Les requêtes sur les autres adresses seront dès lors ignorées.
Une nouvelle page avec plusieurs icônes est affichée: la plupart d'entre elles peuvent être ignorées si vous n'avez pas besoin d'une configuration avancée. Vous pouvez ajouter le nom de toutes les machines du réseau de cette page, mais d'abord, vous devez créer la partie inversée de votre zone maître. En fait, une zone DNS se compose de deux parties, la première pour la conversion nom-à-adresse (transfert ou forward) et la seconde pour la conversion adresse-à-nom (inversée ou reverse).
Choisissez ensuite
Return to the zone list, puis
Create a master zone, changez la sélection
de Forward à
Reverse. Plutôt que d'entrer un nom de
domaine, entrez une classe d'adresses IP. Pour un réseau
192.168.1.0/2, vous devriez entrer
192.168.1.
Rappelez-vous de cliquer sur le bouton . Vôtre zone est maintenant prête à accueillir des nouvelles entrées pour des ordinateurs ou des services sur votre réseau local.
Il s'agit de la seule étape que vous devez répéter chaque fois pour chaque ordinateur. Tous les autres paramètres sont configurés une seule fois, tant que votre réseau ne change pas et que vous n'ajoutez pas de serveur DNS.
En cliquant sur Return to zone list, Existing DNS Zones devrait présenter 4 zone.
Cliquez sur la zone mydomain.test, puis sur l'icône adresse. Vous définissez ici les noms et les adresses IP des ordinateurs de votre réseau.
Vous pouvez ajouter autant de noms que le permet votre classe IP (254 dans notre exemple). Cliquez sur pour ajouter une nouvelle entrée, on vous demande alors d'ajouter un nouveau nom. Notez que l'option Update reverse? (mise à jour du DNS inversé) est cochée par défaut. Avec cette option, la partie inversée Reverse part de votre DNS est mise à jour automatiquement.
Nous avons créé un service DNS simple, mais complet. Pour le démarrer et charger la nouvelle configuration, cliquez Return to zone list puis Apply Changes.
Webmin vérifie les paramètres que vous entrez, donc il ne devrait pas être possible de fournir une configuration défaillante à BIND. Par contre, si le bouton Start Name Server apparaît, c'est que le serveur n'a pas démarré en raison d'une erreur de configuration.
Vous pouvez également utiliser la ligne de commande service qui fournit diverses options :
service named {start|stop|status|restart|reload}
Lance le
démon named en lisant la configuration
générale et les informations de zone.
Cette commande offre
de l'information intéressante concernant le serveur de
nom : nombre de zone gérées, le niveau des fichiers de
journalisation, de l'information sur les zones transférées,
statut général de démon named.
# service named status
number of zones: 4
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is ON
recursive clients: 0/1000
tcp clients: 0/100
server is up and running
Ce paramètre ne redémarre pas BIND complètement. Il force la relecture des fichiers de zone. Utilisez cette commande lorsque vous appliquez des changements aux fichiers de zone.
Afin d'utiliser votre
réseau local pour résoudre des adresses Internet, vous devez
configurer vos clients afin qu'ils utilisent votre DNS. Vous
pouvez réaliser ceci avec l'outil d'administration réseau dans le
Centre de contrôle Mandriva Linux, ou par Webmin :
cliquez sur l'icône Networking et puis sur
. Choisissez ensuite
DNS Client et entrez l'adresse IP de votre
serveur DNS dans le cas d'un client distant ou
127.0.0.1 si vous êtes sur le serveur.
Si le service n'a pas démarré,
consultez le fichier /var/log/messages pour
lire le message de debug de
BIND. Si vous ne trouvez pas l'erreur,
utilisez named-checkconf et
named-checkzone pour vérifier votre
configuration :
Cette
commande permet de vérifier named.conf pour
y trouver les erreurs de syntaxe :
# named-checkconf -t /var/lib/named /etc/named.conf
/etc/named.conf:101: zone '0.0.127.in-addr.arpa': type not
present
Vous devez utilisez
l'option -t pour spécifier le répertoire
chroot.
Cette commande vous permet de vérifier les fichiers de zone et y identifier des erreurs de syntaxe :
# named-checkzone
local /var/lib/named/var/named/reverse/named.local zone
local/IN: loaded serial 1997022700 OK
Le premier paramètre
identifie la zone vérifiée dans named.conf.
Le second est le fichier de zone.
Avec le paquetage
bind-utils, vous pouvez utiliser plusieurs
outils et particulièrement, la commande dig pour
effectuer des requêtes sur le serveur DNS. Par exemple, pour
interroger votre serveur concernant
machine2.mydomain.test, passez la commande
suivante :
$ dig machine2.mydomain.test @127.0.0.1
; <<>> DiG 9.2.3 <section<>> machine2.mydomain.test @127.0.0.1
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3287
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;machine2.mydomain.test. IN A
;; ANSWER SECTION:
machine2.mydomain.test. 38400 IN A 192.168.1.12
;; AUTHORITY SECTION:
mydomain.test. 38400 IN NS mycomputer.mydomain.test.
;; Query time: 14 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Fri Jan 23 14:11:10 2004
;; MSG SIZE rcvd: 81>
Si votre serveur doit prendre en charge les adresses courriel pour vos propres domaines, gérés par votre propre DNS, le serveur de courrier électronique doit être déclaré dans la configuration de votre domaine. De cette façon, les autres serveurs de courrier savent quel serveur est responsable de la livraison des messages destinés aux usagers de votre domaine.
Dans l'écran principal de votre zone, cliquez sur l'icône Mail Server.
Dans le champ Name, entrez le nom du domaine (même que la zone) et indiquer le nom du serveur dans le champ Mail Server. Assurez-vous que ce nom est également défini comme un domaine local sur votre machine, s'il fait partie du réseau local. Répétez cette opération pour chaque serveur de courrier électronique.
Les entrées SOA (Start Of Authority) définissent les paramètres globaux pour une zone. Il peut être essentiel de l'optimiser, particulièrement si vous gérer des serveurs secondaires (slaves). En voici un exemple :
$TTL 3360
$ORIGIN domain.test.
@ IN SOA ns1.domain.test. admin.domain.test. (
2005072801; serial number
6H; refresh
2H; update retry
1W; expiry
24H; minimum
)
TXT "My test domain"
IN NS ns1.linuxeries.org.
IN NS ns6.gandi.net.
name ttl class rr name-server email-addr (sn ref ret ex min)
Expliquons les paramètres principaux et comment les optimiser :
La valeur TTL (Time To Live) détermine la durée en seconde qu'une entrée peut rester en mémoire cache. Elle est utilisée principalement pour gérer des serveurs secondaires.
ORIGIN
définit une valeur de base de laquelle les substitutions pour des
domaines non qualifiés sont réalisées au moment de traiter les
fichiers de zone. Si cette valeur n'est pas définie, elle sera
remplacée par la valeur de named.conf.
@ doit être remplacé par la dernière valeur
de $ORIGIN dans un fichier de zone.
Établit la classe d'une entrée. Il prend maintenant la valeur IN (Internet).
C'est un serveur de nom qui répondra en tant qu'autorité pour le domaine. Il est spécifié avec son nom de domaine complet (Fully Qualified Domain Name ou FQDN) et se termine par un point.
L'adresse électronique de l'administrateur de la zone. Celui qui devrait être contacté en cas de problème. La syntaxe est : mailbox-name@domain.com..
Ce numéro de série doit
être augmenté lors de chaque modification du fichier de
zone. C'est une façon pour les serveurs secondaires
d'identifier les changements et de recharger leur
configuration. Il n'y a pas de règles établies pour le
composer, mais la convention suggère une valeur de date ce qui
en simplifie la lecture : aaaammjjss,
aaaa = année, mm = mois et jj = jour, alors que ss =
seconde. Grâce à la variable seconde, vous
pouvez le changer plusieurs fois par jour.
Détermine la durée d'attente avant qu'un serveur secondaire recharge la configuration du serveur principal. Le RFC recommande entre 1200 et 43200 secondes.
Constitue la durée entre les tentatives de mise à jour lorsqu'un serveur secondaire tente de contacter le serveur principal, suite à l'expiration de REFRESS. Habituellement les valeurs sont entre 180 secondes à 900 secondes.
Les serveurs secondaires arrêterons de répondre aux requêtes pour cette zone lorsque cette valeur sera expirée et qu'ils n'aurons pas réussi à rejoindre le serveur principal. Le RFC suggère entre 1209600 et 2419200 secondes (2-4 semaines).
Il s'agit
d'une durée négative de cache, ce qui signifie que la durée
ERREUR DE NOM = NXDOMAIN sera conservée dans
la mémoire cache.
Par défaut, les valeurs sont en secondes, mais vous pouvez utilisez : s ou S (secondes), m ou M (minutes), h ou H (heures), d ou D (journée), w ou W (semaines).
![]() |
Astuce |
|---|---|
Le site Web dnsreport proposes de vérifier votre configuration DNS, surtout si vous avez un nom de domaine public. Entrez votre zone ou votre nom de domaine et consultez le rapport complet qui en résultera. |
Mandriva Corporate Server 4 a basé tous les services inclus sur des répertoires LDAP, dans la mesure du possible. BIND fait partie du lot. Vous devez par contre suivre les étapes suivantes pour conserver les données de BIND dans un répertoire LDAP :
Importez vos zones dans la branche ou=dns de LDAP, où les ACL (Access Control List) s'attendent à trouver les informations DNS.
Configurez
named.conf pour l'utilisation de LDAP pour
chaque zone importée.
Configurez les
paramètres d'authentification LDAP dans
named.conf (ou=dns est
exclusivement lisible par un administrateur DNS ou de membres du
groupe DNS READERS).
Afin de présenter ces
étapes, nous allons utiliser l'exemple de zone suivant, basé sur le
fichier example.com.zone :
$TTL 86400 $ORIGIN example.com. @ IN SOA aurelio.example.com. hostmaster.example.com. ( 1 ; serial number 10800 ; refresh 3600 ; retry 604800 ; expires 86400 ) ; TTL @ IN NS aurelio.example.com. @ IN MX 10 mail.example.com. gateway IN A 10.0.1.1 dogs IN A 10.0.1.7 mail IN A 10.0.1.8 aurelio IN A 10.0.1.9 dhcp010 IN A 10.0.1.10 dhcp011 IN A 10.0.1.11 ns1 IN CNAME aurelio kdc IN CNAME dogs localhost IN A 127.0.0.1
Nous devons configurer
named.conf pour qu'il consulte LDAP pour ces
deux zones. Le fichier présenté plus bas est un exemple.
options {
directory "/var/named";
allow-transfer { none; };
notify no;
allow-query { any; };
};
zone "." {
type hint;
file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
zone "example.com" {
type master;
database "ldap ldap://127.0.0.1/ou=dns,dc=example,dc=com??sub??!bindname=uid=DNS%20Reader%2c
ou=System%20Accounts%2cdc=example%2cdc=com,!x-bindpw=dnsreader 86400";
};
zone "1.0.10.in-addr.arpa" {
type master;
database "ldap ldap://127.0.0.1/ou=dns,dc=example,dc=com??sub??!bindname=uid=DNS%20Reader%2c
ou=System%20Accounts%2cdc=example%2cdc=com,!x-bindpw=dnsreader 86400";
};
...
Le paramètre
database établit la base de données à utiliser
pour le fichier de zone. Dans notre cas, c'est LDAP. L'URL paraît
complexe, il suit le format générique du RFC 2255 :
ldap://server/basedn?attributes?scope?filter?extensions
Donc, si on veut
spécifier une recherche dans un sous-répertoire de
ou=dns sur localhost,
sans filtre par défaut, attributs ou extensions, ce serait :
ldap://localhost?ou=dns,dc=example,dc=com??sub?
Notre DIT, par contre, requiert des recherches authentifiées sur ou=dns, on doit donc ajouter une extension. Les extensions se définissent par une liste de noms séparés par des virgules, possiblement précédés par « ! » ce qui indique un usage critique. Nous utiliserons bindname et x-bindpw (ce dernier, n'étant pas standard, doit être précédé par « x- »). L'URL se compose maintenant comme suit :
ldap://localhost?ou=dns,dc=example,dc=com??sub??!bindname=uid=DNS
Reader, ou=System
Accounts,dc=example,dc=com,!x-bindpw=dnsreader
Comme les extensions sont séparées par des virgules, nous devons séparer les virgules dans binddn. Nous devons également annoncer les espaces. Nous accomplissons ceci en utilisant la syntaxe d'encodage standard des URL. Dans notre cas, l'URL devient finalement :
ldap://localhost/ou=dns,dc=example,dc=com??sub??!bindname=uid=DNS%20Reader%2c
ou=System%20Accounts%2cdc=example%2cdc=com,!x-bindpw=dnsreader
Soyez prudent car
/etc/named.conf doit être en mode
0640, usager root:named car
il contient maintenant 2 secrets : la clé rndc et les crédits
LDAP utilisés pour lier le répertoire (grâce à la clé rndc, il
devrait déjà avoir ces permissions, mais vérifiez quand même).
Après avoir préparé votre arborescence avec le script mandriva-setup.sh, vous pouvez insérer ces fichiers de zone dans LDAP à ou=dns (en utilisant les droits DNS Admin).
Vous pouvez utiliser
l'outil zonetoldap fourni par le paquetage
bind. Il analyse les fichiers de zone DNS en
format BIND 9, et charge le contenu dans un
répertoire LDAP. Si la zone existe déjà,
zonetoldap sortira avec succès. Si la zone
n'existe pas ou partiellement, zonetoldap
tente d'ajouter ou de compléter l'information de zone.
![]() |
Avertissement |
|---|---|
L'entrée SRV doit être placée en commentaire car zonetoldap ne peut la gérer pour l'instant. Nous l'ajouterons manuellement plus tard. |
$ zonetoldap -D 'uid=DNS Admin,ou=System Accounts,dc=example,dc=com' -W \ -b ou=dns,dc=example,dc=com -z example.com -f example.com.zone -h localhost -c Enter LDAP Password: secretpass
Cette opération produit les entrées suivantes sous ou=dns,dc=example,dc=com :
dc=com
dc=example
relativeDomainName=ns1+zoneName=example.com
relativeDomainName=mail+zoneName=example.com
relativeDomainName=localhost+zoneName=example.com
relativeDomainName=kdc+zoneName=example.com
relativeDomainName=gateway+zoneName=example.com
relativeDomainName=dogs+zoneName=example.com
relativeDomainName=dhcp011+zoneName=example.com
relativeDomainName=dhcp010+zoneName=example.com
relativeDomainName=aurelio+zoneName=example.com
relativeDomainName=@+zoneName=example.com
Nous devons encore ajouter l'entrée SRV que nous avons précédemment mise en commentaire. Utilisez la commande LDIF suivante :
dn: relativeDomainName=_kerberos._udp+zoneName=example.com,dc=example,dc=com,ou=dns,dc=example,dc=com
objectClass: dNSZone
relativeDomainName: _kerberos._udp
zoneName: example.com
SRVRecord: 0 0 88 dogs
$ ldapadd -x -D 'uid=DNS Admin,ou=System Accounts,dc=example,dc=com' \
-W -f srv.ldif
Enter LDAP Password: secretpass
adding new entry "relativeDomainName=_kerberos._udp+zoneName=example.com,dc=example,dc=com,
ou=dns,dc=example,dc=com"
DHCP (Dynamic Host Configuration Protocol) est un protocole réseau permettant d'assigner dynamiquement des adresses IP ainsi que les configurations globales du réseau.
Le diagramme ci-dessous explique le premier dialogue entre un client demandant une adresse IP et un serveur DHCP. Il est important de bien le saisir car puisque tous ces types de paquet apparaîtront dans les fichiers de journalisation. En comprenant leur contenu, vous pourrez mieux identifier une configuration problématique.
Il s'agit d'un dialogue de base et il pourrait être beaucoup plus long (lorsqu'une adresse IP est refusée, par exemple).
Un autre raison pour générer un dialogue entre un client et un serveur DHCP est la gestion de la réservation. Un serveur DHCP utilise des adresses IP selon des réservations : les adresses IP sont réservées pour une période déterminée pour optimiser les ressources du réseau. Vous trouverez donc des dialogues pour la gestion des réservations. Dès qu'une réservation est presque terminée, le client peut demander au serveur de la renouveler. Les clients utiliseront DHCPRESQUEST. Aussi, lorsque la réservation est presque terminée, le serveur peut envoyer une requête DHCPNAK indiquant l'expiration de la réservation et proposant le renouvellement. Si le serveur ne reçoit pas de réponse, l'adresse deviendra à nouveau disponible pour d'autres requêtes. La gestion des réservations est un des points clés pour optimiser la gestion des requêtes DHCP.
L'installation d'un serveur DHCP est relativement facile. Vous devez installer le paquetage dhcp-server. Vous devrez également installer dhcp-common. Ce dernier contient principalement de la documentation et des répertoires pour les fichiers de réservation.
# urpmi dhcp-server
L'arborescence DHCP est également simple :
/etc/dhcpd.conf.sample :
exemple de configuration d'un serveur DHCP. Vous pouvez
l'utiliser comme modèle également. Si c'est votre choix, le
fichier final devra se nommer
/etc/dhcp.conf.
/etc/sysconfig/dhcpd :
contient les paramètres qui doivent être ajoutés au serveur
DHCP au démarrage.
/usr/bin/omshell :
l'OMAPI Command Shell fournit
une façon interactive pour vous brancher, faire des requêtes et
possiblement changer l'information du serveur DHCP.
/usr/sbin/dhcpd-chroot.sh : script
permettant de faire tourner le serveur DHCP en mode
chroot.
/usr/sbin/dhcpd-conf-to-ldap.pl :
script permettant d'inclure les informations de DHCP dans un
répertoire LDAP
/usr/sbin/dhcpreport.pl :
script permettant d'afficher de l'information à propos des
données du serveur DHCP.
/var/lib/dhcp/dhcpd.leases:
base de données qui entrepose les données de
réservation.
La configuration d'un
serveur DHCP consiste principalement à écrire le fichier
/etc/dhcpd.conf. Webmin
fournit un module de configuration. Dans
Webmin, cliquez sur
puis sur .
Tel que mentionné précédemment, il n'y a pas de configuration par défaut. Vous trouverez un fichier modèle. Ce fichier est divisé en deux parties :
L'interface de Webmin est également divisée en deux parties : déclaration réseau et client, ainsi que la configuration générale en utilisant le bouton .
Voici les paramètres les plus communs :
C'est un paramètre requis concernant le mise à jour automatique du DNS. Le serveur ne sera pas fonctionnel sans ce paramètre. Vous pouvez l'utilisez avec la valeur au minimum none.
Ce paramètre est très important puisqu'il détermine si le serveur DHCP devrait envoyé des messages DHCP-NAK aux clients mal configurés. Si ce n'est pas fait, les clients seront incapables d'obtenir une adresse IP s'il change de sous-réseau jusqu'à ce que leur réservation précédente expire, ce qui peut être long dans certains cas. Aussi, si quelqu'un installe un serveur DHCP dans le même segment de réseau, il ne dérangera pas les dialogues avec les clients en envoyant des messages de DHCPNAK.
Vous pouvez aussi considérer comme des paramètres généraux toutes les options de réseau qui seront les mêmes pour tous les clients et réseau. Les déclarations d'option d'un serveur DHCP commencent toujours par le mot-clé option, suivi du nom de l'option et par sa date :
option
<option_name> <data>
Vous devez maintenant définir des clients ou des réseaux pour vos politiques DHCP. En voici un exemple :
Nous avons 4 différents types de réseau :
Samba domain :
commercial, HR
et Production appartiennent à ce
domaine. La plupart des postes devraient avoir des IP
réservées afin qu'elles conservent toujours la même. L'accès à
Internet est réservé à commercial
et HR en utilisant la même passerelle.
Temporary users : ces usagers ont des droits minimum sur les ressources réseau. Ces postes auront des réservations très courtes et utilisent leur propre passerelle pour accéder à Internet.
IT services: ces usagers ne font pas partie du domaine samba mais auront des adresses IP réservées. Ils utilisent leur propre passerelle.
Le serveur DHCP permet de simplifier la configuration en utilisant des déclarations d'hôte et de réseau. Voici les principaux types de définition :
La déclaration host vous permet de fournir un adresse IP fixe pour un ordinateur, basée sur l'adresse MAC de sa carte réseau. Vous pouvez lui fournir une adresse et un nom.
host
<non_fqdn> { option host-name "<fqdn>"; hardware
ethernet <MAC_address>; fixed-address <IP_address>;
}
La déclaration group permet de regrouper des déclarations d'hôtes et d'assigner des paramètres communs tels que le serveur DNS ou le serveur Netbios.
group <name> {
<option_name> <data>;
<option_name> <data>;
...
host <non_fqdn> { ... }
host <non_fqdn> { ... }
...
}
La déclaration subnet permet de fournir une configuration spécifique pour l'adressage dynamique d'un réseau précis. Vous aurez à établir la plage d'IP fournies et les options réseau.
subnet <network_address> netmask <netmask_address> {
<option_name> <data>;
<option_name> <data>;
...
range <ip_address_min> <ip_address_max>
}
La déclaration pool permet de fournir des paramètres spécifiques pour un sous-réseau dans une déclaration subnet.
subnet <network_address>
netmask <netmask_address> { <option_name> <data>; ...
pool { <option_name> <data>; range <ip_address_min>
<ip_address_max> } ... }
Utilisons les déclarations et les paramètres disponibles pour configurer le fichier du serveur DHCP de notre exemple :
# cat /etc/dhcpd.conf
ddns-update-style none;
authoritative;
# common network options
# common domain name server
option domain-name "domain.tst";
# common domain name server IP address
option domain-name-servers 192.168.7.1;
# common ntp server
option ntp-servers 192.168.7.2;
# Define Samba Domain computers
group sambanet {
# gateway IP address
option routers 192.168.2.254;
# netbios server IP address
option netbios-name-servers 192.168.2.253;
# do not allow clients that have no host declaration to get an IP address
deny unknown-clients;
host com1 {
# fully qualified hostname
option host-name "com1.domain.tst";
# MAC address
hardware ethernet 00:A0:78:8E:9E:AA;
# provided fix IP address
fixed-address 192.168.2.1;
}
...
host hr1 {
option host-name "hr1.domain.tst";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.2.10;
}
...
}
group sambalone {
option netbios-name-servers 192.168.2.253;
deny unknown-clients;
host prod1 {
option host-name "prod1.domain.tst";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.1.1;
}
...
}
subnet 192.168.3.0 netmask 255.255.255.0 {
range 192.168.3.1 192.168.3.200;
allow unknown-clients;
option routers 192.168.3.254;
}
group IT {
option routers 192.168.6.254;
deny unknown-clients;
host it1 {
option host-name "it1.domain.tst";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.6.1;
}
...
}
group servers {
option routers 192.168.7.254;
deny unknown-clients;
host dns {
option host-name "dns.domain.tst";
hardware ethernet 00:A0:78:8E:9E:AA;
fixed-address 192.168.7.1;
}
...
}
La configuration du serveur DHCP vous permet d'utiliser plusieurs paramètres. Les pages de man de dhcpd.conf, dhcp-options et dhcpd.leases vous propose ces options avec des exemples.
Vous pouvez gérer votre service DHCP avec le dhcp initscript afin de démarrer, arrêter ou redémarrer le démon. Utilisez la commande suivante :
service
{start|stop|restart|status} dhcpd
Vous pouvez aussi
spécifier la manière de démarrer le démon en utilisant le fichier
/etc/sysconfig/dhcpd, celui-ci étant lu au
démarrage du serveur. En voici les paramètres :
Il peut déterminer sur quelle interface réseau écoute le dhcpd. Par défaut, dhcpd écoute sur toutes les interfaces.
Vous pouvez ajouter plus d'options pour configurer votre démon :
-q : évite l'affichage des informations de licence au démarrage (utilisé par défaut) ;
-p : dicte le port sur lequel le serveur doit écouter pour recevoir les requêtes (par défaut 67). Cette option peut être utilisée pour configurer le serveur de relais DHCP ;
-d : indique tous les messages d'erreur dans fichier le standard.
Webmin peut vous aider à configurer des serveurs DHCP, mais aussi à gérer les déclarations et des paramètres spécifiques. Dans le module DHCP, les deux premières parties fournissent des interfaces pour gérer les sous-réseaux (subnet) et les clients (hosts). Cliquez sur Add a new host ou sur Add a new subnet.
Suivez ces étapes pour conserver vos données DHCP dans un répertoire OpenLDAP :
![]() |
Astuce |
|---|---|
Veuillez également
consulter le fichier |
Vous pouvez maintenant
retirer la majorité de la configuration de
/etc/dhcpd.conf, laissant seulement la partie
LDAP. En voici le résultat :
ldap-server "cs4.mandriva";
ldap-port 389;
ldap-username "uid=DHCP Reader,ou=System Accounts,dc=example,dc=com";
ldap-password "dhcpreader";
ldap-base-dn "ou=dhcp,dc=example,dc=com";
ldap-method dynamic;
Dans cet exemple, nous avons choisi d'utiliser des liens authentifiés, mais des recherches anonymes peuvent également être utilisées : retirez simplement ldap-username et ldap-password. Après ce changement, le serveur DHCP peut être démarré et il va consulter l'arborescence LDAP.
Le paquetage
dhcp-common inclut un script
contrib pouvant servir à importer un
/etc/dhcpd.conf existant dans LDAP :
/usr/sbin/dhcpd-conf-to-ldap.pl.
Dans cet exemple, nous allons importer les configurations élémentaires suivantes :
ddns-update-style none;
subnet 172.16.10.0 netmask 255.255.255.0 {
option routers 172.16.10.1;
option subnet-mask 255.255.255.0;
option domain-name "example.com";
option domain-name-servers 10.0.0.5;
default-lease-time 21600;
max-lease-time 43200;
deny unknown-clients;
host test009.example.com {
hardware ethernet 00:C0:DF:02:93:71;
fixed-address 172.16.10.5;
}
}
La commande ci-dessous
crée le fichier LDIF correspondant au
dhcpd.conf actuel. Notez également que ce
script n'a pas encore été testé avec toutes les configurations
possibles de DHCP. Consultez toujours le fichier LDIF.
$ perl /usr/sbin/dhcp-common-3.0.3/contrib/dhcpd-conf-to-ldap.pl \
--basedn "ou=dhcp,dc=example,dc=com" \
--dhcpdn "cn=DHCP Config,ou=dhcp,dc=example,dc=com" \
--conf /etc/dhcpd.conf --server cs4.example.com --ldif dhcpd.ldif
Creating LDAP Configuration with the following options:
Base DN: ou=dhcp,dc=example,dc=com
DHCP DN: cn=DHCP Config,ou=dhcp,dc=example,dc=com
Server DN: cn=cs4.example.com, ou=dhcp,dc=example,dc=com
Done.
dhcpd.ldif contient maintenant les données
que l'on veut importées. Vérifions :
dn: cn=cs4.example.com, ou=dhcp,dc=example,dc=com
cn: cs4.example.com
objectClass: top
objectClass: dhcpServer
dhcpServiceDN: cn=DHCP Config,ou=dhcp,dc=example,dc=com
dn: cn=DHCP Config,ou=dhcp,dc=example,dc=com
cn: DHCP Config
objectClass: top
objectClass: dhcpService
dhcpPrimaryDN: cn=cs4.example.com, ou=dhcp,dc=example,dc=com
dhcpStatements: ddns-update-style none
dn: cn=172.16.10.0, cn=DHCP Config,ou=dhcp,dc=example,dc=com
cn: 172.16.10.0
objectClass: top
objectClass: dhcpSubnet
objectClass: dhcpOptions
dhcpNetMask: 24
dhcpStatements: default-lease-time 21600
dhcpStatements: max-lease-time 43200
dhcpStatements: deny unknown-clients
dhcpOption: routers 172.16.10.1
dhcpOption: subnet-mask 255.255.255.0
dhcpOption: domain-name "example.com"
dhcpOption: domain-name-servers 10.0.0.5
dn: cn=test009.example.com, cn=172.16.10.0, cn=DHCP Config,ou=dhcp,dc=example,dc=com
cn: test009.example.com
objectClass: top
objectClass: dhcpHost
dhcpHWAddress: ethernet 00:c0:df:02:93:71
dhcpStatements: fixed-address 172.16.10.5
Ces données peuvent maintenant être importer. Nous allons utiliser le compte DHCP Admin pour cela :
$ ldapadd -x -D "uid=DHCP Admin,ou=System Accounts,dc=example,dc=com" -W -f dhcpd.ldif
Enter LDAP Password: secretpass
adding new entry "cn=cs4.example.com, ou=dhcp,dc=example,dc=com"
adding new entry "cn=DHCP Config,ou=dhcp,dc=example,dc=com"
adding new entry "cn=172.16.10.0, cn=DHCP Config,ou=dhcp,dc=example,dc=com"
adding new entry "cn=test009.example.com, cn=172.16.10.0, cn=DHCP Config,ou=dhcp,dc=example,dc=com"