Social Icons

vendredi 23 décembre 2011

Installer et configurer un serveur DNS sous linux


Présentation :
Un DNS (Domain Name System) sert à faire la correspondance entre l'adresse IP et le nom de la machine, on parle de résolution de noms (to resolve en anglais). Plus concrètement sans DNS vous seriez obligé de taper directement les adresses IP des machines sur lequel vous voulez accéder (sur le web, ftp, telnet et autres). Si vous êtes connecté à un fournisseur d'accès internet (FAI) de façon intermittente par PPP, ADSL ou autres, c'est généralement les serveurs DNS de votre FAI qui assurent la résolution des noms, ils vont généralement par pair, on trouve un serveur DNS primaire et un secondaire qui est là en cas de défaillance du premier.

Maintenant pourquoi configurer un serveur DNS sur un poste isolé, voire même sur un petit réseau de machines, parce qu'il peut servir à résoudre un certain nombre de problèmes fort génants qu'on rencontre essentiellement en mode off-line (non connecté au FAI) dont:
- lancement interminable de netscape voire blocage au boot (d'une durée de 3min),
- envoi des mails dans le répertoire d'attente de sendmail qui dure plus d'une minute.

Mais aussi si vous avez activé l'ipmasquerade pour partager votre connexion internet pour  vos postes clients, un serveur DNS permet à ceux-ci de pouvoir surfer et d'utiliser les outils réseau (telnet, ftp, ...). On suppose que votre machine linux, se nomme mamachine et a pour adresse IP 192.168.13.10 (sur votre domaine privé et non attribuée par le FAI) et votre domaine privé mondomaine.fr.  Les arborescences présentées (notamment au niveau du démarrage automatique) sont celles d'une Mandrake  (donc a priori aussi d'une RedHat).
Je ne rentrerai pas dans les détails des fichiers de configuration pour cela vous avez le DNS-Howto  (section linux puis HOW-TO) qui constitue une bonne introduction. Cette page n'a pas pour objet de se substituer à ce dernier document, elle réalise une synthèse pour installer un serveur de DNS rapidement, pour des explications détaillées voir le HOWTO. Elle est surtout destinée à un poste isolé voire à un petit réseau connecté de manière non permanente à internet.

Note: Si vous ne connaissez pas les adresses IP des serveurs DNS de votre FAI, en cas d'attribution automatique de ces adresses par exemple, il suffit de vous connecter puis de lire les adresses au niveau des lignes nameserver.


Installation et configuration du serveur

La mise en place d'un serveur DNS nécessite l'installation de deux outils bind et named.  Sur une Mandrake cela concerne les packages bind, caching-nameserver et bind-utils.
Pour un client linux on se contentera du dernier package pour bénéficier des commandes host ou dig. L'installation a créé un fichier /etc/named.conf dont voici le contenu: // generated by named-bootconf.pl

// secret must be the same as in /etc/rndc.conf
key "key" {
        algorithm       hmac-md5;
        secret
"c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};
controls {
    inet 127.0.0.1 allow { any; } keys { "key"; };
};

options {
        pid-file "/var/run/named/named.pid";
        directory "/var/named";
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
        // query-source address * port 53;
};
//
// a caching only nameserver config
//
zone "." {
        type hint;
        file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
        type master;
        file "named.local";
};
On va le modifier pour lire:
// secret must be the same as in /etc/rndc.conf
key "key" {
        algorithm       hmac-md5;
        secret
"c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K";
};
controls {
    inet 127.0.0.1 allow { any; } keys { "key"; };
};
options {
        pid-file "/var/run/named/named.pid";
        directory "/var/named";
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
        // query-source address * port 53;
        // on va mettre ici l'adresses IP des serveurs DNS de vos FAI, votre serveur relaiera les requêtes à ceux-ci
        // s'il n'est pas capable de les résoudre
        forward first;
        forwarders {
                194.149.160.9;
                194.149.160.1;
        };
};
//
// a caching only nameserver config
//
zone "." {
        type hint;
        file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
        type master;
        file "named.local";
};
zone "mondomaine.fr" {
        type master;
        file "mondomaine.fr";
};
L'installation a créé un répertoire /var/named contenant named.local
@       IN      SOA     localhost. root.localhost.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS      localhost.
1       IN      PTR     localhost.
On le modifiera pour lire:
@       IN      SOA     mamachine.mondomaine.fr. root.mamachine.mondomaine.fr.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
              IN      NS      mamachine.mondomaine.fr.
1       IN      PTR     localhost.
On créera sous /var/named un fichier mondomaine.fr contenant:
@       IN      SOA     mamachine.mondomaine.fr. root.mondomaine.fr.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
                                TXT             "mondomaine.fr mon ch'tit domaine"
                NS      mamachine
                                NS              mamachine.mondomaine.fr.
                                MX              10 mamachine
                                MX              20 mamachine.mondomaine.fr.

localhost               A               127.0.0.1
mamachine            A               192.168.13.10
Donner ce fichier à named du groupe named
chown named:named mondomaine.fr
Pour info MX correspond au serveur SMTP donc à votre machine si vous y faites tourner sendmail.
Maintenant dans le fichier /etc/nsswitch.conf on doit avoir à la ligne hosts:
hosts: files dns
Le DNS-HOWTO demande la création d'un fichier /etc/host.conf contenant
order hosts,bind
multi on

Je ne sais pas si c'est absolument nécessaire, ça me paraît redondant par rapport à nsswitch.conf, mais au cas où.
Pour terminer le /etc/resolv.conf:
search mondomaine.fr
nameserver 127.0.0.1
nameserver 194.149.160.9
nameserver 194.149.160.1
Les deux dernières adresses IP sont évidemment celles de votre FAI favori. A noter que dans le cas d'une connexion intermittente par ppp avec attribution automatique des adresses IP des serveurs DNS, vous pouvez ne pas modifier les deux dernières lignes, elles seront automatiquement renseignées lors de la connexion.

Lancement automatique de named

Pour une installation du serveur sur une Mandrake, la configuration du lancement du serveur DNS est automatique à l'installation, vous pouvez ignorer ce chapitre. Par défaut l'install de bind et named génère automatiquement les fichiers de démarrage, à tout hasard en voici le détail. Vous trouverez sous /etc/rc.d/init.d un fichier named qui a le contenu suivant:
#!/bin/sh
#
# named           This shell script takes care of starting and stopping
#                 named (BIND DNS server).
#
# chkconfig: 345 55 45
# description: named (BIND) is a Domain Name Server (DNS) \
# that is used to resolve host names to IP addresses.
# probe: true
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -f /usr/sbin/named ] || exit 0
[ -f /etc/named.conf ] || exit 0
# See how we were called.
case "$1" in
  start)
        # Start daemons.
        echo -n "Starting named: "
        daemon named
        echo
        touch /var/lock/subsys/named
        ;;
  stop)
        # Stop daemons.
        echo -n "Shutting down named: "
        killproc named
        rm -f /var/lock/subsys/named
        echo
        ;;
  status)
        /usr/sbin/ndc status
        exit $?
        ;;
  restart)
        /usr/sbin/ndc restart
        exit $?
        ;;
 reload)
        /usr/sbin/ndc reload
        exit $?
        ;;
  probe)
        # named knows how to reload intelligently; we don't want linuxconf
        # to offer to restart every time
        /usr/sbin/ndc reload >/dev/null 2>&1 || echo start
        exit 0
        ;;
  *)
        echo "Usage: named {start|stop|status|restart}"
        exit 1
esac
exit 0
Le serveur DNS est lancé automatiquement à l'état de marche 3, 4 et 5. Il faudra néanmoins le lancer juste après son installation en tapant

/etc/rc.d/init.d/named start

Pour relancer named (après une modification de fichier), vous devez taper:
/etc/rc.d/init.d/named restart
Les autres arguments étant start, stop, status et restart.

Configuration d'un client

Pour un client linux, il suffit de créer un fichier /etc/resolv.conf contenant

domain mondomaine.fr
nameserver 192.168.13.10


Vous remplacerez cette dernière adresse par celle de votre serveur.

Faites de même pour les clients windows, au niveau du panneau de configuration puis icone réseau.



Tests de fonctionnement

A partir d'une machine cliente sous linux ou sur le serveur tapez la commande host dans un shell, les commandes à taper apparaîssent en italique: host -a mamachine
Trying "mamachine.mondomaine.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33741
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;mamachine.mondomaine.fr.             IN      ANY
;; ANSWER SECTION:
mamachine.mondomaine.fr.      86400   IN      A       192.168.25.75
;; AUTHORITY SECTION:
mondomaine.fr.              86400   IN      NS      mamachine.mondomaine.fr.
Received 65 bytes from 127.0.0.1#53 in 15 ms
Tapez ensuite:
host -a mondomaine.fr
Trying "mondomaine.fr"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47095
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;mondomaine.fr.                     IN      ANY
;; ANSWER SECTION:
mondomaine.fr.              86400   IN      SOA     mamachine.mondomaine.fr. root.mondomaine.fr. 1997022700 28800 14400 3600000 86400
mondomaine.fr.              86400   IN      TXT     "mondomaine.fr mon ch'tit domaine"
mondomaine.fr.              86400   IN      NS      mamachine.mondomaine.fr.
mondomaine.fr.              86400   IN      MX      10 mamachine.mondomaine.fr.
mondomaine.fr.              86400   IN      MX      20 mamachine.mondomaine.fr.
;; ADDITIONAL SECTION:
mamachine.mondomaine.fr.      86400   IN      A       192.168.25.75
Received 179 bytes from 127.0.0.1#53 in 21 ms
Une fois connecté, d'une machine cliente ou du serveur tapez
host -a www.shom.fr
Trying "www.shom.fr."
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12287
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
;; QUESTION SECTION:
;www.shom.fr.                   IN      ANY
;; ANSWER SECTION:
www.shom.fr.            217813  IN      CNAME   cyclone.shom.fr.
;; AUTHORITY SECTION:
shom.fr.                330241  IN      NS      neree.shom.fr.
shom.fr.                330241  IN      NS      resone.univ-rennes1.fr.
shom.fr.                330241  IN      NS      dns.univ-lyon1.fr.
;; ADDITIONAL SECTION:
dns.univ-lyon1.fr.      317766  IN      A       134.214.100.6
neree.shom.fr.          330241  IN      A       194.57.228.65
resone.univ-rennes1.fr. 300271  IN      A       129.20.254.1
Received 182 bytes from 192.168.25.75#53 in 157 ms

Le ping devrait marcher aussi.

A partir d'un poste windows pour tester votre serveur dans une fenêtre d'invite de commande tapez
nslookup
Au prompt, taper le nom de machine à tester
>www.shom.fr
Serveur: Unknown
Address: 192.168.26.75
Réponse de source secondaire :
Nom: cyclone.shom.fr
Address: 194.57.228.1
Aliases: www.shom.fr
Tapez CTRL+C pour sortir du prompt

Créer des hôtes virtuels

Vous avez la possibilité de créer des hôtes virtuels avec votre serveur DNS, en d'autres termes votre serveur peut être identiifé par plusieurs noms, c'est particulièrement intéressant pour apache. Avec un nom différent qui pointe pourtant vers la même machine, on peut ainsi pointer à des endroits différents.
Admettons qu'on veuille créer les hôtes virtuels www.idefix.mondomaine.fr et www.asterix.mondomaine.fr, on rajoutera à la fin du fichier /var/named/mondomaine.fr, les lignes suivantes: www.asterix    A    192.168.13.11
www.idefix      A    192.168.13.11
Relancez le serveur en tapant:
/etc/rc.d/init.d/named restart
Pour tester d'un client tapez dans un shell :
ping www.asterix.mondomaine.fr
Ca devrait marcher.
 


Abonnez-vous par e-mail

Pour recevoire les nouvelles article