- EDNS
-
Extension mechanisms for DNS (EDNS) 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].
Sommaire
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.[réf. nécessaire]
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ée à 512 octets en UDP[2] et le recours à TCP mandaté par la norme pour des messages plus volumineux aboutit à une plus grande surcharge. En 1999, 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[réf. nécessaire].
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 est 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 paquets 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.
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[3]. 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 suite à l'ajoute des adresses IPv6 puis des signatures DNSSEC[4].
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 de délais anormaux dans la résolution des noms.
Notes et références
- RFC 2671, Extension Mechanisms for DNS (EDNS0), Paul Vixie, The Internet Society (août 1999)
- RFC 1035, Domain Names - Implementation and Specification, Paul Mockapetris (novembre 1987)
- RFC 4035, Protocol Modifications for the DNS Security Extensions, R. Arends, Telematica Instituut, 2005. Section 4.1 EDNS Support
- dig @a.root-servers.net . ns +edns=0 indique 671 octets en février 2011.
Wikimedia Foundation. 2010.