Mise en place d'un serveur Bind en backend LDAP
Contents
- 1 Introduction
- 2 Prérequis
- 3 Le fichier named.conf
- 4 Le fichier slapd.conf
- 5 Les ajouts dans l'annuaire LDAP
- 5.1 Un container pour toutes les configurations DNS
- 5.2 L'utilisateur dnsadmin
- 5.3 Un container pour la zone deimos.fr
- 5.4 Déclaration de la zone deimos.fr
- 5.5 Le SOA de la zone deimos.fr
- 5.6 Définition d'un enregistrement de type A
- 5.7 Définition d'un enregistrement de type CNAME
- 5.8 Un container pour la zone 1.168.192.in-addr.arpa
- 5.9 Déclaration de la zone 1.168.192.in-addr.arpa
- 5.10 Définition d'un enregistrement de type PTR
- 6 Application des modifications
- 7 Administration au quotidien
- 8 Mot de la fin
- 9 Ressources
1 Introduction
Ce document va expliquer la configuration d'un serveur Bind9 en maître mais avec un stockage dans un serveur LDAP plutôt que dans un fichier texte.
Pour cela, il faut utiliser le patch sdb-ldap venant de http://www.venaas.no/ldap/bind-sdb/ pour Bind9. FreeBSD inclut un port où le patch est directement appliqué Bind9 et il suffit de l'installer comme n'importe quel port.
Sur une Debian, il faudra utiliser apt-get source bind9 puis appliquer le patch à la main.
Dans la suite de ce document, tout sera basé sur un FreeBSD.
2 Prérequis
Il faudra biensûr avoir un serveur LDAP fonctionnel. Pour cela, si vous souhaitez utiliser OpenLDAP slapd, vous pouvez suivre le document suivant: Configuration SLAPD standard
Du côté Bind9, j'ai installé le port bind9-sdb-ldap avec WITH_PORT_REPLACES_BASE_BIND9=yes pour qu'il remplace Bind9 du système.
3 Le fichier named.conf
Le fichier sera assez similaire à celui du document suivant: Configuration Bind9 en master. Les sections options et logging seront les mêmes. Il n'y a que la déclaration de la zone qui change.
Cela sera de la forme suivante:
// Une zone standard zone "deimos.fr" { type master; database "ldap ldap://127.0.0.1/ou=deimos.fr,ou=dns,o=deimos,dc=fr???? \ !bindname=cn=dnsadmin%2cou=dns%2co=deimos%2cdc=fr,!x-bindpw=DnsPassword 172800"; notify yes; }; // Une zone reverse zone "1.168.192.in-addr.arpa" { type master; database "ldap ldap://127.0.0.1/ou=1.168.192.in-addr.arpa,ou=dns,o=deimos,dc=fr???? \ !bindname=cn=dnsadmin%2cou=dns%2co=deimos%2cdc=fr,!x-bindpw=DnsPassword 172800"; notify yes; };
On voit donc que l'on a une ligne database qui définit l'accès au LDAP plutôt que la ligne qui indique où se trouve le fichier texte dans une configuration standard.
Si on décortique un peu cette ligne, on voit:
- database: indique que l'on utilise un stockage de type base de données
- ldap indique c'est du LDAP
- ldap://127.0.0.1/ représente le serveur sur lequel on souhaite se connecter
- ou=deimos.fr,ou=dns,o=deimos,dc=fr indique le DN où toutes les informations en rapport avec le DNS sont stockées
- !bindname=cn=dnsadmin%2cou=dns%2co=deimos%2cdc=fr représente le DN que l'on utilise pour se connecter au serveur LDAP. Vous noterez que les "," sont remplacées par leur code "%2c".
- x-bindpw=DnsPassword est le password associé au DN
Grâce à cela, notre serveur Bind saura où et comment aller chercher les informations dans notre serveur LDAP.
4 Le fichier slapd.conf
Il n'y aura que peu de modifications à faire à la configuration de slapd.
Voici un extrait du fichier de configuration:
[...] # On ajoute le support des attributs et objectclass pour le dns include /usr/local/etc/openldap/schema/dnszone.schema [...] # On ajoute l'indexation des paramètres relatifs au DNS index relativeDomainName eq index zoneName eq [...] # On ajoute un utilisateur spécial pour parcourir cette branche de l'arbre # DNS admin ACL access to dn.subtree="ou=dns,o=deimos,dc=fr" by dn.regex="cn=dnsadmin,ou=dns,o=deimos,dc=fr" write by * auth
Il ne faut pas oublier de redémarrer son daemon slapd pour que cela soit pris en compte.
5 Les ajouts dans l'annuaire LDAP
Maintenant nous allons voir quoi ajouter dans notre annuaire LDAP pour que notre DNS fonctionne correctement.
Pour toutes les manipulations avec les commandes LDAP client. Tous les fichiers LDIF sont à ajouter avec la commande ldapadd.
5.1 Un container pour toutes les configurations DNS
Nous allons créer une branche dans l'arbre pour mettre toutes les configurations du serveur DNS.
Le LDIF sera de la forme suivante:
dn: ou=dns,o=deimos,dc=fr objectClass: top objectClass: organizationalUnit ou: dns description: All informations about DNS
5.2 L'utilisateur dnsadmin
Dans le fichier de configuration de slapd, nous avons ajouté un utilisateur dnsadmin.
Voici son fichier ldif:
dn: cn=dnsadmin,ou=dns,o=deimos,dc=fr objectClass: top objectClass: person userPassword: {SSHA}J8+mJREWzYkFDmXnZCTalBbQhq17xUzj cn: dnsadmin sn: dnsadmin user
5.3 Un container pour la zone deimos.fr
Nous allons maintenant ajouter une branche pour mettre toutes les configurations relatives à la zone deimos.fr.
Le LDIF sera de la forme suivante:
dn: ou=deimos.fr,ou=dns,o=deimos,dc=fr objectClass: top objectClass: organizationalUnit ou: deimos.fr description: All informations about deimos.fr zone
5.4 Déclaration de la zone deimos.fr
Maintenant, nous pouvons déclarer la zone deimos.fr dans l'arbre LDAP, on va donc utiliser notre branche correspondante que l'on vient de créer
Le LDIF sera de la forme suivante:
dn: zoneName=deimos.fr,ou=deimos.fr,ou=dns,o=deimos,dc=fr objectClass: top objectClass: dNSZone zoneName: deimos.fr relativeDomainName: deimos.fr
Notre serveur Bind9 aura maintenant une correspondance par rapport à ce que l'on a définit dans son fichier de configuration.
5.5 Le SOA de la zone deimos.fr
Ces informations correspondent au début d'un fichier de configuration d'une zone. On retrouvera donc les informations sur les différents temps de vie, sur les serveurs DNS de la zone, les serveurs MX, etc...
Le LDIF sera de la forme suivante:
dn: relativeDomainName=@,ou=deimos.fr,ou=dns,o=deimos,dc=fr objectClass: top objectClass: dNSZone zoneName: deimos.fr relativeDomainName: @ dNSTTL: 3600 dNSClass: IN sOARecord: ns.deimos.fr. administrateur.deimos.fr. 2006112801 8H 2H 1W 1D nSRecord: ns.deimos.fr. mXRecord: 10 smtp.deimos.fr. aRecord: 192.168.1.250 tXTRecord: Zone_principale_deimos.fr
Le aRecord à la fin correspond à une entrée qui permet de résoudre le nom de domaine si on fait une requête de type A dessus. Le tXTRecord sert de commentaire pour s'y retrouver... c'est pas obligatoire... mais c'est toujours pratique !
5.6 Définition d'un enregistrement de type A
Nous allons maintenant déclarer une machine avec un enregistrement de type A qui associe simplement un nom à une adresse IP.
Le LDIF sera de la forme suivante:
dn: relativeDomainName=cordelia,ou=deimos.fr,ou=dns,o=deimos,dc=fr objectClass: top objectClass: dNSZone zoneName: deimos.fr relativeDomainName: orthosie dNSTTL: 1800 dNSClass: IN aRecord: 192.168.1.250 tXTRecord: Serveur_principal_applications
Les paramètres parlent d'eux même, nous venons de déclarer orthosie.deimos.fr, son adresse IP est 192.168.1.250. Même remarque sur le tXTRecord, c'est toujours bien pour s'y retrouver !
5.7 Définition d'un enregistrement de type CNAME
Nous allons maintenant pouvoir déclarer un enregistrement de type CNAME qui associe simplement un nom à un autre nom déjà existant. On appelle cela couramment un alias.
Le LDIF sera de la forme suivante:
dn: relativeDomainName=ns,ou=deimos.fr,ou=dns,o=deimos,dc=fr objectClass: top objectClass: dNSZone zoneName: deimos.fr relativeDomainName: ns dNSTTL: 1800 dNSClass: CNAME cNAMERecord: cordelia tXTRecord: Alias_pour_le_DNS
Les paramètres parlent d'eux même là aussi, nous venons de déclarer ns.deimos.fr, son nom réél est orthosie.deimos.fr. Je vous passe le commentaire sur le tXTRecord.
5.8 Un container pour la zone 1.168.192.in-addr.arpa
Nous allons maintenant ajouter une branche pour mettre toutes les configurations relatives à la zone 1.168.192.in-addr.arpa.
Le LDIF sera de la forme suivante:
dn: ou=1.168.192.in-addr.arpa,ou=dns,o=deimos,dc=fr objectClass: top objectClass: organizationalUnit ou: 1.168.192.in-addr.arpa description: All informations about 1.168.192.in-addr.arpa zone
5.9 Déclaration de la zone 1.168.192.in-addr.arpa
Nous allons maintenant déclarer la zone 1.168.192.in-addr.arpa dans l'arbre LDAP, on va donc utiliser notre branche correspondante que l'on vient de créer
Le LDIF sera de la forme suivante:
dn: zoneName=1.168.192.in-addr.arpa,ou=1.168.192.in-addr.arpa,ou=dns,o=deimos,dc=fr objectClass: top objectClass: dNSZone zoneName: 1.168.192.in-addr.arpa relativeDomainName: 1.168.192.in-addr.arpa
Notre serveur Bind9 aura maintenant aussi une correspondance par rapport à ce que l'on a définit dans son fichier de configuration.
5.10 Définition d'un enregistrement de type PTR
Nous allons maintenant pouvoir déclarer un enregistrement de type PTR qui associe simplement une adresse IP à un nom.
Le LDIF sera de la forme suivante:
dn: relativeDomainName=250,ou=1.168.192.in-addr.arpa,ou=dns,o=deimos,dc=fr objectClass: top objectClass: dNSZone zoneName: 1.168.192.in-addr.arpa relativeDomainName: 250 pTRRecord: cordelia.deimos.fr. tXTRecord: Serveur_principal_applications
Une fois encore les paramètres parlent d'eux même. On associe 192.168.1.250 au nom orthosie.deimos.fr. Vous noterez le "." à la fin du nom de machine, c'est pour indiquer que c'est la fin du nom, il n'y a rien à concatener derrière.
6 Application des modifications
Il ne reste plus qu'à redémarrer le daemon Bind9. Pour cela:
# /etc/rc.d/named restart
Dans les logs système, on doit voir que Bind9 qui fait des requêtes sur le serveur LDAP.
Pour les ajouts d'entrées dans les zones déjà créées, c'est dynamique ! Il n'est pas nécessaire de redémarrer le daemon Bind9.
Par contre, quand on créé une nouvelle zone, il faut biensûr redémarrer Bind.
7 Administration au quotidien
Pour faciliter l'administration de toutes ces entrées dans le LDAP, vous pouvez utiliser un logiciel du type phpLDAPadmin mais personnellement, je n'ai pas trop...
Sinon il y a aussi quelques petits scripts Perl que j'ai écrit vite fait sur un coin de bureau virtuel... Ca se passe par là: Scripts d'administration LDAP pour les daemons DHCP/DNS.
8 Mot de la fin
Voilà notre serveur DNS configuré avec un stockage en LDAP plutôt qu'en fichier texte.
Le plus gros avantage est que les modifications sont prises à chaud sans redémarrage. Sinon, je suis sûr que l'on peut en trouver plein d'autres... L'administration centralisé, etc...
La facon propre pour avoir un serveur DNS de backup serait de configuré un autre slapd en réplication comme expliqué dans ce document: Configuration SLAPD en réplication puis, il faudra configurer Bind sur la machine en question pour qu'elle interroge le serveur LDAP local.
Sur les deux serveurs, Bind est configuré en master !
Un autre point aussi, les mises à jour pour les zones dynamiques ne sont pas possibles car Bind ne sait pas écrire dans l'arbre LDAP.
9 Ressources
http://www.free-4ever.net/index.php/Dns:configuration_bind9_backend_ldap