BIND 9
BIND, Berkeley Internet Name Domain, est un serveur de noms (DNS) utile à plusieurs niveaux.
- Si vous disposez d’une IP fixe, il peut gérer un nom de domaine, réservé par exemple sur EU.org.
- Il peut servir de cache DNS, ce qui est utile quand vous voulez vider le cache sans attendre la propagation standard d’un nom de domaine (rndc flush en root), ou pour éviter de subir les pannes des serveurs DNS de votre FAI.
- Il peut enregistrer les adresses des machines qui utilisent un même réseau local, pour avoir quelque chose de plus mnémotechnique, et éviter d’avoir à taper des adresses IP.
Ce tutoriel est tenu à jour régulièrement. Dernière révision : 10 octobre 2014.
Les commandes préfixées d’un # sont à lancer en root. Les commandes préfixées d’un % sont à lancer en simple utilisateur.
Cache DNS et réseau local
Tout d’abord, il faut installer BIND :
# apt-get install bind9
BIND est configuré par défaut pour faire cache DNS.
Le fichier de configuration global
On va lui ajouter de quoi faire la convertion IP → nom de machine pour le réseau local. Les modifications effectuées par l’administrateur doivent aller dans le fichier /etc/bind/named.conf.local. On va rajouter une zone « lan ».
zone "lan" {
type master;
file "/etc/bind/local/lan";
};
zone "168.192.in-addr.arpa" {
type master;
file "/etc/bind/local/lan.inv";
};
Le fichier de configuration secondaire, spécifique au réseau local
Nous allons ensuite passer à configuration du DNS pour le réseau local, dans le fichier /etc/bind/local/lan. Il faut savoir que les noms de machines doivent se terminer par un point. « machine. » signifie « machine », mais « machine » désigne « machine.mondomaine.fr ».
$TTL 86400
@ IN SOA serveur. root.serveur. (
1
8H
2H
1W
1D
)
@ IN NS serveur.
@ IN A 192.168.0.254
poste1 A 192.168.0.1
poste2 A 192.168.0.2
poste3 A 192.168.0.3
poste4 A 192.168.0.4
poste5 A 192.168.0.5
poste6 A 192.168.0.6
poste7 A 192.168.0.7
poste8 A 192.168.0.8
webcache CNAME serveur
Cette partie demande quelques explications :
- TTL signifie « Time To Live », la durée de vie des informations dans le cache des autres serveurs DNS. C’est une durée exprimée en secondes et elle représente ici une journée.
- Dans la deuxième ligne on retrouve l’hôte ou tourne le serveur de nom et l’email de l’administrateur réseau : « root.localhost. » — il faut remplacer le @ par un « . ».
- On a ensuite le numéro de série caractérisant la modification que l’on est en train de faire. Dans le cas d’un serveur maître qui répercutera à des esclaves, ce numéro est là pour indiquer à ces derniers qu’ils doivent se mettre à jour. Ici c’est inutile, puisqu’il s’agit d’une zone locale.
- Les 3 lignes suivantes sont dénommées « Refresh », « Retry » et « Expire ». À l’expiration du délai Refresh, un serveur esclave tentera de contacter son maitre. S’il ne le trouve pas, il fera une nouvelle tentative au bout du délai Retry. Au bout du délai Expire, il considérera que son maître n’est plus disponible.
- Ensuite nous avons la durée de vie minimum du cache.
- Nous indiquons après quel hôte est le serveur de noms du domaine (« NS pour Name Server »).
- On passe ensuite à la définition entre les noms d’hôtes et leurs IP.
- On peut ajouter des alias entre noms d’hôtes en utilisant CNAME, en plaçant à gauche le nouvel alias et à droite le nom ayant été défini sur une ligne A.
Pour vérifier que vous n’avez pas fait d’erreur, utiliser la commande suivante :
% /usr/sbin/named-checkzone lan /etc/bind/local/lan
zone lan/IN: loaded serial 1
OK
La résolution inverse
Créez le fichier /etc/bind/local/lan.inv.
$TTL 604800
@ IN SOA serveur. root.serveur. (
1
8H
2H
1W
1D
)
@ IN NS serveur.
254 PTR serveur.lan.
1 PTR poste1.lan.
2 PTR poste2.lan.
3 PTR poste3.lan.
4 PTR poste4.lan.
5 PTR poste5.lan.
6 PTR poste6.lan.
7 PTR poste7.lan.
8 PTR poste8.lan.
Vérification
Pour vérifier que vous n’avez pas fait d’erreur, vous pouvez utiliser la commande suivante :
% /usr/sbin/named-checkconf
Si elle ne renvoie rien, c’est que le fichier de configuration global est valide.
Ensuite lancez la commande suivante :
# service bind9 reload
Il vaut mieux utiliser reload que restart, pour éviter de vider le cache de BIND. Vérifiez que tout s’est bien passé en inspectant les logs.
% tail -n 20 /var/log/syslog
Vous devriez voir apparaître à la fin quelque chose comme :
Jan 30 01:11:54 serveur named[13221]: zone localhost/IN: loaded serial 1
Jan 30 01:11:54 serveur named[13221]: running
Jan 30 01:11:54 serveur named[13221]: zone 168.192.in-addr.arpa/IN: sending notifies (serial 1)
Cela signifie que BIND est lancé.
Vous devriez pouvoir faire un ping sur les machines de votre réseau local, ainsi que des hôtes extérieurs sur Internet.
Intégrer le serveur DNS au système
Il ne reste plus qu’à éditer le fichier /etc/resolv.conf, pour utiliser le serveur que l’on vient d’installer :
search lan
nameserver IP_SERVEUR
Au cas où, assurez-vous que votre /etc/hosts.conf est bien de la forme :
order hosts,bind
multi on
Conflit avec DHCP qui réécrit /etc/resolv.conf
Si vous utilisez le DHCP, et que vos machines ont un client DCHP avec une configuration standard, ce dernier peut écraser le contenu de /etc/resolv.conf à chaque lancement. Pour éviter ce comportement avec dhcp3-client, créer le fichier /etc/dhcp3/dhclient-enter-hooks.d/resolv :
make_resolv_conf() {
echo "Nothing to do for /etc/resolv.conf"
}
Gestion d’un nom de domaine EU.org
Retour au fichier de configuration global
Éditez à nouveau /etc/bind/named.conf.local pour y rajouter :
acl "ns_secondaire" {
IP_NS_SECONDAIRE;
};
zone "domaine.fr.eu.org" {
type master;
file "/etc/bind/masters/domaine.fr.eu.org";
allow-transfer { "ns_secondaire"; };
allow-query { any; };
};
Voir plus bas pour la configuration d’un serveur secondaire. Si vous n’avez pas de deuxième serveur disponible, et si personne dans votre entourage ne peut faire NS secondaire, vous pouvez regarder du côté de zoneedit.
Le fichier de zone
Il faut le créer, par exemple /etc/bind/masters/domaine.fr.eu.org.
$TTL 86400 ; 1 day
domaine.fr.eu.org. IN SOA ns.domaine.fr.eu.org. EMAIL. (
2006091001 ; serial
3H ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
@ NS ns.domaine.fr.eu.org.
@ NS ns_secondaire.
@ IN MX 10 ns.domaine.fr.eu.org.
@ A IP_NS_PRIMAIRE
ns A IP_NS_PRIMAIRE
www CNAME ns
webmail CNAME ns
Vérification
Utilisez les commandes /usr/sbin/named-checkconf et /usr/sbin/named-checkzone pour vérifier votre configuration. Une fois que tout est bon, dites à BIND de prendre en compte vos modifications.
# service bind9 reload
Pour finir, n’oubliez pas d’ouvrir le port 53 en TCP et en UDP si vous avez un firewall.
Serveur secondaire pour une zone
Voilà un exemple de la configuration d’un serveur en secondaire pour « domaine.fr.eu.org ». Dans /etc/bind/named.conf.local rajoutez :
zone "domaine.fr.eu.org" {
type slave;
file "/etc/bind/slaves/domaine.fr.eu.org";
masters { IP_NS_PRIMAIRE; };
};
Vous devez créer le répertoire /etc/bind/slaves/. Le fichier /etc/bind/slaves/domaine.fr.eu.org sera créé et géré par BIND, c’est l’endroit où sera copiée la zone reçue du serveur primaire.
Ensuite on demande à BIND de recharger sa configuration (sur le secondaire) :
# service bind9 reload
En voulant ajouter une zone sur un secondaire, j’ai déjà été confronté à ce message d’erreur dans les logs :
[Jour] [Heure] [Hostname] named[5993]: client IP#PORT: received notify for zone 'domain.tld': not authoritative
Après avoir lancé les commandes named-checkconf et named-checkzone sur le primaire pour s’assurer qu’il n’y a pas une typo quelque part, j’ai demandé au primaire de renotifier la zone :
# rndc notify domain.tld
Mais le message d’erreur était toujours là, et le fichier n’était pas créé dans /etc/bind/slaves/. En fait, la commande service bind9 reload n’avait pas suffit, j’ai dû faire sur le secondaire :
# service bind9 stop
# service bind9 start
Réservation du nom de domaine
Maintenant que votre serveur DNS est fonctionnel, vous êtes fin prêt à aller sur le formulaire de création sur EU.org. Vous y remplirez les champs :
- Mandatory email address ;
- Organization ;
- Administrative contact ;
- Pas le « Technical contact »
- Type of resource record: NS
- NS primaire (votre serveur) : le nom de domaine que vous voulez réserver suivi de l’adresse IP du serveur ;
- Au moins un NS secondaire, avec le nom du domaine et l’adresse IP du serveur.
Il ne reste plus qu’à attendre la validation par les administrateurs d’EU.org. Elle est manuelle, ça peut donc prendre un moment.
Protéger l’accès à votre serveur DNS
En l’état, tout le monde peut se servir de votre serveur DNS. Ce dernier n’a aucun intérêt par rapport à celui d’un FAI, mais autant protéger son accès.
Dans /etc/bind/named.conf.local rajoutez :
acl "lan" {
192.168.0.0/16;
};
Ensuite dans /etc/bind/named.conf.options à la fin du bloc options{} rajoutez :
allow-recursion {
"lan";
127.0.0.1/8;
IP_PUBLIQUE/32;
};
Le problème des lame-server qui envahissent les logs
À cause de la mauvaise configuration de certains serveurs DNS, vous risquez de voir vos logs envahis par des choses du genre :
Sep 10 00:58:02 serveur named[12588]: lame server resolving 'dns3.hull.ac.uk' (in 'hull.ac.UK'?): 149.170.39.92#53
Sep 10 01:17:14 serveur named[29842]: lame server resolving 'www.ledvdclub.com' (in 'ledvdclub.COM'?): 194.150.236.5#53
Pour éviter ça, vous pouvez ajouter ceci dans /etc/bind/named.conf.local :
logging {
category lame-servers{ null; };
};