Accueil - Informatique - Administration - Réseaux

DNS

Publié le vendredi 9 avril 2004.


Un serveur DNS permet la correspondance entre les noms de machines et les adresses IP un peu comme le fait l’annuaire téléphonique pour obtenir le numéro de téléphone à partir du nom du correspondant.

Serveur DNS

Un serveur DNS permet la correspondance entre les noms de machines et les adresses IP.

Ce service de résolution de nom est assuré par le programme named qui fait partie du paquetage « bind ».

Nous utilisons la version 8.2.3. Pour l’utilisation de versions plus récentes et fortement conseillé, voir avis de sécurité du CERT, et se consulter les documentations disponibles sur le site d’ISC.

Les fichiers nécessaire à l’utilisation et la configuration des DNS sont :

/usr/sbin/named
/etc/named.conf
/etc/nsswitch.conf

et les fichiers du répertoire

/var/named

Un script perl /usr/local/sbin/h2n est utilisé pour générer les fichiers de configuration à partir du fichier /etc/hosts.

On peut l’utiliser avec un fichier d’options :

/usr/local/sbin/h2n -f <file>

Le fichier de configuration peut contenir les infos suivantes (page 140 DNS & Bind, O’Reilly) :

-d ird.ci
-n 216.226.208
-n 192.168.10
-H /etc/hosts
-b /etc/named.conf
-m 10:gw-abidjan.ird.ci
-v 8
-y
-h gw-abidjan.ird.ci
-s gw-abidjan.ird.ci ns.ird.fr

Tableau récapitulatif des options :

Options Description
-d le domaine
-n les IP à prendre en compte (création des reverses), autant que de classes
-H le fichier host en entrée
-b le fichier named.conf à générer (format bind 4, dans la version que je connais donc /dev/null pour nous, sous peine d’avoir de sérieux problèmes...)
-m les MX records (avec le poids de chacun des serveurs), autant que de serveurs
-y utilise la date pour créer le numéro de série (format YYYYMMDDXX)
-h le host dans le champ SOA
-s la liste des serveurs de référence pour le domaine

Avant de faire une quelconque modification il est conseillé de faire une copie des fichiers de configuration.

Le démon named doit toujours être lancé à partir du script de démarrage (sous Solaris) :

/etc/init.d/named start

Afin qu’il soit lancé sous l’identité named, il faudra vérifier la présence de l’option -u named) dans le code du script de démmarage.

Sous Linux, on utilisera le programme service si le service à été enregistré au préalable via le programme chkconfig.

/sbin/service named start

Avec les dernières versions, il faut également rajouter la ligne $TTL 172800 en début de fichier pour éviter les warnings au démarrage du service.

Important :
DNS et BIND ==> mettre à jour la dernière version de BIND.

La version 9.1.1 est installé sur le serveur Solaris abidjan.

Une sauvegarde des binaires et scripts de démarrage a été effectuée auparavant.

Pour installer cette version 9.x quelques modifications sont nécessaires.

Il faut créer un répertoire /var/run, rajouter la lignes auth-nxdomain yes dans la directive option du fichier named.conf.

Le service étant lancé sous l’identité named, il faut mettre les droits en lecture du répertoire /var/named pour le groupe named.

Vérifier ensuite qu’il fonctionne bien sous l’identité named et non pas root (faire un ps -edf|grep named).

/etc/nsswitch.conf :

C’est le fichier qui spécifie où trouver les informations. La ligne hosts doit ressembler à ceci :

Hosts : files  dns

Cette ligne indique que les programmes doivent d’abord regarder dans /etc/hosts puis demander au DNS en suivant les informations de /etc/resolv.conf :

domain          private-ird.ci
search          private-ird.ci ird.ci
nameserver      192.168.10.1
nameserver      192.168.10.3

Ce fichier du serveur abidjan, spécifie que le nom de domaine par défaut à ajouter au noms non qualifiés (sans domaine) est private.ird.ci et que si l’hôte n’est pas trouvé dans ce domaine, on peut essayer aussi dans le domaine ird.ci directement.

Les entrées “serveur de nom” (nameserver) sont utilisés par le résolveur de nom.

Pour chaque domaine géré, il faudra maintenir une table inverse afin que le résolveur puisse à partir du numéro IP obtenir le nom de domaine, notamment pour resolv.conf (voir les fichiers de configuration des deux serveurs en annexe).

Deux outils sont à notre disposition pour vérifier le bon fonctionnement du serveur de noms, nslookup et dig.

$ nslookup
Default Server:  gw-abidjan.ird.ci
Address:  208.160.145.190

> ls ird.ci
[gw-abidjan.ird.ci]
$ORIGIN ird.ci.
gw-abidjan              2D IN A         208.160.145.190
localhost               2D IN A         127.0.0.1
cs                      2D IN A         208.160.145.189
> ls private-ird.ci
[gw-abidjan.ird.ci]
$ORIGIN private-ird.ci.
laserjet                2D IN A         192.168.10.30
gw-abidjan              2D IN A         192.168.10.3
localhost               2D IN A         127.0.0.1
abidjan                 2D IN A         192.168.10.1
pc-media                2D IN A         192.168.10.14
> ^D

on peut utiliser les commandes :

> set all
Default Server:  gw-abidjan.ird.ci
Address:  208.160.145.190

Set options:
 nodebug         defname         search          recurse
 nod2            novc            noignoretc      port=53
 querytype=MX    class=IN        timeout=5       retry=2
 root=a.root-servers.net.
 domain=ird.ci
 srchlist=ird.ci/private-ird.ci

> mail.ird.ci
Server:   gw-abidjan.ird.ci
Address:  208.160.145.190

Name:     gw-abidjan.ird.ci
Address:  208.160.145.190
Aliases:  mail.ird.ci

> 192.168.10.1
Server:   gw-abidjan.ird.ci
Address:  208.160.145.190

Name:     abidjan.private-ird.ci
Address:  192.168.10.1

> set q=mx
> gw-abidjan
Server:   gw-abidjan.ird.ci
Address:  208.160.145.190

gw-abidjan.ird.ci       preference = 10, mail exchanger = gw-abidjan.ird.ci
ird.ci  nameserver = gw-abidjan.ird.ci
ird.ci  nameserver = ns.ird.fr
gw-abidjan.ird.ci       internet address = 208.160.145.190
ns.ird.fr       internet address = 195.83.14.1

> set q=any
> gw-abidjan
Server:   gw-abidjan.ird.ci
Address:  208.160.145.190

gw-abidjan.ird.ci       preference = 10, mail exchanger = gw-abidjan.ird.ci
gw-abidjan.ird.ci       internet address = 208.160.145.190
ird.ci  nameserver = gw-abidjan.ird.ci
ird.ci  nameserver = ns.ird.fr
gw-abidjan.ird.ci       internet address = 208.160.145.190
ns.ird.fr       internet address = 195.83.14.1
> ^D

La syntaxe du programme dig est la suivante :

dig @serveur domain query-type query-class

Exemples :

$ dig ns.ird.fr ird.ci any
; <<>> DiG 8.2 <<>> ns.ird.fr ird.ci any
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 2, ADDITIONAL: 2
;; QUERY SECTION:
;;      ird.ci, type = ANY, class = IN

;; ANSWER SECTION:
ird.ci.        2D IN MX        10 gw-abidjan.ird.ci.
ird.ci.        2D IN NS        gw-abidjan.ird.ci.
ird.ci.        2D IN NS        ns.ird.fr.
ird.ci.        2D IN SOA       gw-abidjan.ird.ci. root.gw-abidjan.ird.ci. (
                                       2000041902      ; serial
                                       6H              ; refresh
                                       2H              ; retry
                                       5w6d16h         ; expiry
                                       2D )            ; minimum

;; AUTHORITY SECTION:
ird.ci.                 2D IN NS        gw-abidjan.ird.ci.
ird.ci.                 2D IN NS        ns.ird.fr.

;; ADDITIONAL SECTION:
gw-abidjan.ird.ci.      2D IN A         208.160.145.190
ns.ird.fr.              1d20h52m5s IN A  195.83.14.1

;; Total query time: 0 msec
;; FROM: gw-abidjan to SERVER: default -- 208.160.145.190
;; WHEN: Thu Apr 20 16:48:39 2000
;; MSG SIZE  sent: 24  rcvd: 189

# dig gw-abidjan.ird.ci any
# dig -x 208.160.145.190 any
# dig -x 208.160.145 any
# dig @dns1.leland-ci.org -x 208.160.145.190 any
# dig @dns1.afnet.net -x 216.226.208.58 any
# dig @gw-abidjan.private-ird.ci any
# dig @gw-abidjan.private-ird.ci ird.ci any

Pour déterminer la version d’un serveur DNS :

# dig version.bind chaos txt

Pour un serveur distant, obtenir l’adresse du serveur DNS avec la commande :

# dig any @afnet.net afnet.net

AUTHORITY SECTION:
afnet.net.              1d18h54m IN NS  CI2.afnet.net.
afnet.net.              1d18h54m IN NS  ci1.afnet.net.

;; ADDITIONAL SECTION:
CI2.afnet.net.          1d23h32m48s IN A  208.160.145.131
ci1.afnet.net.          1d23h32m48s IN A  208.160.145.130
Puis obtenir les informations de version comme suit :
# dig @208.160.145.131 version.bind chaos txt

; <<>> DiG 8.3 <<>> @208.160.145.131 version.bind chaos txt
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUERY SECTION:
;;      version.bind, type = TXT, class = CHAOS

;; ANSWER SECTION:
VERSION.BIND.           0S CHAOS TXT    "8.2.2-P3"

Les rejets de mails liés à une mauvaise configuration des DNS :

Extraits tirés de XXXXX :

Comment résoudre le problème :

Dans tous les cas, c’est à l’administrateur du serveur du nom du site origine de résoudre le problème. Il est toutefois possible d’en vérifier soi-même l’origine (avec une machine Unix) :

Cas typique : il y a trois causes très fréquentes. Il s’agit de :

- la machine n’est pas enregistrée dans le DNS, ou
- la machine n’est pas enregistrée dans la zone inverse du DNS, ou
- il y a un problème de << délégation >> de zone DNS.
Essayer de faire (en prenant soin d’inverser l’adresse IP comme dans l’exemple) :

   $ nslookup -q=ptr 3.2.1.10.in-addr.arpa.

Si la réponse ne donne pas le nom de la machine relais du site origine (celui qui est cité dans le message d’erreur « Unknown relay name »), la machine n’est pas correctement enregistrée dans la zone inverse du DNS ;

Si le précédent test donne le nom correct, essayer d’interroger quelques serveurs de noms extérieurs au site.

Par exemple :

    $ nslookup -q=ptr 3.2.1.10.in-addr.arpa. shiva.jussieu.fr

Si la réponse ne donne pas le nom de la machine, c’est qu’il y a un problème de délégation de la zone inverse du DNS.