En las búsquedas de DNS, que relacionan los nombres de dominio con las direcciones IP legibles por máquinas, el recorrido por el árbol DNS lo puede realizar un servidor DNS o un cliente.
Después de leer este artículo podrás:
Contenido relacionado
Suscríbase a theNET, el resumen mensual de Cloudflare sobre las ideas más populares de Internet.
Copiar enlace del artículo
Una búsqueda de DNS recursivo es cuando un servidor DNS se comunica con otros servidores DNS para buscar una dirección IP y devolverla al cliente. Esto se diferencia de una consulta de DNS iterativa, en la que el cliente se comunica directamente con cada servidor DNS implicado en la búsqueda. Aunque se trata de una definición muy técnica, una mirada más cercana al sistema DNS y a la diferencia entre recursión e iteración debería ayudar a aclarar las cosas.
Cuando un usuario escribe un nombre de dominio (como "cloudflare.com") en la ventana de su navegador, se activa una búsqueda de DNS. Una serie de ordenadores en remoto conocidos como servidores DNS encuentran entonces la dirección IP de ese dominio y la devuelven al ordenador del usuario, para que pueda acceder al sitio web correcto.
Diferentes tipos de servidores DNS deben trabajar en conjunto para completar una búsqueda de DNS. Un solucionador de DNS, un servidor raíz de DNS, un servidor TLD de DNS y un servidor de nombres autoritativo de DNS deben proporcionar información para completar la búsqueda. En el caso del almacenamiento en caché, uno de estos servidores puede haber guardado la respuesta a una consulta durante una búsqueda anterior, y puede entregarla entonces desde la memoria.
Para saber más sobre el funcionamiento de una búsqueda de DNS, consulta ¿Qué es un servidor DNS?
La recursión y la iteración son términos informáticos que describen dos métodos diferentes para resolver un problema. En la recursión, un programa se llama a sí mismo repetidamente hasta que se cumple una condición, mientras que en la iteración se repite un conjunto de instrucciones hasta que se cumple una condición. Esta sutil diferencia es difícil de ilustrar sin ver el código, pero la clave es que la recursión es una solución que se llama a sí misma de forma repetida.
Por ejemplo, imaginemos que Jim ha perdido sus llaves en casa y está buscando una forma sistemática de encontrarlas. Una solución recursiva sería que Jim siguiera buscando sus llaves hasta que las encontrara. Jim empezará a buscar, y si no encuentra sus llaves, volverá a su instrucción original de seguir buscando hasta encontrarlas. Una solución iterativa consistiría en que Jim buscara en una habitación durante cinco minutos, luego volviera a sus instrucciones y buscara en la siguiente habitación durante cinco minutos, y siguiera con este ciclo hasta que encontrara sus llaves o hasta que hubiera pasado por toda la lista de habitaciones para realizar su búsqueda.
No es necesario un conocimiento profundo de la recursión y la iteración para entender la diferencia entre las búsquedas de DNS recursivas e iterativas: en una búsqueda recursiva, un servidor DNS hace la recursión y sigue consultando a otros servidores DNS hasta que tiene una dirección IP que devolver al cliente (a menudo el sistema operativo de un usuario). En una consulta de DNS iterativa, cada consulta de DNS responde directamente al cliente con una dirección para que otro servidor DNS pregunte, y el cliente sigue consultando a los servidores DNS hasta que uno de ellos responda con la dirección IP correcta para el dominio dado.
Dicho de otro modo, el cliente lleva a cabo una forma de delegación en una consulta de DNS recursiva. Le dice al solucionador de DNS: "Oye, necesito la dirección IP de este dominio, por favor, búscala y no vuelvas a llamarme hasta que la tengas". Entretanto, en una consulta iterativa, el cliente le dice al solucionador de DNS: "Oye, necesito la dirección IP de este dominio. Por favor, dime la dirección del siguiente servidor DNS en el proceso de búsqueda para que pueda buscarla yo mismo".
Las consultas de DNS recursivas suelen resolverse más rápido que las consultas iterativas. Esto se debe al almacenamiento en caché. Un servidor DNS recursivo almacena en caché la respuesta final a cada consulta que realiza y guarda esa respuesta final durante un tiempo determinado (esto es lo que se conoce como Tiempo de vida).
Cuando un solucionador recursivo recibe una consulta para una dirección IP que ya tiene en su caché, puede proporcionar rápidamente la respuesta en caché al cliente sin comunicarse con ningún otro servidor DNS. Servir rápidamente respuestas desde la caché es muy probable si a) el servidor DNS sirve a muchos clientes o b) el sitio web solicitado es muy popular.
Desafortunadamente, permitir consultas de DNS recursivas en servidores DNS abiertos crea una vulnerabilidad de seguridad, ya que esta configuración puede permitir que los atacantes lleven a cabo ataques de amplificación de DNS y envenenamiento de caché de DNS.
En un ataque de amplificación de DNS, un atacante suele utilizar un grupo de máquinas (lo que se conoce como botnet) para enviar un gran volumen de consultas DNS mediante el uso de una dirección IP falsificada. Una dirección IP falsificada es como una dirección de retorno falsa; el atacante envía solicitudes desde su propia IP, pero pide que las respuestas vayan a la víctima. Para agravar el ataque, el atacante también utiliza una técnica llamada amplificación, en la que la solicitud falsificada pide una respuesta muy larga. El servicio víctima recibirá una avalancha de respuestas de DNS largas y no deseadas que pueden interrumpir o incluso hacer caer sus servidores. Este es un tipo de ataque DDoS.
Es como si un grupo de adolescentes bromistas llamara a una pizzería y pidiera cada uno una docena de pizzas. En lugar de dar su propia dirección para la entrega, dan la dirección de un vecino desprevenido. A la víctima, que recibe entonces una enorme cantidad de pizzas familiares que no ha pedido, probablemente le perturbarán el día.
Se necesita un servidor DNS que acepte consultas recursivas para llevar a cabo este tipo de ataque, ya que los paquetes de DNS amplificados son respuestas a consultas de DNS recursivas.
En un ataque de envenenamiento de caché de DNS, cuando un servidor DNS recursivo solicita una dirección IP a otro servidor DNS, un atacante intercepta la solicitud y da una respuesta falsa, que suele ser la dirección IP de un sitio web malicioso. El servidor DNS recursivo no solo envía al cliente original esta dirección IP, sino que el servidor también guarda la respuesta en su caché. Cualquier usuario que solicite una IP para el mismo nombre de dominio será enviado al sitio web malicioso. Si se trata de un nombre de dominio y un solucionador de DNS famosos, este ataque podría llegar a afectar a miles de usuarios.
En una consulta de DNS iterativa, el cliente pide directamente la respuesta a cada servidor DNS. Incluso si un atacante es capaz de enviar una respuesta falsificada a la consulta, solo afectará a un único cliente, lo cual no suele merecer el tiempo del atacante.
El servicio de DNS gestionado de Cloudflare suele resolver las consultas de DNS más rápido que los DNS de la competencia o los DNS públicos. Además, el DNS de Cloudflare es compatible con DNSSEC, un estricto protocolo de seguridad diseñado para mantener la seguridad de los servidores DNS y las consultas.