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.
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.
Pour résoudre ce problème, il faut prendre contact avec l’administrateur du serveur du nom du site origine afin qu’il mette en place correctement les tables "reverse" pour votre zone.