\documentclass[a4paper,11pt]{report}

	\input{../includes/headers_global.tex}

	\def\sitename{Debian GNU/Linux :: Serveur }
	\def\shorttitre{DNS \& DHCP}
	\def\titre{Serveur DNS et DHCP couplé à LDAP }
	\def\autheur{Matthieu Vogelweith}
	\def\subject{Mise en place d'un serveur DNS et DHCP couplé à un annuaire LDAP sous Debian GNU/Linux}
	\def\keywords{Debian, Linux, Matthieu, Vogelweith, Serveur, Etch, DNS, Bind, DHCP, LDAP, resolvconf, forwarders, MDS}

	\input{../includes/headers.tex}

\begin{document}

\renewcommand{\bibname}{R\'ef\'erences}

\begin{titlepage}
	\maketitle
\end{titlepage}

\chapter*{Résumé}

	L'objectif de ce document est de détailler l'installation d'un serveur d'infrastructure (DNS et DHCP) complet basé sur des briques libres dont la réputation n'est plus à faire : BIND \cite{bind9} (Berkeley Internet Name Domain), DHCPD \cite{dhcpd} (Dynamic Host Configuration Protocol) et OpenLDAP \cite{openldap}.

    Afin de centraliser les informations relatives aux machines du réseau et de permettre un déploiement à grande échelle, les deux services utiliseront OpenLDAP pour stocker les informations. Tous les enregistrements DNS et toute la configuration du(des) serveur(s) DHCP sera donc enregistrée dans l'annuaire.

    Pour faciliter l'administration de ces services, ce document détaillera l'utilisation du module Netwok du MDS (\textbf{M}andriva \textbf{D}irectory \textbf{S}erver \cite{mds}). Enfin ce document présente de nombreux outils et astuces permettant de tester et évaluer le serveur mis en place.\\

\input{../includes/licence.tex}

\tableofcontents
		
\chapter{Préparation}

    \section{Pré requis}

Ce document suppose que le serveur est déjà installé avec une Debian Etch \cite{debian} propre. Pour plus d'informations sur l'installation et la configuration du système de base, voir ma page dédiée à l'installation du système.

    \section{Configuration du gestionnaire de paquets}

Comme indiqué précédemment, l'administration courante du serveur se fera avec le module Network du MDS. Pour obtenir les paquets, ajouter simplement les lignes suivantes dans le fichier /etc/apt/sources.list :

\vspace{1em}
\begin{lstlisting} 
# Mandriva Directory Server
deb http://mds.mandriva.org/pub/mds/debian etch main
\end{lstlisting}
\vspace{1em}

Notons que ce dépôt contient également les paquets pour BIND et DHCP recompilés avec le support LDAP. Ce support n'est pas encore intégré dans les archives officielles fournie par l'ISC mais est disponible avec les patch réalisés par FIXME \cite{ldap_patchs}.

Reste maintenant à mettre à jour la liste des paquets disponibles avec la commande suivante :

\vspace{1em}
\begin{lstlisting} 
# aptitude update
\end{lstlisting}
\vspace{1em}

    \section{Annuaire OpenLDAP \& MDS}

L'installation du serveur LDAP et la configuration de base du MDS faisant l'objet d'un document dédié \cite{ldap-mds}, elles ne seront pas détaillées ici. L'installation et la configuration du plugin Network du MDS sont cependant expliquées dans le paragraphe suivant.

    \section{Plugin Network du MDS}

- Gestion de zones de plusieurs réseau distant à partir de la même interface.\\
-> Plus besoin de faire quarante SSH pour modifier l'infrastructure des sites distants.\\

Le MDS possède un plugin permettant de gérer les champs LDAP relatifs aux zones DNS et aux sous-réseaux DHCP. Notons que cette page propose d'utiliser le MDS pour la gestion de l'annuaire mais il est tout à fait possible de suivre cette documentation en éditant l'annuaire en utilisant d'autres outils.

\vspace{1em}
\begin{lstlisting} 
# aptitude install mmc-agent mmc-web-base mmc-web-network python-mmc-network slapd ldap-utils
\end{lstlisting}
\vspace{1em}

Les schémas proposés de base avec OpenLDAP ne permette pas de gérer les services DNS et DHCP. Les schémas nécessaires sont donc fournis avec les paquets du MDS.
Pour utiliser ces schémas, il faut dans un premier temps les copier dans le répertoire dédié à cet effet :

\vspace{1em}
\begin{lstlisting} 
# cp /usr/share/doc/python-mmc-base/contrib/ldap/mmc.schema /etc/ldap/schema/
# cp /usr/share/doc/python-mmc-base/contrib/ldap/dnszone.schema /etc/ldap/schema/
# cp /usr/share/doc/python-mmc-base/contrib/ldap/dhcp.schema /etc/ldap/schema/
\end{lstlisting}
\vspace{1em}

Il faut maintenant configurer slapd pour qu'il utilise ces nouveaux schémas. Ajouter les lignes suivantes dans /etc/ldap/slapd.conf :

\vspace{1em}
\begin{lstlisting} 
include         /etc/ldap/schema/mmc.schema
include         /etc/ldap/schema/dnszone.schema
include         /etc/ldap/schema/dhcp.schema
\end{lstlisting}
\vspace{1em}

Et enfin re-démarrer le service pour que les modifications soient prises en compte :

\vspace{1em}
\begin{lstlisting} 
# /etc/init.d/slapd restart
\end{lstlisting}
\vspace{1em}

Le serveur LDAP est maintenant prêt pour fournir les différents champs nécessaires aux serveurs DNS et DHCP, il reste maintenant à configurer le plugin Network du MDS. Toute la configuration se fait dans /etc/mmc/plugins/network.ini :

\vspace{1em}
\begin{lstlisting} 
[main]
disable = 0

[dhcp]
dn = ou=DHCP,dc=example,dc=org
pidfile = /var/run/dhcpd.pid
init = /etc/init.d/dhcp3-server
logfile = /var/log/syslog
leases = /var/lib/dhcp3/dhcpd.leases

[dns]
dn = ou=DNS,dc=example,dc=org
pidfile = /var/run/bind/run/named.pid
init = /etc/init.d/bind9
logfile = /var/log/daemon.log
bindroot = /etc/bind/
bindgroup = bind
# dnsreader = DNS Reader
# dnsreaderpassword = DNSReaderPassword
\end{lstlisting}
\vspace{1em}

Pour appliquer les modifications et vérifier que la structure de l'annuaire est correcte, il faut simplement redémarrer l'agent MMC :

\vspace{1em}
\begin{lstlisting} 
# /etc/init.d/mmc-agent restart
\end{lstlisting}
\vspace{1em}

Toutes les branches LDAP nécessaires au fonctionnement du MDS sont automatiquement crées lors du redémarrage de l'agent.

\chapter{Serveur Bind 9}

	\section{Installation des paquets}

\vspace{1em}
\begin{lstlisting} 
# aptitude install bind9 resolvconf
\end{lstlisting}
\vspace{1em}

	\section{Configuration de base}

- Utilisation du fichier auto-généré par resolvconf pour gérer les forwarders. Dans /etc/bind/named.conf :

\vspace{1em}
\begin{lstlisting} 
# include "/etc/bind/named.conf.options";
include "/var/run/bind/named.options";
\end{lstlisting}
\vspace{1em}

	\section{Configuration LDAP}

Tous les fichiers de configuration nécessaires à la connexion avec OpenLDAP sont générés automatiquement par le MDS. Il suffit simplement d'inclure le fichier principal dans le fichier /etc/bind/named.conf :

\vspace{1em}
\begin{lstlisting} 
include "/etc/bind/named.conf.ldap";
\end{lstlisting}
\vspace{1em}

\chapter{Serveur DHCP}

	\section{Installation des paquets}

\vspace{1em}
\begin{lstlisting} 
# aptitude install dhcp3-server-ldap
\end{lstlisting}
\vspace{1em}

	\section{Configuration du service}

La configuration du service DHCP est très simple, il suffit de lui indiquer les paramètres de connexions à l'annuaire LDAP. On peut par exemple créer un fichier /etc/dhcp3/dhcpd.conf.ldap contenant les lignes suivantes :

\vspace{1em}
\begin{lstlisting} 
ldap-server "localhost";
ldap-port 389;
ldap-base-dn "dc=example,dc=org";
ldap-method dynamic;
ldap-debug-file "/var/log/dhcp-ldap-startup.log";
\end{lstlisting}
\vspace{1em}

Il suffit ensuite d'inclure ce fichier dans le fichier /etc/dhcp3/dhcpd.conf :

\vspace{1em}
\begin{lstlisting} 
include "/etc/dhcp3/dhcpd.conf.ldap";
\end{lstlisting}
\vspace{1em}
	
    \section{Configuration avancée}

Utilisation d'un utilisateur dédié pour la connexion à l'annuaire :

\vspace{1em}
\begin{lstlisting} 
ldap-username "cn=DHCPmaster,dc=example,dc=org";
ldap-password "mypassword";
\end{lstlisting}
\vspace{1em}

Utilisation forcée d'un hostname pour l'identification :

\vspace{1em}
\begin{lstlisting} 
ldap-dhcp-server-cn "dhcpserver";
\end{lstlisting}
\vspace{1em}

\clearpage
\nocite{*}
\bibliographystyle{unsrt}
\bibliography{\jobname}

%\ifpdf
%\else
%\chapter{Vos commentaires}
%\fi
\end{document}
