Servidor DNS: ¿Qué es y cómo funciona?

Todo lo que necesitas saber sobre los servidores DNS: funcionamiento en Internet, tipos de registros de recursos con ejemplos
¿Alguna vez te has preguntado cómo es que el navegador sabe qué página abrir cuando escribes la dirección en la barra de direcciones? En realidad, esto es algo que se resuelve en la comunicación entre computadoras, y es más profundo de lo que parece a simple vista.

En las décadas de 1970 a 1990, existía una red llamada ARPANET. Esta red fue un esfuerzo del Departamento de Defensa de los Estados Unidos para conectar numerosas computadoras y permitir la transferencia de información durante situaciones de guerra. La importancia de esta red radicaba en su capacidad para transferir información de manera rápida y eficiente a largas distancias. Los principios de funcionamiento de ARPANET sentaron las bases del Internet moderno.

Inicialmente, esta red conectaba computadoras en cuatro instituciones diferentes de los Estados Unidos:

  • Universidad de California en Los Ángeles.
  • Centro de Investigación de Stanford.
  • Universidad de Utah.
  • Universidad de California en Santa Bárbara.
Los científicos de estas instituciones decidieron crear una nueva red para transmitir información entre ellos. Para ello, solo necesitaban conocer el identificador de la computadora a la que querían enviar el mensaje, conocido como dirección IP. Con el crecimiento de la red a miles de computadoras en la década de 1980, se volvió difícil recordar todas las direcciones IP. Se necesitaba un sistema que asignara nombres comprensibles a las computadoras y almacenara todas las direcciones en un solo lugar.
El archivo hosts: el primer paso hacia la creación de DNS
Para resolver este problema, los desarrolladores decidieron utilizar un diccionario que vinculara el nombre único con la dirección IP de cada computadora en la red. Este diccionario era el archivo hosts.txt, que era responsable de vincular la dirección IP con el nombre de la computadora. El archivo se encontraba en el servidor del Centro de Investigación de Stanford, y los usuarios de la red lo descargaban regularmente en sus computadoras para mantener actualizado el diccionario, ya que nuevas computadoras aparecían en la red casi todos los días.

El archivo hosts.txt se veía así (y todavía se ve así):

192.168.10.36         MIKE-STRATE-PC
Dirección IP          Nombre de la computadora
Si tenías este archivo en tu computadora, podías usar el nombre en inglés "MIKE-STRATE-PC" en lugar de recordar los números.

Veamos cómo se ve el archivo y tratemos de agregar un nuevo nombre para conectarnos a una computadora usando ese nombre. Para hacer esto, editaremos el archivo hosts. Puedes encontrarlo en tu computadora en la siguiente ubicación:
  • En sistemas Unix: /etc/hosts
  • En sistemas Windows: %Ruta a la carpeta Windows%/system32/drivers/etc/hosts
Hemos asignado el nombre "MIKE-STRATE-PC" a la computadora con la dirección IP 192.168.10.36 que se encuentra en la red local. Después de eso, podemos usar el comando ping, que envía una solicitud especial a la computadora de Mike y espera una respuesta. Es similar a tocar la puerta o llamar al timbre para preguntar "¿hay alguien en casa?". Puedes enviar esta solicitud a cualquier computadora.
A medida que la red se desarrollaba y se "llenaba" con nuevos clientes, este enfoque se volvía incómodo. Todos los usuarios de las computadoras tenían que descargar cada vez más a menudo una nueva versión del archivo desde el servidor del Centro de Investigación de Stanford, que se actualizaba manualmente varias veces a la semana. Para agregar nuevas versiones, era necesario comunicarse con el instituto y solicitarles que agregaran nuevos valores al archivo.

En 1984, Paul Mockapetris describió un nuevo sistema llamado DNS (Domain Name System / Sistema de Nombres de Dominio), que tenía como objetivo automatizar los procesos de asignación de direcciones IP a nombres de dominio y actualizar los nombres para los usuarios sin la necesidad de descargar manualmente el archivo desde un servidor externo.
Cómo funciona DNS en Internet
En la actualidad, Internet nos rodea en todas partes: lo usamos en dispositivos móviles y de escritorio. Los sistemas de videovigilancia e incluso las teteras se comunican entre sí a través de Internet, y para establecer una conexión correcta con ellos, se necesita un sistema que permita a los usuarios conectarse a un servicio específico con una sola solicitud en la barra de direcciones. Todo esto recae en el sistema DNS, que almacena mucha más información que solo la dirección IP y el nombre del dispositivo. Los registros DNS también son responsables de enviar correos electrónicos correctamente, vincular diferentes dominios y zonas de dominio.

DNS es un sistema distribuido, lo que significa que tiene muchos nodos, cada uno de los cuales es responsable de su propia zona. Esto es posible gracias a que la estructura misma de DNS es jerárquica, lo que significa que asigna zonas de responsabilidad, donde cada padre conoce la ubicación de su servidor secundario y conoce la zona de responsabilidad de este último.
Veamos más de cerca cómo funciona DNS y sus componentes.
Terminología

Los componentes principales de DNS son:

Dominio (nombre de dominio): es un nombre simbólico que se utiliza para identificar un servidor en Internet. Los nombres de dominio son una estructura jerárquica en la que cada nivel se separa por un punto. Los niveles principales son:
  • Dominio raíz. No se utiliza en la URL, pero siempre se da por sentado. Es el punto de partida para construir todas las URL en Internet
  • Dominios de nivel superior. Estos incluyen dominios como .ru, .com, .net, .su, etc. También se les llama dominios de primer nivel
  • Dominio de segundo nivel (o dominio principal). Este es el nombre principal de tu sitio web
  • Subdominios (dominios de tercer, cuarto, quinto nivel, etc.). Estos incluyen todos los subdominios del dominio principal.
Servidor DNS: es el sistema responsable de almacenar y mantener actualizados los registros de sus dominios secundarios. Cada servidor DNS es responsable solo de su zona, es decir, el servidor DNS del dominio .io sabe dónde se encuentra el dominio codica, y el servidor DNS de codica sabe dónde se encuentran sus subdominios.

Servidor DNS raíz: es el sistema que conoce la ubicación (dirección IP) de los servidores DNS de los dominios de nivel superior.

Registro de recursos: es una unidad de información del servidor DNS. Cada registro de recursos tiene varios campos:
  • Nombre (dominio al que pertenece el registro)
  • Tipo
  • Parámetros
  • Valor
Conexión

Es importante entender que el nombre de dominio es solo una abstracción para las personas. La computadora y las aplicaciones (como el navegador) se comunican con los servicios dentro de la red de Internet solo a través de direcciones IP.

Veamos el proceso de obtener una dirección IP a partir de un nombre de dominio utilizando el ejemplo del dominio app.codica.la.

Hay dos posibles escenarios:
  • 1
    La computadora envía una solicitud a un servidor DNS conocido. Por lo general, este es el servidor DNS de tu proveedor de servicios de Internet (ISP): ¿cuál es la dirección IP del dominio app.codica.la?. El servidor DNS del proveedor de servicios de Internet busca en su base de datos la información de que el dominio app.codica.la se encuentra en la dirección IP 104.25.238.104 y devuelve esta información a tu computadora. Este proceso es similar al uso del archivo hosts.txt.
  • 2
    El servidor DNS más cercano no tiene información sobre la dirección IP del dominio app.codica.la. En este caso, se inicia una cadena de procesos que permitirán a tu computadora obtener la dirección IP del dominio:

    • Dado que el dominio es una estructura jerárquica y todos los servidores DNS conocen las direcciones IP de los servidores DNS raíz, la solicitud se envía a estos servidores para obtener la dirección IP del dominio.
    • Los servidores DNS raíz, de acuerdo con su zona de responsabilidad, conocen la ubicación de los servidores DNS de los dominios de nivel superior. Estas direcciones se devuelven al servidor DNS de tu proveedor, y luego se envía una solicitud al servidor DNS correspondiente (en nuestro caso, al servidor DNS del dominio.la) para obtener la dirección IP del dominio app.codica.la.
    • De acuerdo con su zona de responsabilidad, el servidor DNS del dominio de nivel superior devuelve la dirección IP del servidor DNS del dominio codica.la, al que se envía una solicitud para obtener la dirección IP del subdominio app.
    • El servidor DNS devuelve las direcciones IP del subdominio app, y luego el servidor DNS de tu proveedor devuelve esta dirección a tu computadora, que ahora puede acceder al dominio app.codica.la a través de su dirección IP.





    • De acuerdo con su zona de responsabilidad, el servidor DNS del dominio de nivel superior devuelve la dirección IP del servidor DNS del dominio codica, al que se envía una solicitud para obtener la dirección IP del subdominio ru.
    • El servidor DNS devuelve las direcciones IP del subdominio ru, y luego el servidor DNS de tu proveedor devuelve esta dirección a tu computadora, que ahora puede acceder al dominio app.codica.la a través de su dirección IP.
Recursividad en DNS
Puedes notar que los dos escenarios descritos anteriormente son muy diferentes: en el primer caso, simplemente enviamos una solicitud y obtenemos una respuesta, mientras que en el segundo caso, tenemos que ir desde el dominio raíz en el proceso de búsqueda de la entrada que necesitamos. Este proceso se llama búsqueda recursiva, ya que el servidor DNS más cercano envía continuamente solicitudes a otros servidores DNS hasta que obtiene los registros de recursos necesarios. Este proceso se puede visualizar de la siguiente manera:
En las solicitudes 1 y 2, el servidor más cercano obtendrá información sobre la ubicación de los servidores DNS que están en su zona de responsabilidad, a los que se envió la solicitud. En la solicitud 3, se obtendrán los registros de recursos necesarios para el dominio codica y sus subdominios.
La búsqueda recursiva es una operación bastante lenta que también carga la red y los propios servidores DNS. Para eliminar la recursividad, cada servidor DNS almacena en caché la información de los registros que recibe para una entrega rápida de esta información al usuario.

Como se puede ver, la búsqueda recursiva implica encontrar una respuesta final a nuestra solicitud buscando registros en todos los servidores DNS necesarios, comenzando desde el dominio raíz. En contraste, también existe una consulta iterativa, que a diferencia de la recursiva, realiza solo una iteración, que es una solicitud al servidor DNS más cercano del que podemos obtener una respuesta en caché o los datos de la zona de responsabilidad de ese servidor. Es importante tener en cuenta que una consulta iterativa implica solo una solicitud.

La mayoría de los servidores DNS en Internet pueden enviar solicitudes recursivas, ya que esto permite almacenar en caché la respuesta, lo que reduce la carga tanto en el servidor como en otros servidores DNS. El tiempo durante el cual el servidor DNS almacena en caché la información se especifica en el registro de recursos DNS que se discutirá a continuación.
Registros de recursos DNS
El Internet moderno implica no solo obtener una dirección IP a partir de un nombre de dominio, sino también el envío de correos electrónicos, la conexión de servicios adicionales de análisis a un sitio web, la configuración del protocolo seguro HTTPS. Esto se hace principalmente a través de registros de recursos DNS.

Veamos qué registros de recursos se utilizan y a qué apuntan. Los registros de recursos DNS principales son:
Registro A: uno de los registros más importantes. Este registro apunta a la dirección IP del servidor que está vinculado al nombre de dominio.

Registro MX: apunta al servidor que se utilizará para enviar correo electrónico de dominio.

Registro NS: apunta al servidor DNS del dominio.

Registro CNAME: permite que uno de los subdominios duplique los registros DNS de su padre. Esto se hace para redirigir una solicitud de un dominio a otro (generalmente para redirigir un dominio con el subdominio www a un dominio sin ese subdominio).

Registro TXT: este registro almacena información de texto sobre el dominio. A menudo se utiliza para confirmar los derechos de propiedad del dominio mediante la adición de una cadena específica enviada por el servicio de Internet.
Los registros de recursos son casi siempre los mismos, pero algunos registros pueden tener otros campos, por ejemplo, los registros MX también tienen un valor de prioridad. En su mayoría, los registros de recursos tienen la siguiente estructura:

Nombre del registro   TTL   Clase   Tipo de registro  Valor
Desglosemos esto en más detalle:

Nombre del registro: es el dominio al que pertenece el registro de recursos.

TTL (tiempo de vida): es el tiempo en segundos durante el cual el valor del registro de recursos se almacenará en caché. Esto es necesario para aliviar la carga en los servidores DNS. Gracias al almacenamiento en caché, es posible que el servidor DNS más cercano conozca la dirección IP del dominio solicitado.

Clase: originalmente, DNS podía funcionar no solo en Internet, por lo que se especifica la clase en el registro. Actualmente, solo se admite un valor: IN (Internet).

Tipo: especifica el tipo de registro de recursos, los principales de los cuales se discutieron anteriormente.

Valor: es el valor real del registro de recursos. Dependiendo del tipo de registro de recursos, los valores pueden tener diferentes formatos.

Veamos cómo se almacenan estos registros en los servidores DNS utilizando el dominio ya.ru como ejemplo. Para esto, usaremos la utilidad dig, que obtiene todos los registros de recursos DNS disponibles del servidor DNS y los muestra al usuario.

La utilidad dig es un cliente DNS y es parte de uno de los servidores DNS más comunes, BIND.
Ejemplos de registros DNS reales
No te asustes por esta salida tan larga. Incluso ahora, puedes entender casi todo lo que se muestra aquí. Analicemos cada sección con más detalle.

La salida consta de varias partes:
  • Encabezado
  • Sección de consulta
  • Sección de respuesta
  • Información de servicio
Encabezado de la consulta

; <<>> Net::DNS::Dig 0.12 <<>> -t any ya.ru.
;;
;; Got answer.
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52109
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 0
Aquí se indican las banderas establecidas en nuestra solicitud, la cantidad de solicitudes y respuestas, así como otra información de servicio.

Sección de consulta

;; QUESTION SECTION:
;ya.ru.   IN    ANY
En la sección de consulta se indica el dominio al que se está accediendo, la clase de registro y los registros que queremos obtener. ANY indica que queremos obtener todos los registros de recursos disponibles, pero si deseas experimentar con la utilidad tú mismo, puedes obtener solo los registros específicos que te interesen utilizando una opción especial.

Sección de respuesta

La sección de respuesta es bastante grande, por lo que, para mayor comodidad, la dividiremos en tipos de registros de recursos.

;; ANSWER SECTION:
ya.ru. 	7199	IN	NS	 ns1.yandex.ru.
ya.ru. 	7199	IN	NS	 ns2.yandex.ru.

ya.ru.	599	IN	A	 87.250.250.242
ya.ru.	599	IN	AAAA	 2A02:6B8:0:0:0:0:2:242
Tanto el registro A como el registro AAAA apuntan a la dirección IP que está vinculada a nuestro dominio. El registro A apunta a una dirección IP en formato IPv4, mientras que el registro AAAA apunta a una dirección IP en formato IPv6.

ya.ru.	7199	IN	MX	 10 mx.yandex.ru.
El registro MX también tiene un parámetro de prioridad. Dado que puede haber varios servidores para enviar correo electrónico, puede haber muchos registros, por lo que se especifica la prioridad del registro para determinar el servidor principal. Cuanto menor sea el número, mayor será la prioridad.

ya.ru.	3599	IN	SOA	 ns1.yandex.ru. sysadmin.yandex.ru. 2019021800 900 600 2592000 900
Registro SOA (Start of Authority) apunta a varios parámetros diferentes:
  • 1
    El servidor con la información de referencia para el dominio actual.
  • 2
    Información de contacto de la persona responsable.
  • 3
    Varios parámetros de almacenamiento en caché de registros.
Existen otros registros de recursos más específicos sobre los que no se habló aquí, pero esto no significa que sean inútiles. Siempre puedes encontrar una lista completa de tales registros en la documentación (por ejemplo, para el servidor DNS BIND).
Conclusiones
Los servidores DNS son la base de Internet en la actualidad y se utilizan en casi todas las acciones que los usuarios realizan en la red, ya sea visitar un sitio web, enviar correos electrónicos, trabajar con una aplicación de Internet en un teléfono, etc. Por lo tanto, el conocimiento de los principios de funcionamiento de los servidores DNS y los registros de recursos principales, que permiten la navegación en la red de Internet, es importante para los desarrolladores.
Recursos adicionales
Leer otros artículos de Guías
Lea otros artículos relevantes del mundo de la tecnología y el espíritu empresarial.