EDNS
EDNS (Extension mechanisms for DNS ; en français, mécanismes d'extension pour le DNS) est une extension du protocole Domain Name System qui permet d'augmenter la taille de certains paramÚtres. La premiÚre série d'extensions a été publiée en 1999 par l'Internet Engineering Task Force (IETF) dans la RFC 2671 sous le nom EDNS0[1], puis mis à jour en RFC 6891[2].
Motivation
Le systÚme DNS a été développé dans les années 1980 et a été amélioré depuis lors, tout en conservant la compatibilité avec les versions antérieures du protocole.
Les limitations de taille de certains champs, code de retour et types de label du protocole original ont commencé à poser des problÚmes pour le développement de nouvelles fonctionnalités. Les messages DNS étaient limités à 512 octets en UDP[3] et le recours à TCP mandaté par la norme pour des messages plus volumineux aboutit à une plus grande surcharge. En 1998, Paul Vixie propose d'étendre le DNS avec de nouveaux codes et de permettre des tailles de paquets plus élevées en UDP, tout en restant compatible avec les implémentations existantes[4].
Fonctionnement
Puisqu'aucun nouveau code ne peut ĂȘtre ajoutĂ© dans l'en-tĂȘte DNS, l'identification d'une requĂȘte Ă©tendue est rĂ©alisĂ©e grĂące Ă un pseudo resource-record (RR), OPT. Ce RR n'est utilisĂ© que dans la transmission et est absent des zones. Les clients EDNS incluent ce RR pour indiquer qu'ils prennent en charge cette extension. Si le serveur ne prend pas en charge cette extension, ce RR sera ignorĂ©, ce qui procure la rĂ©trocompatibilitĂ©.
Le pseudo-record OPT fournit 16 codes additionnels et étend l'espace disponible pour la réponse. La taille maximale du paquet UDP et la version EDNS (toujours 0 actuellement) sont contenues dans le RR OPT. Un champ de données de taille variable permet des extensions ultérieures.
Le protocole original prévoyait deux types de labels en fonction des deux premiers bits du paquet DNS : 00 (label standard) et 11 (label comprimé). EDNS définit le label 01 (label étendu). Les six bits suivants sont utilisables pour définir d'autres labels étendus.
En cas de non-rĂ©ponse Ă une requĂȘte utilisant EDNS, une nouvelle tentative de rĂ©solution est faite sans EDNS par le client (c'est-Ă -dire en mode dĂ©gradĂ©, en mode « fallback »). Si la taille de la rĂ©ponse dĂ©passe les 512 octets, une rĂ©ponse tronquĂ©e est envoyĂ©e par le serveur avec un drapeau « TC » (Truncated) dans l'en-tĂȘte DNS, annonçant que cette rĂ©ponse est incomplĂšte. Le client aura alors recours Ă une nouvelle rĂ©solution en utilisant TCP.
Exemple
Voici un exemple de pseudo-record OPT, tel qu'il est affiché par la commande dig :
;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096
Applications
La prise en charge d'EDNS est essentielle pour les extensions de sécurité DNSSEC[5]. Elle est également souhaitable pour IPv6, la taille des réponses pouvant excéder 512 octets quand des RR AAAA sont présents.
La taille de la liste des serveurs racine du DNS dépasse les 512 octets à la suite de l'ajout des adresses IPv6 puis des signatures DNSSEC[6].
ProblĂšmes
Certains pare-feux anciens ou mal configurĂ©s bloquent les paquets UDP DNS qui dĂ©passent 512 octets. En l'absence de rĂ©ponse Ă une requĂȘte EDNS, le serveur la rĂ©Ă©dite sans l'extension, ceci cause des dĂ©lais anormaux dans la rĂ©solution des noms.
Par ailleurs, pour les rĂ©ponses les plus grosses (notamment utilisant DNSSEC)[7], des lenteurs similaires liĂ©es Ă de nouvelles tentatives de rĂ©solution peuvent ĂȘtre observĂ©es[8] dans les contextes suivants[9]:
- la taille des paquets peut dĂ©passer la MTU habituelle sur Internet (1 500 octets) et entrainer la crĂ©ation de fragments IP, lesquels peuvent ĂȘtre bloquĂ©s par certains pare-feux ou routeurs mal configurĂ©s
- la taille des paquets peut dĂ©passer la MTU certains liens sur des rĂ©seaux d'accĂšs (par exemple 1492 pour un client en PPPoE), ce qui est censĂ© ĂȘtre gĂ©rĂ© par l'usage du Path MTU Discovery (PMTUd), mais qui en pratique peut entrainer des paquets perdus
Notes et références
- (en) Paul Vixie, « Extension Mechanisms for DNS (EDNS0) », Request for comments no 2671, .
- (en) Request for comments no 6891.
- (en) Paul V. Mockapetris, « Domain names - implementation and specification », sur tools.ietf.org (consulté le )
- (en) Paul Vixie, « Extensions to DNS (EDNS) », sur tools.ietf.org (consulté le )
- (en) Larson, Matt et Massey, Dan, « Protocol Modifications for the DNS Security Extensions », sur tools.ietf.org (consulté le )
-
dig @a.root-servers.net . ns +edns=0
indique 671 octets en fĂ©vrier 2011. (L'interrogation des serveurs racine sans edns0 retournant une rĂ©ponse volontairement infĂ©rieure Ă 512 o) - (en-US) « Dealing with IPv6 fragmentation in the DNS | APNIC Blog », APNIC Blog,â (lire en ligne, consultĂ© le )
- « Refinements to EDNS fallback behavior can cause different outcomes in Recursive Servers | Internet Systems Consortium Knowledge Base », sur deepthought.isc.org (consulté le )
- (en) Geoff Huston, Joao Damas, « DNS over IPv6 - A Study in Fragmentation » [PDF], sur APNIC, (consulté le )