A recursive DNS query is a request that instructs a name server to resolve a domain name fully on the client's behalf and return a final answer or error, rather than a referral, by setting the recursion desired (RD) flag in the DNS message header. Nearly every DNS lookup from end devices begins as a recursive query to a recursive resolver, making resolver performance, cache hit rate, and availability critical to application speed and reliability. Proper management practices, including restricting recursion to known client networks to prevent open resolver attacks, separating recursive resolvers from authoritative servers, and maintaining consistent access control lists and query logging, are essential for security, scalability, and operational visibility.
Cómo funciona una consulta recursiva
En una consulta recursiva, el cliente establece el indicador de recursión deseada (RD) en el encabezado del mensaje DNS. El servidor receptor, si ofrece recursión, se encarga de resolver el nombre y devuelve únicamente el resultado final.
- El cliente envía la consulta: un resolutor stub del cliente envía una consulta con el indicador RD activado a su resolutor recursivo configurado.
- El resolutor comprueba su caché: el resolutor recursivo busca una respuesta válida almacenada en la caché. Si existe, la devuelve inmediatamente.
- El resolutor consulta a otros servidores: cuando se produce una falta de acierto en la caché, el resolutor envía consultas iterativas, que suelen comenzar en un servidor raíz. Sigue las referencias a los servidores de dominio de nivel superior y, a continuación, al servidor autoritativo de la zona.
- El resolutor almacena el resultado en caché: el resolutor guarda la respuesta durante el tiempo establecido por el tiempo de vida (TTL) del registro.
- El resolutor responde al cliente: el resolutor devuelve la respuesta final, o un error como NXDOMAIN o SERVFAIL, con el indicador de recursión disponible (RA) activado.
El cliente ve una sola solicitud y una sola respuesta, independientemente del número de servidores con los que se ponga en contacto el resolutor. Un servidor puede rechazar la recursividad, en cuyo caso responde únicamente a partir de sus propios datos o devuelve una remisión o un rechazo. Los servidores exclusivamente autoritativos no suelen ofrecer recursividad.
Problemas habituales con las consultas recursivas
Un resolutor que responde a consultas recursivas procedentes de cualquier dirección de origen puede utilizarse en ataques de reflexión y amplificación. Restringe la recursividad mediante listas de control de acceso a los rangos de clientes internos y comprueba que no sea accesible desde Internet.
Los clientes reciben respuestas «REFUSED» cuando su subred no figura en la lista de subredes permitidas del resolutor. Esto suele ocurrir después de implementar una nueva subred y de que la lista de acceso no se haya actualizado.
Tras un reinicio o un vaciado de la caché, cada consulta se convierte en una falta de caché y desencadena un recorrido completo desde la raíz. Los usuarios experimentan una carga lenta de las páginas hasta que la caché se vuelve a calentar.
Cuando no se puede acceder a un servidor autoritativo de una zona o este devuelve delegaciones incompletas, el resolutor no puede completar la resolución y devuelve SERVFAIL. El cliente solo percibe un error, por lo que la falla se detecta rastreando las consultas iterativas en el resolutor.
Un resolutor conserva las respuestas hasta que caduca el TTL, por lo que es posible que un registro modificado no aparezca para algunos clientes. Los ingenieros observan resultados inconsistentes entre los resolutores tras un cambio hasta que las cachés caducan o se vacían.