DNS resolver

Los DNS resolvers son un componente esencial del Domain Name System (DNS). Actúan como contrapartida consultora de los servidores de nombres DNS que les responden. Desde el punto de vista del usuario, un DNS resolver sirve de interfaz entre el usuario o la aplicación y los servidores de nombres.

¿Qué es un DNS resolver?

Un DNS resolver es un servicio que proporciona una dirección IP cuando se solicita un nombre de dominio. Se habla de resolver un dominio obteniendo su dirección IP; “resolver” en inglés se define en el documento de especificación de Internet RFC 1034:

Cita

“Resolvers are programs that extract information from name servers in response to client requests. Resolvers must be able to access at least one name server and use that name server’s information to answer a query directly, or pursue the query using referrals to other name servers.” — Fuente: https://www.rfc-editor.org/rfc/rfc1034.html

Traducción: “Los resolvers son programas que extraen información de los servidores de nombres en respuesta a las peticiones de los clientes. Los resolvers deben ser capaces de tener acceso a al menos un servidor de nombres y utilizar la información de ese servidor de nombres para responder a una consulta directamente, o resolver la consulta utilizando referencias a otros servidores de nombres.” (traducido por IONOS)

Los DNS resolvers son la contrapartida de los servidores de nombres, los cuales contienen la información real del DNS. Dado que los servidores de nombres también se denominan servidores DNS, el término “cliente DNS” se utiliza ocasionalmente para referirse a los DNS resolvers. Sin embargo, muchos DNS resolvers son servidores, por lo que existe un uso múltiple del término servidor DNS.

Los DNS resolvers tienen formas diferentes. Un DNS resolver no es necesariamente un componente único, ni una tecnología específica. Desde la perspectiva del usuario, un DNS resolver es cualquier sistema que se encargue de averiguar la dirección IP asociada a un nombre de dominio concreto. El modo exacto en que el DNS resolver recibe la información es irrelevante.

En el nivel más bajo están los llamados “stub resolvers”. Por lo general, se trata de una biblioteca de software o un servicio que se ejecuta en el equipo local. Los stub resolvers suelen comunicarse con los DNS resolvers ubicados en sistemas remotos, que son los que realizan el verdadero trabajo de resolución de nombres.

¿Por qué se necesita un DNS resolver?

El Domain Name System (DNS) es un sistema jerárquico distribuido por todo el mundo para gestionar los datos asociados a los dominios de Internet. Un dominio es un nombre visualmente atractivo para el ser humano, que es fácil de recordar y de introducir manualmente. Una de las principales tareas del DNS es la resolución de nombres, es decir, relacionar nombres de dominios con direcciones IP. Los DNS resolvers son, por tanto, una de las piedras angulares de la estructura técnica de Internet. Este es un ejemplo de resolución de nombres:

Nombre de dominio solicitado

Dirección IP obtenida

example.com

93.184.216.34

Aunque la mayoría de los usuarios no sean conscientes de ello, muchas de sus operaciones diarias comienzan con la conversión de un nombre de dominio en una dirección IP. El acceso a una página web, la recuperación de un correo electrónico o el inicio de sesión en una cuenta de usuario a través de una aplicación comienzan con la resolución del nombre. Solo entonces tiene lugar la transferencia de datos propiamente dicha.

Fase del trabajo

Protocolo

Servidor

Ejemplo de nombre de host

Acceder a la página web

HTTP

Servidor web

www.ionos.com

Recuperar el correo

IMAP

Servidor de correo

imap.gmail.com

Acceso a la aplicación

HTTPS

Servidor API

api.twitter.com

Lo que tienen en común los pasos anteriores es que los servidores están involucrados. Es decir, son sistemas remotos con los que se comunica nuestro sistema local. Para podernos comunicar, necesitamos la dirección de la otra parte que, en este caso, es la dirección IP del servidor. Sin embargo, normalmente solo conocemos sus nombres de dominio. Afortunadamente, hay DNS resolvers que se encargan de resolver los nombres por nosotros.

¿Qué ocurre si falla el DNS resolver?

Teóricamente, también es posible hacer lo mismo sin un DNS resolver. En realidad, también se pueden utilizar las direcciones IP directamente. Sin embargo, hoy en día esto solo funciona de forma teórica. En la práctica, la resolución manual de nombres supone pérdidas considerables.

En primer lugar, el protocolo de seguridad HTTPS está vinculado a los nombres de dominio. Si intentas acceder a una página web sin IP, la comunicación no se cifra. Además, solo la asignación del nombre de dominio permite alojar varias páginas web en un mismo servidor y dirigirse a ellos de forma específica.

Los enfoques modernos de la distribución geográfica de los recursos de los servidores también requieren el acceso a un DNS resolver. En este caso, un solo nombre de dominio está conectado a varias direcciones IP. Esto se puede ilustrar bien con el ejemplo de la página de inicio de Google. Si solo fuera accesible bajo una única dirección IP, todo el tráfico mundial se dirigiría allí; lo que sobrecarga rápidamente el sistema.

¿Cómo funciona un DNS resolver?

El Domain Name System (DNS) consta de componentes distribuidos por todo el mundo que interactúan entre sí. Hay cuatro clases principales de componentes; tres de ellos son servidores de nombres, que contienen DNS records. La última clase comprende los DNS resolvers; la contrapartida de los servidores de nombres.

Componente DNS

Equivalencia en inglés

Explicación

Servidor root de nombres

Root name server

Contiene las direcciones de los servidores de nombres TLD.

Servidor de nombres TLD

TLD name server

Contiene las direcciones de los servidores de nombres autoritarios de un TLD.

Servidores de nombres autoritarios

Authoritative name server

Contiene información de una zona DNS.

Resolver recursivo

Recursive resolver

Determina las direcciones IP de los nombres de equipos; realiza peticiones a los servidores de nombres para ese fin.

Consejo

¿Quieres profundizar más en el tema del DNS? En el artículo “Qué es un root server” puedes aprender más sobre los aspectos clave del Domain Name System.

Como ya sabes, un DNS resolver recibe una solicitud con un nombre de dominio y su cometido es determinar la dirección IP asociada. ¿Cómo funciona el proceso exactamente? Lo cierto es que hay varios procesos.

Si la solicitud ya se ha realizado previamente como, por ejemplo, al acceder repetidamente a google.com, la respuesta se carga desde la caché local. Si no fuera este el caso, el resolver realiza consultas a los servidores de nombres y compila una respuesta a partir de la información obtenida. El algoritmo utilizado para la resolución de nombres fue definido en el RFC 1034:

  1. Comprobar si la respuesta deseada está contenida en la caché local. Si es así, entregar la respuesta al cliente.
  2. Identificar los mejores servidores de nombres a los que consultar.
  3. Enviar consultas a los servidores de nombres hasta que uno de ellos proporcione una respuesta.
  4. Evaluar la respuesta; posteriormente:
    1. Si la respuesta resuelve la solicitud o contiene un error de nombre, almacenar en caché la respuesta y entregarla al cliente.
    2. Si la respuesta contiene una referencia a otro servidor de nombres, se debe guardar la respuesta en caché y continuar con el paso (2).
      1. Si la respuesta es un registro CNAME, se debe guardar el CNAME en caché y continuar con el nombre canónico en el paso (1).
    3. Si la respuesta contiene un error del servidor, o parece ser incorrecta, se debe eliminar el servidor de la lista de servidores y volver al paso (3).

¿Qué hacer en caso de que surjan problemas con el DNS resolver?

Como ya hemos visto, los DNS resolvers y la resolución de nombres asociada son importantes para el uso diario de los recursos de Internet. Sin embargo, el DNS tiene fama de ser una fuente de errores.

La susceptibilidad a los errores radica en la propia naturaleza del sistema. El DNS es un sistema distribuido globalmente y organizado jerárquicamente en el que los cambios se propagan de forma gradual. Esto puede tardar hasta 48 horas, por lo que es fácil que surjan discrepancias. Además, se utilizan cachés a todos los niveles, que son fundamentales para el rendimiento, pero también son una fuente de errores.

Consejo

Los errores en la información DNS almacenada localmente pueden causar una serie de problemas. En muchas situaciones, ayuda borrar la caché DNS.

A diferencia del intercambio de datos real en Internet, que se realiza principalmente a través del protocolo TCP/IP, el protocolo UDP se utiliza para la comunicación del DNS. El User Datagram Protocol (UDP) es más sencillo y requiere menos recursos. Desgraciadamente, son precisamente esas propiedades las que hacen que los DNS resolvers públicos sean objetivos atractivos para los ciberdelincuentes.

Con un ataque UDP flood, los DNS resolvers públicos se utilizan indebidamente como amplificadores de ataques DDoS. Además, hay ataques de envenenamiento de caché que tienen como objetivo introducir información DNS falsa en los DNS resolvers. A nivel del servidor, se utiliza la asignación aleatoria del puerto de origen como medida de protección.

¿Cómo se comprueba si la resolución de nombres funciona?

Si se producen errores extraños en el sistema local que podrían apuntar al DNS como causa, es aconsejable comprobar primero el funcionamiento de la resolución de nombres. Esto es fácil de hacer y facilita tener rápidamente información sobre posibles problemas.

La herramienta nslookup está disponible como programa de línea de comandos en casi todos los sistemas operativos. En el caso más sencillo se ejecuta la herramienta e se introduce el nombre del host deseado como argumento. Si la resolución del nombre funciona, se recibe como respuesta su dirección IP correspondiente. Además, la herramienta muestra el DNS resolver ya configurado:

nslookup example.com
bash

En la práctica, nslookup también puede utilizarse para reverse DNS lookup. En este caso, se introduce una dirección IP como argumento y se recibe uno o varios nombres:

nslookup 9.9.9.9
bash

Como alternativa a nslookup, se puede hacer un ping al nombre de dominio. El comando ping está preinstalado en la mayoría de los sistemas y activa la resolución de nombres cuando se le solicita. Se introduce el nombre del host como argumento:

ping example.com
bash

Si nslookup o ping no proporcionan una dirección IP, hay que asumir que la resolución de nombres no funciona. En ese caso, vale la pena intentar cambiar el DNS resolver o registrar una entrada temporal en el archivo de hosts, tema que será tratado más adelante.

Si se mostrara una dirección IP, eso quiere decir que la resolución de nombres funciona, al menos en un principio. Sin embargo, la información puede ser incorrecta. A la hora de evaluar el resultado obtenido, merece la pena compararlo con las entradas DNS almacenadas globalmente. Se recurre a DNS Propagation Checker de whatsmydns.net para mostrar los registros A del nombre del host.

¿Cómo cambiar el DNS resolver?

Como se ha explicado al principio, el término DNS resolver tiene varios significados. Cuando se trata de cambiar el DNS resolver, hace referencia a la dirección del servidor configurado en el sistema que realiza la resolución de nombres por los usuarios. La mayoría de los usuarios probablemente no saben que se utiliza un servidor externo para esto.

En su estado básico, el DNS resolver del respectivo proveedor de Internet se utiliza en la mayoría de los sistemas, ya sea un PC, un portátil o un smartphone. En las redes domésticas, la dirección IP del DNS resolver suele estar guardada en el router. Al utilizar el DNS resolver preestablecido pueden surgir bastantes inconvenientes.

Además del filtrado de información DNS personal conocido como DNS leak, existe otro problema conocido como DNS spoofing. En este último caso el proveedor de Internet entrega al usuario datos DNS manipulados. Puede, por ejemplo, bloquear a los competidores o redirigir el tráfico de Internet a páginas con publicidad. Por lo tanto, generalmente es una buena idea configurar el DNS resolver uno mismo.

Para cambiar el DNS resolver se procede de forma diferente según el sistema operativo. Como regla general, hay que configurar la conexión a la red e introducir la dirección de Internet de un DNS resolver conocido. De forma análoga al DNS secundario, se debe introducir un servidor secundario junto al DNS resolver primario. Este proporciona redundancia y protege contra los errores cuando el servidor DNS no responde.

Para cambiar el DNS resolver hay que conocer las direcciones IP exactas de uno o varios servidores en los que se está ejecutando un DNS resolver. Dado que la resolución de nombres no se da sin un DNS resolver, lógicamente no se pueden utilizar nombres fáciles de memorizar para el ser humano.

Los DNS resolvers gratuitos ofrecen una serie de ventajas. Además de una mayor velocidad y protección de la privacidad, en parte también ofrecen funciones de filtrado. Algunos ejemplos conocidos son Cloudflare con la dirección IP 1.1.1.1 y Quad9 con 9.9.9.9.

¿Cómo se puede evitar un DNS resolver?

Como hemos podido comprobar, los DNS resolvers son esenciales para trabajar con Internet. Sin embargo, hay algunas situaciones en las que tiene sentido evitar la resolución de nombres a través de DNS resolvers. El truco técnico consiste en registrar entradas en el archivo hosts.

El archivo hosts es una reliquia de los primeros días de Internet. En aquella época, no había DNS, ya que el número de ordenadores conectados era manejable. Se introducen las combinaciones correspondientes directamente en el archivo hosts para transformar los nombres de host en direcciones IP. A la izquierda se encuentra una sola dirección IP, a la derecha uno o varios nombres de host. El nombre de host localhost para el “Loopback Interface” también suele configurarse de este modo:

# IPv4
127.0.0.1       localhost
# IPv6
::1                 localhost

El stub DNS resolver local evalúa las entradas registradas en el archivo hosts destinadas a la resolución de nombres. Si se encuentra algún resultado para el nombre de host consultado, el stub resolver retorna la dirección IP correspondiente. En ese caso, se estaría manteniendo la consulta únicamente en el equipo local. De lo contrario, el proceso normal de resolución de nombres tiene lugar a través del DNS resolver externo que se haya configurado.

El archivo hosts permite trabajar sin un DNS resolver. Sin embargo, este requiere registrar una entrada para cada nombre de host que se quiere resolver. Lo cual no es muy práctico para el trabajo diario, pero sí es muy adecuado para algunas aplicaciones específicas. Dado que el archivo de hosts se evalúa en primer lugar, puede utilizarse como solución a diversos problemas.

Uno de los usos del archivo host es el de asignar una dirección IP fija a un nombre de host. Este truco se utiliza a menudo para silenciar las aplicaciones que “llaman a casa”. Esto se debe a que algunas aplicaciones informan de forma periódica del nombre del host y transmiten los datos sin marcar a un servidor determinado. Para evitarlo, basta con registrar una entrada en el archivo hosts.

Ilustración del principio con un ejemplo. El objetivo es evitar que un programa interno acceda a spy.example.com. Para ello, se introduce el nombre de dominio en el archivo hosts y se hace referencia al loopback IP 127.0.0.1. De esta manera, las peticiones van dirigidas al equipo local y nunca llegan al servidor. Desde el punto de vista de la aplicación, las peticiones se cuelgan como si, por ejemplo, se hubiera cortado la conexión a Internet:

127.0.0.1   spy.example.com

El principio también puede invertirse. Hoy en día, muchos países utilizan el bloqueo de páginas web a nivel de DNS. Los proveedores de Internet se ven obligados, por orden judicial, a no entregar direcciones IP o a falsificarlas para determinados nombres de dominio. En términos técnicos se trata de una suplantación de DNS sancionada por el Estado. Desde el punto de vista del usuario, no se puede acceder a los dominios deseados.

El uso inteligente del archivo hosts en el propio sistema permite evitar el bloqueo web por medio del DNS. Lo único que se necesita es la dirección IP real de la página web bloqueada. Esta se introduce en el archivo hosts junto a su nombre de dominio. Por ejemplo, si el dominio blocked.example.com está bloqueado por el proveedor a través de un bloqueo web por DNS, se puede recuperar el acceso si se introduce la dirección IP de la web en el archivo hosts:

93.184.216.34 blocked.example.com

Por último, pero no por ello menos importante, se presenta una aproximación desde el desarrollo web para configurar la resolución de nombres en el dispositivo local a través del archivo hosts. Se supone que se va a trasladar una página web existente bajo el dominio www.example.com. Para preparar el traslado, primero se transfiere la página web al nuevo servidor. Una vez finalizada la transferencia hay que probar la instalación, pero hay un problema: el nombre de dominio sigue llevando a la página web existente en el antiguo servidor 93.184.216.34; la página transferida al nuevo servidor no puede ser verificada de esta manera.

Así que simplemente se introduce en el archivo hosts la dirección IP del nuevo servidor junto con el nombre del dominio. De esta manera, nuestras solicitudes locales van al nuevo servidor y podemos comprobarlo sin problemas. Al mismo tiempo, todos los demás visitantes siguen recibiendo la dirección IP del antiguo servidor. De este modo, la página sigue siendo completamente accesible para los visitantes.

198.51.100.0 localhost www.example.com

Se utiliza un procedimiento similar para desarrollar una página web de puesta en escena a nivel local. Si se quiere reconstruir la página web de www.example.com, se configura una página de puesta en escena en un entorno de desarrollo local que sea accesible bajo la dirección loopback 127.0.0.1. Se añade una entrada para el nombre de host dev.example.com en el archivo hosts:

127.0.0.1 localhost dev.example.com