1. Gestion des principaux services réseau

1.1. Gestion du serveur de noms avec BIND

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.

1.1.1. Comment fonctionne un serveur DNS ?

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 espace hiérarchique de nom ;

  • 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
          ...

    files est utilisé par /etc/hosts, et dns par BIND.

Il existe 3 types de serveur de nom :

Primary server (serveur primaire)

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.

Secondary server (serveur secondaire)

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.

Serveur cache

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 Joe Cooper's The Book of Webmin. Vous y trouverez des explications pour presque toutes les options de BIND dans Webmin.

1.1.2. Installation de BIND et l'arborescence de BIND

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.

1.1.2.1. Paquetages à installer et l'arborescence de BIND

Vous avez simplement besoin d'un paquetage : BIND. Il contient le serveur de noms et les outils pour établir la bonne configuration :

# urpmi bind
[Astuce] Astuce

Vous pouvez également installer le paquetage bindgraph qui fournit l'interface DNS statistics RRDTool. Ce outil vous permettra d'obtenir des graphiques de l'activité du serveur DNS sur une base quotidienne, hebdomadaire, mensuelle et annuelle.

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. ;

  • query.log : toutes les requêtes pour un serveur de noms ;

  • security.log : approbation et rejet de requêtes ;

  • update.log : journal des mises à jour dynamiques ;

  • 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.

1.1.2.2. Configuration de BIND

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).

[Note] Note

BIND est très utile pour des configurations simples, mais il y a des différences entre la version 8.x et 9.x. Par contre, vous devez être prudent avec le module Webmin car toutes les options de BIND 9.x ne sont pas encore prises en charge. Donc, si vous utilisez les options avancées, consultez le fichier journal pour vous assurer que BIND fonctionne adéquatement.

L'écran principal est divisé en deux :

  • l'option Global Server Options : concerne le fichier /var/lib/named/etcnamed.conf et les fichiers inclus dans /var/lib/named/etc) ;

  • la partie Existing DNS zone vous permet d'accéder aux zones déjà définies représentées par une icône, et également de créer une nouvelle zone.

[Astuce] Astuce

Dès que vous modifiez les paramètres, soit dans Global Server Options ou dans Zones, n'oubliez pas de cliquer sur Apply Changes pour que le serveur charge la nouvelle configuration.

1.1.2.3. Zone fournies par défaut
[Astuce] Astuce

Par défaut, les zones sont identifiées avec une icône par zone. Vous pourriez préférer une liste des zones. Cliquez simplement sur Module Config. Dans la section Display options, cliquez sur List dans l'option Display domains as.

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
    
1.1.2.4. Configuration de base du serveur et la sécurité

Plusieurs paramètres peuvent être ajustés pour optimiser et sécuriser votre serveur DNS.

1.1.2.4.1. Définition des redirections 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.

Figure 7.1. Relais DNS

Relais DNS

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.

1.1.2.4.2. Sécurisation du serveur DNS

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.

Figure 7.2. Adresses DNS sur lesquelles écouter

Adresses DNS sur lesquelles écouter

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.

[Astuce] Astuce

Évidemment, cette mesure ne vous empêche pas de configurer un pare-feu, une procédure désormais essentielle pour l'installation d'un réseau.

1.1.2.5. Configuration des zones DNS d'un réseau local (LAN)

Figure 7.3. Création d'une nouvelle zone maître (master zone)

Création d'une nouvelle zone maître (master zone)

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 Create. Vôtre zone est maintenant prête à accueillir des nouvelles entrées pour des ordinateurs ou des services sur votre réseau local.

1.1.2.6. Enregistrer les ordinateurs de votre réseau

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.

Figure 7.4. Toutes les zones DNS

Toutes les zones DNS

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.

Figure 7.5. Ajout des noms d'ordinateur

Ajout des noms d'ordinateur

Vous pouvez ajouter autant de noms que le permet votre classe IP (254 dans notre exemple). Cliquez sur Create 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.

1.1.3. Gestion du service BIND

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}
start

Lance le démon named en lisant la configuration générale et les informations de zone.

stop

Arrête le démon named.

status

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
reload

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.

1.1.4. Configuration client

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 Network Configuration. 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.

Figure 7.6. Configuration du client

Configuration du client

1.2. Configuration avancée et dépannage

1.2.1. Comment résoudre les problèmes?

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 :

named-checkconf

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.

named-checkzone

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>
   

1.2.2. Déclaration du serveur de courrier électronique

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.

Figure 7.7. Déclaration d'un serveur de courrier électronique

Déclaration d'un serveur de courrier électronique

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.

[Note] Note

Le domaine indiqué dans le champ Name doit se terminé par un point, comme dans notre exemple.

[Astuce] Astuce

Le champ Priority (utilisé lorsque vous avez plus d'un serveur pour un même domaine) définit l'ordre dans lequel les serveurs doivent être contactés si un serveur de priorité supérieure n'est pas disponible.

1.2.3. Entrées SOA

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.

   

La syntaxe générale est :

name ttl class
   rr name-server email-addr (sn ref ret ex min)

Expliquons les paramètres principaux et comment les optimiser :

$TTL

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

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.

class

Établit la classe d'une entrée. Il prend maintenant la valeur IN (Internet).

name-server

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.

mail-addr

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..

serial number

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.

refresh

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.

update retry

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.

expiry

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).

minimum

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] 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.

1.3. Gestion des informations de Bind dans un répertoire OpenLDAP

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 :

  1. Importez vos zones dans la branche ou=dns de LDAP, où les ACL (Access Control List) s'attendent à trouver les informations DNS.

  2. Configurez named.conf pour l'utilisation de LDAP pour chaque zone importée.

  3. 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
  

1.3.1. Configuration de named.conf

Nous devons configurer named.conf pour qu'il consulte LDAP pour ces deux zones. Le fichier présenté plus bas est un exemple.

[Avertissement] Avertissement

Souvenez-vous que named opère en mode chroot et qu'il n'utilise pas le fichier/etc/hosts, mais le sien à l'intérieur du chroot. Évitez également de faire des boucles : par exemple, n'utilisez pas un serveur de noms qui est dans la zone LDAP pour spécifier un serveur LDAP. En général, il est préférable d'utiliser des adresses IP plutôt que des noms dans named.conf.

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).

1.3.2. Ajout d'information dans le répertoire LDAP

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] 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
   

Ajoutons-la :

$ 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"
[Avertissement] Avertissement

Vous devriez toujours réviser les entrées produites par zonetoldap, car il pourrait y avoir d'autres conflits avec d'autres entrées.

1.4. Gestion d'un serveur DHCP

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.

1.4.1. Fonctionnement d'un serveur DHCP

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.

Figure 7.8. Fonctionnement d'un serveur DHCP

Fonctionnement d'un serveur DHCP

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.

1.4.2.  Installation et configuration du serveur DHCP

1.4.2.1. Installation des paquetages et arborescence 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/rc.d/init.d/dhcpd : script pour gérer le démon DHCP.

  • /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 : démon 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.

1.4.2.2. Configuration du serveur DHCP

La configuration d'un serveur DHCP consiste principalement à écrire le fichier /etc/dhcpd.conf. Webmin fournit un module de configuration. Dans Webmin, cliquez sur Servers puis sur DHCP Server.

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 :

  • parameters  paramètres pouvant être généraux ou spécifiques à un réseau ou à un client

  • declarations : définit des réseaux ou des clients spécifiques devant être considérés

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 Edit Client Options.

1.4.2.2.1. Paramètres généraux

Voici les paramètres les plus communs :

ddns-update-style

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.

authoritative

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>
1.4.2.2.2. Déclaration de réseau et de client

Vous devez maintenant définir des clients ou des réseaux pour vos politiques DHCP. En voici un exemple :

Figure 7.9.  Application des déclarations pour une configuration DHCP pratique.

Application des déclarations pour une configuration DHCP pratique.

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.

  • Servers : même description que IT services.

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 :

host

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>;
	 }
group

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> { ... }
	 ...
	 }
subnet

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>
	 }
pool

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.

[Astuce] Astuce

Vous aurez sans doute à changer les configurations DHCP générales, ajouter des nouvelles déclarations, etc. Vous devrez alors redémarrer le serveur DHCP. Vous pouvez éviter cet inconvénient en utilisant l'outil interactif omshell. Voir la page de man de omshell.

1.4.2.3. Gestion du serveur DHCP

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 :

INTERFACES

Il peut déterminer sur quelle interface réseau écoute le dhcpd. Par défaut, dhcpd écoute sur toutes les interfaces.

OPTIONS

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.

1.4.2.4. Utiliser Webmin pour gérer les déclarations

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.

Figure 7.10. Ajout d'un nouveau client avec Webmin

Ajout d'un nouveau client avec Webmin

1.4.3.  Gestion des données DHCP dans un répertoire OpenLDAP

Suivez ces étapes pour conserver vos données DHCP dans un répertoire OpenLDAP :

  1. Importez les données de /etc/dhcpd.conf dans ou=dhcp.

  2. Configurez /etc/dhcpd.conf pour qu'il utilise LDAP (avec ou sans authentification).

[Astuce] Astuce

Veuillez également consulter le fichier README.ldap dans le répertoire de documentation de dhcp-common.

1.4.3.1. Configuration de dhcpd.conf

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.

1.4.3.2. Importation des données dans le répertoire 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.

Voici les options utilisées :

  • basedn : la branche où seront conservés les informations DHCP ;

  • dhcpdn : l'entrée contenant la configuration du serveur ;

  • conf : le fichier dhcpd.conf qui sera migré vers LDAP ;

  • server : le nom du serveur DHCP (devrait correspondre à la valeur de la commande hostname) ;

  • ldif : le fichier ldif.

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"