Los mecanismos de extensión para DNS (EDNS) son una especificación para ampliar el tamaño de varios parámetros del protocolo del sistema de nombres de dominio (DNS) que tienen limitaciones de tamaño y que la comunidad de diseño de Internet considera que son demasiado restrictivos para ampliar la funcionalidad del protocolo. El primer conjunto de extensiones fue publicado en 1999 por el Grupo de trabajo de ingeniería de Internet como RFC 2671, también conocido como EDNS0, que se actualizó en RFC 6891 en 2013 y cambió el acrónimo a EDNS.
El Sistema de nombres de dominio se desarrolló por primera vez a principios de la década de 1980. Desde entonces, se ha ido ampliando gradualmente con nuevas funciones manteniendo la compatibilidad con versiones anteriores del protocolo.
Las limitaciones en el tamaño de los pocos campos de marca, códigos de retorno y tipos de etiquetas disponibles en el protocolo DNS subyacente impidieron que se admitieran algunas características deseables. Además, los mensajes DNS UDP se limitaron a 512 bytes, sin incluir el protocolo IP y los encabezados de la capa de transporte [1] . El uso de una red de transporte virtual que utiliza el Protocolo de control de transmisión (TCP) aumentaría significativamente la sobrecarga. Esto se ha convertido en un gran obstáculo para agregar nuevas funciones al DNS. En 1999, Paul Vixey propuso extender el DNS para incluir nuevas banderas y códigos de respuesta, así como soporte para respuestas más largas en un marco que era compatible con implementaciones anteriores.
Debido a que no se pueden agregar nuevos indicadores al encabezado DNS, EDNS agrega información a los mensajes DNS en forma de registros de pseudorrecursos ("pseudo-RR") incluidos en la sección "Datos adicionales" del mensaje DNS. Tenga en cuenta que esta sección existe tanto en las solicitudes como en las respuestas.
EDNS representa un tipo de pseudo-RR: OPT.
Como pseudo-RR, los RR de tipo OPT nunca aparecen en ningún archivo de zona; solo existen en los mensajes producidos por los participantes del DNS.
El mecanismo es compatible con versiones anteriores porque los respondedores de DNS más antiguos ignoran cualquier RR de tipo OPT desconocido en una solicitud, y un respondedor de DNS más nuevo nunca incluye un OPT en una respuesta si no estaba presente en la solicitud. La presencia de un OPT en una solicitud significa que el solicitante más nuevo sabe qué hacer con el OPT en la respuesta.
El pseudo-registro OPT proporciona espacio para hasta 16 banderas y expande el espacio para el código de respuesta. El tamaño total del paquete UDP y el número de versión (actualmente 0) se encuentran en la entrada OPT. El campo de datos de longitud variable permite registrar información adicional en futuras versiones del protocolo. El protocolo DNS original preveía dos tipos de etiquetas, que están definidas por los dos primeros bits en los paquetes DNS (RFC 1035): 00 (etiqueta estándar) y 11 (etiqueta comprimida). EDNS introduce el tipo de etiqueta 01 como una etiqueta extendida. Los 6 bits inferiores del primer byte se pueden usar para definir hasta 63 nuevas etiquetas extendidas.
Un ejemplo de un pseudo-registro OPT mostrado por la utilidad Domain Information Groper (dig):
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; UDP: 4096
El resultado "EDNS: versión: 0" indica el pleno cumplimiento de EDNS0 [2] . El resultado de "flags: do" indica que "DNSSEC OK" está configurado.
EDNS es esencial para implementar las extensiones de seguridad DNS (DNSSEC). EDNS también se usa para enviar información genérica desde los resolutores a los servidores de nombres sobre la ubicación geográfica de los clientes como una opción de subred de cliente (ECS) de EDNS.
Hay sugerencias para usar EDNS para especificar cuánto relleno debe haber alrededor de un mensaje DNS y para especificar cuánto tiempo debe mantenerse activa una conexión TCP.
En la práctica, los cortafuegos transversales de EDNS pueden ser difíciles de usar porque algunos cortafuegos aceptan una longitud máxima de mensaje DNS de 512 bytes y bloquean paquetes DNS más largos.
La introducción de EDNS hizo posible el ataque de amplificación de DNS, un tipo de ataque de denegación de servicio reflejado, porque EDNS proporciona paquetes de respuesta muy grandes en comparación con paquetes de consulta relativamente pequeños.
El grupo de trabajo IETF DNS Extensions (dnsext) completó el trabajo sobre el refinamiento de EDNS0, que se publicó como RFC 6891.