Yop

Aller au contenu | Aller au menu | Aller à la recherche

mardi, 7 octobre 2008

Performances serveur DNS avec DNSPerf et ResPerf

Ces outils de chez nominum permettent de tester les performances d'un serveur de cache / Récursif ( ResPerf ) et d'un serveur Authoritative ( DNSPerf ).

Le README explique que Bind doit etre installé car des librairies...etc.. sont utilisées. Il ne reste ensuite qu'à compiler.

Les man sont bient faits et expliquent de manière assez détaillée la manière dont les 2 programmes fonctionnent.


  • ResPerf

resperf -s 10.0.0.2 -d queryfile

queryfile est de la forme

domain1.com A
domain2.fr MX

Le fichier utilsé par QueryPerf dans le billet précédent peut donc être utilisé

$ wc -l /tmp/ile
880000 /tmp/file
$
$ head -4 /tmp/file
fhs.com A
bluejean.com.tr A
geeo.org A
bluessiden.com MX
$


Sans les données en cache on obtient sur un Bind:

Statistics:

Queries sent: 74240
Queries completed: 9780
Queries lost: 64460
Ran for: 49.438710 seconds
Maximum throughput: 1392.000000 qps
Lost at that point: 33.14%

Avec les données déjà en cache on obtient sur un Bind:

Statistics:

Queries sent: 78073
Queries completed: 13794
Queries lost: 64279
Ran for: 49.679299 seconds
Maximum throughput: 2044.000000 qps
Lost at that point: 1.83%


  • DNSPerf

Tout pareil au niveau des commandes ou des sorties, mais avec un code optimisé pour faire les requètes sur un serveur qui a authorité sur les domaines demandés.

Performances serveur DNS avec queryperf

Queryperf est un outil pour tester les performances d'un serveur DNS.

Il est fourni dans les sources de Bind.. Il n'y a qu'à compiler.

/xxx/bind-9.5.0-P2/contrib/queryperf/


Il y a plusieurs options, une des principales est de lui fournir en entrée un fichier avec des noms de domaines à résoudre...

$ queryperf -v -d /tmp/fichier

Ce fichier est sous la forme:

$ cat /tmp/fichier
nom1.fr A
nom2.com MX


Par défaut il utilise 127.0.0.1 comme serveur à interroger mais ceci, comme le reste se change par les options.


Pour créer un fichier source avec quelques entrées, j'ai utilisé comme base une de mes règles de rejet dans les logs de Postfix.. à coups de :

| grep "from=<" | awk -F@ '{print $3}' | awk -F\> '{print $1}'

Puis on ajoute A ou MX à la fin de la ligne à coups de:

| awk '{print $0"\tA"}'
| awk '{print $0"\tMX"}'

On obtient au final:

$ wc -l /tmp/file
880000 /tmp/file
$ ll /tmp/files | awk '{print $5'}
13M
$ head /tmp/file
fhs.com A
bluejean.com.tr A
geeo.org A
bluessiden.com MX
americanhomestaffing.com A
$

Ce sont des domaines trouvés dans les MAIL FROM:<> d'un des règles de rejet. On doit donc avoir un peu de tout, des domaines qui existent, d'autres non, des DNS non joignables.. Bref quelquechose qui doit être a peu près représentatif d'un trafic réel. (On n'a pas de "vrais" noms de machine, c'est vrai).


On obtient donc pour du récursif sur un Bind:

Statistics:

Parse input file: once
Ended due to: reaching end of file

Queries sent: 880000 queries
Queries completed: 872400 queries
Queries lost: 7600 queries
Queries delayed(?): 0 queries

RTT max: 5.006302 sec
RTT min: 0.000009 sec
RTT average: 0.064140 sec
RTT std deviation: 0.156662 sec
RTT out of range: 3 queries

Percentage completed: 99.14%
Percentage lost: 0.86%

Started at: Tue xxx x 11:59:54 2008
Finished at: Tue xxx x 13:18:25 2008
Ran for: 4710.344667 seconds

Queries per second: 185.209377 qps


Un dump du cache pour vérifier:

$ rndc dumpdb
$ ll /var/chroot-named/etc/namedb/named_dump.db | awk '{print $5}'
6.9M
$

On peut ensuite gréper dans un domaine de la liste pour trouver les entrées correspondantes dans le cache.


Le test en cours:

Ce n'est probablement pas ce qui se fait de mieux pour des stats, mais ca peut aider lors de manipulations diverses sur des serveurs DNS.

mercredi, 3 septembre 2008

Incrémentation du serial d'une zone

  • Mise en situation:

Au lieu de mettre le serial de la forme YYYYMMDDxx, un moment d'égarement et hop.. je suis en 2008200501.

Impossible de base de revenir en 2008090300 car ce serial qui a pourtant la forme souhaitée est inférieur au précédent.
Le serial n'etant pas incrémenté il ne sera pas pris en compte par les slaves.

L'occasion de tester la méthode suivante...


  • Explication / Solution:

Les numéros peuvent aller jusqu'a 2^32 -1 soit 4 294 967 295.
Mais le chiffre après 4 294 967 295, c'est 0. (En fait il faut voir cela comme une roue).

Donc pour tout serial de départ, il y a la moitié des autres possibilités qui sont considérées comme "supérieures" et l'autre moitié "inférieures".
4 294 967 295 / 2 = 2147483647.5

Donc si j'ai mon serial à 2008200501:
De 2 008 200 502 à 4 155 684 148 -> cette nouvelle valeur sera "supérieure"
De 4 155 684 149 à 4 294 967 295 et de 0 à 2 008 200 500 -> cette nouvelle valeur sera "inférieure"

Donc avec mon 2 008 090 300 du jour, je serais inférieur..logique..(c'est bien le problème..) tout comme je le serais également avec la valeur 4 294 967 295..moins logique...

Oui, on a donc 4 155 684 148 qui est supérieur à 4 155 684 149 au sens des serials d'une zone !!

Bref en mettant mon nouveau serial à 4 155 684 148 (max) il sera pris par les slaves car supérieur... Puis en le remettant dans la foulée à 2 008 090 300 (date du jour), il sera a nouveau considéré comme supérieur et pris à nouveau en compte. Ouf.


  • Divers

Extrait de la RFC 1982:

The DNS SOA serial number

The serial number in the DNS SOA Resource Record is a Serial Number
as defined above, with SERIAL_BITS being 32. That is, the serial
number is a non negative integer with values taken from the range
[0 .. 4294967295]. That is, a 32 bit unsigned integer.

The maximum defined increment is 2147483647 (2^31 - 1).

Note: Si on supprime le fichier de zone des slaves, forcément ils vont le reprendre quelquesoit le numéro.. mais on a pas toujours la main sur les slaves.. ;)

dimanche, 29 juin 2008

DNSenum - Informations DNS

DNSenum permet de récupérer rapidement pas mal d'informations DNS sur un domaine donné.

En plus d'informations "basiques" comme les MX etc.. il permet également de faire des recherches sur Google ainsi que de la BruteForce...

Il s'uffit d'installer quelques libs comme libtest-www-mechanize-perl et libnet-netmask-perl...

Et comme un screenshot résume souvent mieux:

/!\ Trop de requètes sur Google peut provoquer un blacklistage temporaire.

mardi, 20 novembre 2007

fpdns - DNS server fingerprinting tool

Script perl permettant de fingerprinter un serveur DNS.

sudo apt-get install fpdns


$ fpdns -D isc.org
fingerprint (isc.org, 192.228.91.19): ISC BIND 9.2.3rc1 -- 9.4.0a0
fingerprint (isc.org, 192.228.90.19): ISC BIND 9.2.3rc1 -- 9.4.0a0
fingerprint (isc.org, 192.228.89.19): ISC BIND 9.2.3rc1 -- 9.4.0a0
fingerprint (isc.org, 204.152.184.64): ISC BIND 9.2.3rc1 -- 9.4.0a0
fingerprint (isc.org, 2001:4f8:0:2:0:0:0:13): No match found
$

- page 2 de 3 -