Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Un exemple du forçage des TTL DNS

Première rédaction de cet article le 7 mars 2013


Le DNS ne marche que parce que les données sont conservées dans les caches par les résolveurs. Autrement, si chaque requête remontait aux serveurs faisant autorité, ceux-ci souffriraient beaucoup. Combien de temps le résolveur peut-il garder l'information dans les caches ? C'est le serveur faisant autorité qui choisit, via le champ TTL de la réponse. Certains abusent en mettant des TTL très bas, poussant d'autres à ne pas les respecter.

Voici un exemple d'une requête DNS avec dig, montrant le TTL :

% dig @ns1.fdn.org MX fdn.fr
...
;; ANSWER SECTION:
fdn.fr.			86400	IN	MX	20 mx2.fdn.fr.
fdn.fr.			86400	IN	MX	10 mail.fdn.fr.
...

Le TTL est ici de 86 400 (secondes, soit une journée). C'est ce que sert ns1.fdn.org, qui est un des serveurs faisant autorité pour fdn.fr. Sur le résolveur, le TTL sera égal ou inférieur puisqu'il vaut la valeur originelle, au début, puis diminue avec le temps. Sur le résolveur de ma machine :

% dig MX fdn.fr
...
;; ANSWER SECTION:
fdn.fr.			4250	IN	MX	20 mx2.fdn.fr.
fdn.fr.			4250	IN	MX	10 mail.fdn.fr.

Ici, l'information est dans le cache depuis 22 heures (86 400 secondes - 4 250).

Jusqu'ici, tout va bien. Le problème est que certains gérants DNS mettent des valeurs ridiculement basses, en général parce qu'ils n'ont pas compris à quoi servaient les caches, et qu'ils fantasment sur une information distribuée en temps réel. On voit ainsi des TTL de moins d'une minute, par exemple pour dyn.com :

% dig @ns1.p01.dynect.net. A dyn.com
...
;; ANSWER SECTION:
dyn.com.		30	IN	A	134.0.76.51

C'est très bas. C'est très égoïste puisque cela va augmenter le trafic réseau.

On voit aussi des administrateurs de résolveurs DNS qui répondent en violant le protocole DNS. Ce dernier est normalisé dans le RFC 1034 (le TTL est décrit dans sa section 3.6). Un résolveur peut garder l'information en cache moins longtemps que le TTL (par exemple s'il redémarre, le résolveur typique perd tout). Il existe aussi des options des logiciels serveurs pour imposer un TTL maximal, pour économiser la mémoire (max-cache-ttl dans BIND, cache-max-ttl dans Unbound). Mais BIND n'a pas d'option pour mettre une valeur minimale, et pour cause, ce serait une violation du protocole : le TTL est fixé par le serveur faisant autorité, le résolveur n'a normalement pas le droit de le prolonger.

Certains, pourtant, ont modifié leur logiciel pour le faire. Voici le résolveur d'une Freebox :

% dig A dyn.com
...
;; ANSWER SECTION:
dyn.com.		823	IN	A	134.0.76.51

823 est supérieur à 30. Le TTL a donc été remonté à une valeur non décidée par le serveur faisant autorité et va donc rester dans le cache plus longtemps que souhaité par le gérant de dyn.com. (Le résolveur de la Freebox étant un dnsmasq, qui n'a pas non plus d'option pour cela, il s'agit sans doute d'une version localement modifiée. Notez qu'Unbound, lui, a une option pour forcer un TTL en ne respectant pas les valeurs indiquées, cache-min-ttl, merci à Laurent Frigault pour ce rappel.)

Il faut aussi savoir que les signatures DNSSEC protègent également le TTL (RFC 4034, section 3.1.4) et que ce forçage de TTL, comme toute modification non autorisée, peut potentiellement invalider les signatures (merci à Phil Regnauld pour avoir noté ce point).

À noter un article des gens de dyn.com expliquant leur choix. Merci à m0_o pour l'idée et les données.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)