aix: les options dans le fichier resolv.conf

Un problème d'AIX jusqu'à la version 6.1 est qu'il n'y a pas de cache pour la résolution de nom. C'est très ennuyeux quand le serveur DNS primaire du système n'est plus joignable car toutes les requètes de résolution de nom se prennent un délai d'une dizaine de secondes le temps de basculer sur le DNS secondaire. Il est heureusement possible d'améliorer cela.


les options possibles


Le timeout par défaut pour la résolution DNS est de 5 secondes pour la première tentative. On peut ramener cette valeur à une seconde en ajoutant la ligne suivante dans le fichier /etc/resolv.conf :

options timeout:1

Attention : la documentation d'AIX oublie de préciser qu'il faut utiliser ':' dans la ligne pour spécifier le timeout. Je reconnais que c'est assez facile à deviner ;-)

Il est aussi possible de diminuer le nombre de tentatives par serveur DNS de 2 (valeur par défaut) à 1 mais cela peut être un peu trop strict :

options attempts:1

La dernière option pouvant être intéressante dans ce cas et rotate qui permet de faire un équilibrage de charge entre les serveurs DNS au lieu d'interroger toujours le premier serveur de la liste.

options rotate

test des options


Il est possible de tester ces options sans toucher au fichier /etc/resolv.conf en utilisant la variable RES_OPTIONS , voici un exemple avec la commande nslookup et un serveur DNS primaire erroné dans /etc/resolv.conf:

RES_OPTIONS="timeout:2 rotate debug" nslookup mysrv
;; res_setoptions("timeout:2 rotate debug", "env")..
;; debug
;; calling process id = 2232510
;; res_nmkquery(QUERY, 10.1.168.192.in-addr.arpa, IN, PTR)
timeout (2 secs)
timeout (4 secs)
*** Can't find server name for address 192.168.1.10:No response from server
;; res_nmkquery(QUERY, 128.1.168.192.in-addr.arpa, IN, PTR)
------------
Got answer:
HEADER:
opcode = QUERY, id = 29529, rcode = NOERROR
header flags: response, authoritive answer, want recursion, recursion available
questions = 1, answers = 1, authority records = 2, additional = 1

QUESTIONS:
128.1.168.192.in-addr.arpa, type = PTR, class = IN
ANSWERS:
-> 128.1.168.192.in-addr.arpa
name = dnssrv.domain
ttl = 10800 (3H)
AUTHORITY RECORDS:
-> 1.168.192.in-addr.arpa
nameserver = dnssrv2.domain
ttl = 9999999 (16w3d17h46m39s)
-> 1.168.192.in-addr.arpa
nameserver = dnssrv1.domain
ttl = 9999999 (16w3d17h46m39s)
ADDITIONAL RECORDS:
-> dnssrv1.domain
internet address = 192.168.1.21
ttl = 10800 (3H)

------------
Server: dnssrv.domain
Address: 192.168.1.128

;; res_nmkquery(QUERY, mysrv.domain, IN, A)
------------
Got answer:
HEADER:
opcode = QUERY, id = 29530, rcode = NOERROR
header flags: response, authoritive answer, want recursion, recursion available
questions = 1, answers = 2, authority records = 1, additional = 0

QUESTIONS:
mysrv.domain, type = A, class = IN
ANSWERS:
-> mysrv.domain
canonical name = monserveur.domain
ttl = 9999999 (16w3d17h46m39s)
-> monserveur.domain
internet address = 192.168.1.7
ttl = 9999999 (16w3d17h46m39s)
AUTHORITY RECORDS:
-> .domain
nameserver = dnssrv2.domain
ttl = 9999999 (16w3d17h46m39s)

------------
Name: monserveur.domain
Address: 192.168.1.7
Aliases: mysrv.domain

Avec timeout positionné à , on voit bien que la première tentative prend 2 secondes et la deuxième 4:

timeout (2 secs)
timeout (4 secs)

La raison en est que le timeout est multiplié après la deuxième tentative.

aix 6.1 : le service de cache de résolution de nom netcd

A partir de AIX 6.1, il est possible d'utiliser un service de cache équivalent à nscd sous les autres OS (comme linux et solaris) ce qui permet d'éviter une interrogation DNS à chaque demande de réolution de nom. Ca marche aussi pour les autres services que le DNS.

Je n'ai pas eu l'occasion de l'utiliser suffisament pour m'en faire une idée mais il n'y a pas de raison pour que cela marche moins bien sur les autres OS.

Une commande qui peut être utile pour "flusher" le cache :

netcdctrl -f

fichier /etc/netsvc.conf


Une autre optimisation assez connu pour la résolution de nom est de mettre la ligne suivante dans le fichier /etc/netsvc.conf :

hosts = local, bind4

Cela permet d'indiquer à AIX de faire la résolution de nom des serveurs en passant d'abord par le fichier /etc/hosts puis par le dns en faisant des requètes IPv4 (si on met bind seulement il commencera par faire des requètes IPv6 puis IPv4)

Commentaires

1. Le mercredi, juin 9 2010, 17:12 par archi

options très intéressantes, et même pas disponibles dans le man.