DNS
Funcionamiento DNS
DNS son las iniciales de Domain Name System (sistema de nombres de dominio) y es una tecnología basada en una base de datos que sirve para resolver nombres en redes, es decir, para conocer la dirección IP de la máquina donde está alojado el dominio al que queremos acceder.
El DNS suele compararse con una guía telefónica de Internet. Del mismo modo que buscamos el nombre de un contacto para encontrar su número de teléfono, el DNS nos permite buscar un nombre de dominio para encontrar su dirección IP correspondiente. Este proceso de traducción se lleva a cabo en segundo plano en cuestión de milisegundos, lo que permite a los usuarios disfrutar de una experiencia de navegación fluida.
Por lo tanto, el DNS es un sistema que sirve para traducir los nombres en la red, y está compuesto por tres partes con funciones bien diferenciadas:
Cliente DNS: está instalado en el cliente (es decir, nosotros) y realiza peticiones de resolución de nombres a los servidores DNS.
Servidor DNS: son los que contestan las peticiones y resuelven los nombres mediante un sistema estructurado en árbol. Las direcciones DNS que ponemos en la configuración de la conexión, son las direcciones de los Servidores DNS.
Zonas de autoridad: son servidores o grupos de ellos que tienen asignados resolver un conjunto de dominios determinado (como los
.es
o los.org
).
Al realizar las consultas de los DNS habrás podido observar que las respuestas que recibes son no autoritativas. Para saber quién tiene la autoridad, o sea, el SOA de un host, debemos hacer de la siguiente manera:
Cuando una respuesta DNS es no autoritativa, significa que el servidor DNS que proporcionó la respuesta no es el servidor autoritativo para el dominio consultado. En otras palabras, el servidor DNS que respondió no tiene control directo sobre el dominio, pero obtuvo la información de otro servidor, generalmente a través de un proceso de caché.
¿Cómo saber si una respuesta es autoritativa o no?
Con nslookup es mas sencillo ya que te lo indica directamente, pero con la herramienta dig
, para verificar si una respuesta es autoritativa o no, puedes observar la sección de comentarios en la salida de la consulta:
Si la respuesta es autoritativa, verás algo como:
La bandera
aa
(authoritative answer) indica que es una respuesta autoritativa.Si la respuesta es no autoritativa, el
aa
no estará presente:
Más cosas, la dirección completa de dominio se llama FQDN (https://www.exampledomain.com), a continuación se explica:
En un servidor DNS hay dos zonas:
Zona directa: Permite encontrar IP dando dominio.
Zona inversa: Permite encontrar dominio dando IP.
Se puede poner un DNS master y otro slave (esclavo) en el que se replica el master por si falla.
Hay otro concepto importante, el TTL, que se refiere al Tiempo de Vida (Time To Live) que está esta información en la caché del DNS. Para saber cuánto tiempo se mantiene esta información en la caché utilizaremos la opción:
Proceso
- Comprobación de la caché de DNS local
Antes de acceder a servidores externos, el navegador comprueba primero su caché DNS local y la caché del sistema operativo en busca de la dirección IP correspondiente al nombre de dominio. Si la dirección IP se encuentra en la caché, el navegador la utiliza para conectarse directamente al sitio web, evitando más consultas DNS.
Consultar el servidor DNS del ISP
El navegador envía una consulta DNS al servidor DNS configurado en la configuración de red, que normalmente proporciona el proveedor de servicios de Internet (ISP) del usuario. Este servidor se conoce como servidor DNS recursivo, ya que realiza varias consultas en nombre del usuario para resolver el nombre de dominio.
Comprobación de la caché del servidor DNS del ISP
Consultar el servidor de nombres raíz
Si la dirección IP no se encuentra en la memoria caché del ISP, el servidor DNS recursivo consulta a un servidor de nombres raíz.
Referencia al servidor de nombres TLD
Referencia al servidor de nombres autorizado
Consulta del servidor de nombres autorizado
Devolver la dirección IP al navegador
Tipos de DNS
Tal y como se ha hablado en el proceso de búsqueda, dentro de los DNS, nos vamos a poder encontrar tres versiones diferentes, estas son:
DNS Recursivo: Este se encarga de realizar las búsquedas de las direcciones Ip correspondientes al nombre de un host. Se trata del tipo de DNS más común, y se utiliza en la gran mayoría de los hogares y empresas. Los servidores DNS recursivos, se encargan de seguir todas las consultas, hasta el punto donde encuentran la dirección IP correspondiente a esa consulta. Una vez localizada, trata de resolverla para mostrar el sitio.
DNS Autoritativo: Este tipo de DNS, es el apartado que contiene la información definitiva sobre el dominio en cuestión. Es el encargado de das la resolución a las consultas que se hacen sobre él. Todos los servidores autoritativos, son los que tienen almacenada toda esa información sobre los nombres del host, y las direcciones IP correspondientes.
DNS Raíz: Se trata del apartado que proporciona toda la lista de servidores DNS autoritativos para los dominios concretos. Es el primer punto de encuentro que se establece con el sistema de nombres de dominio, y también se encarga de proporcionar toda la información para encontrar los servidores DNS autoritativos de un dominio concreto.
Delegación DNS
Una de las caracteristicas del espacio de nombres de dominio es que se realiza una gestión independiente de cada dominio, esta gestión independiente está relacionada con el proceso de delegación. Que es el proceso por el cual el gestor de un determinado dominio delega la tarea de gestión de un dominio hijo a una entidad determinada, habitualmente el propietario del dominio.
ICANN delega la gestión del ccTLD .es a la empresa publica Red .ES, eso significa que el ICANN ya no se encargará de altas y bajas y, por lo tanto, los servidores DNS asociados a la raíz (servidores raíz) lo único que sabrán del dominio .es son las direcciones IP de los servidores DNS que Red .ES haya configurado. A cambio, Red .ES tendrá que configurar y mantener funcionano un grupo de servidores de nombres que conozcan más datos del dominio .es
Este proceso se puede repetir varias veces, como de hecho suele ocurrir. Una vez que el ICANN ha delegado el dominio .es, Red .ES deberá gestionar el alta del dominio "mi-empresa-sa.es" y, de hecho, lo hace para posteriormente traspasarle la delegación al dominio.
Tipos de registro DNS
Los registros DNS son diferentes cadenas de letras que se utilizan para indicar ciertas acciones al servidor DNS. Estas letras también son conocidas como sintaxis de DNS. A continuación, veremos una lista de las diferentes sintaxis de DNS que existen:
A: Hace referencia a la dirección IPv4 de un servidor web.
AAAA: Hace referencia a la dirección IPv6 de un host.
CNAME: Hace referencia a un alias de otro dominio. Es decir, su función es hacer que un dominio sea un alias de otro dominio. Normalmente este tipo de registros se utilizan para asociar nuevos subdominios con dominios ya existentes del registro A.
MX: Hace referencia a una lista de servidor de intercambio de correo que se debe utilizar para el dominio.
PTR: Hace referencia a un punto de terminación de red. Es decir, que la sintaxis de DNS es la responsable del mapeo de una dirección IPv4 para el CNAME en el alojamiento.
NS: Hace referencia a que servidor de nombres es el autorizado para el dominio.
SOA: Hace referencia al comienzo de autoridad. Este registro es uno de los registros DNS más importantes porque guarda información esencial como la fecha de la última actualización del dominio, otros cambios y actividades.
SRV: Hace referencia a un servicio. Es decir, se utiliza para la definición de un servicio TCP en el que opere en el dominio.
TXT: Hace referencia a un texto. Es decir, permite que los administradores inserten texto en el registro DNS. Esto se utiliza para dejar notas sobre información del dominio.
SPF: Hace referencia a qué servidores están autorizados para enviar correos electrónicos con nuestro dominio.
LOC: Hace referencia a la ubicación física del servidor. Es decir, este tipo de registros se utilizan para indicar la latitud, longitud y altura sobre el nivel de mar de la ubicación física del servidor.
MB: Hace referencia al nombre del dominio de correo electrónico. Actualmente este registro es experimental (Diciembre 2019).
MG: Hace referencia a los miembros de un grupo de correo electrónico. Actualmente este registro es experimental (Diciembre 2019).
MR: Hace referencia al renombre de un dominio de correo electrónico. Actualmente este registro es experimental (Diciembre 2019).
NULL: Hace referencia a recurso nulo. Actualmente este registro es experimental (Diciembre 2019).
HINFO: Hace referencia a los detalles sobre el hardware y el software del host.
MINFO: Hace referencia a la información sobre un buzón de correo electrónico. Actualmente este registro es experimental. (Diciembre 2019).
RP: Hace referencia a información sobre los encargados del dominio.
ANY: Hace referencia a toda la información de todos los tipos que exista.
AFSDB: Está pensado especialmente para clientes AFS.
NAPTR: Hace referencia a una ampliación del registro A que permite usar patrones de búsqueda.
KX: Hace referencia a Key Exchanger y permite gestionar claves criptográficas.
CERT: Este registro guarda certificados.
DNAME: Este indica alias para dominios enteros.
OPT: Hace referencia a un pseudo registro del ámbito de los mecanismos de extensión de DNS más conocido como EDNS.
APL: Hace referencia a “Address Prefix List” y sirve para enumerar rangos de direcciones en formato CIDR.
DS: Hace referencia a “Delegation Signer” y sirve para identificar zonas con firma DNSSEC.
SSHFP: Hace referencia a “SSH Public Key Fingerprint” y muestra la huella digital para las claves SSH.
IPSECKEY: Este contiene una clave para IPsec.
RRSIG: Este alberga una firma digital para DNSSEC.
NSEC: Este interconecta zonas firmadas en DNSSEC.
DNSKEY DNS: Este contiene una clave pública para DNSSEC.
DHCID: Este enlaza nombres de dominio con clientes DHCP.
TLSA: Este registro establece un enlace conocido como TLSA con un nombre de dominio.
SMIMEA: Este registro establece un enlace conocido como S/MIME con un nombre de dominio.
CDS: Este es una copia de un registro DS.
CDNSKEY:Este es una copia de un registro DNSKEY.
OPENPGPKEY: Este muestra claves públicas.
TKEY: Este permite el intercambio de claves secretas.
TSIG: Este sirve para la autenticación.
URI: Este muestra la asignación de nombres de host a las URL.
CAA: Este especifica las posibles autoridades de certificación (CA) para un dominio.
Quedate con los básicos y más comunes:
Comandos de DNS
Aquí tienes alguna selección de comandos de Linux y Windows útiles para la resolución de nombres
nslookup
nslookup google.es
Una herramienta de línea de comandos versátil para consultas DNS. Proporciona información sobre nombres de dominio, direcciones IP y registros DNS
dig
dig A google.es
Se utiliza principalmente para resolver nombres de dominio y obtener información detallada sobre cómo los servidores DNS responden a estas consultas. Es más avanzada que nslookup o host.
host
host google.es
Provee información de IP y dominios
whois
whois google.es
Provee información sobre el nombre de dominio: registro, contacto y más.
nsupdate
nsupdate -k file.txt
Comando para realizar modificaciones de registros DNS
rndc
rndc reload
Comando para mandar al DNS de BIND
dnsmasq
dnsmasq --query-cache
Un reenviador DNS ligero y un servidor DHCP. Se puede utilizar para almacenar en caché las consultas DNS y proporcionar servicios DNS para una red local.
systemd-resolve
systemd-resolve --status
Sirve para resolver consultas DNS utilizando el resolutor de systemd
. Proporciona información relacionada con DNS y opciones de solución de problemas.
tcpdump
tcpdump -i eth0 port 53
Un analizador de paquetes de red que se puede utilizar para capturar y analizar el tráfico DNS. Puede ayudar a la solución de problemas relacionados con DNS.
¿Quien gestiona los DNS?
Revisemos lo siguiente, y estos TLDs:
.es ->
.edu ->
.gov ->
Herramientas online
A continuación, tienes algunas de las herramientas online de comprobación de DNS:
- https://www.nslookup.io
Práctica con Wireshark
Vamos a probar a ver los resultados en directo, para ello usaremos el software de Wireshark de captura de tramas para las siguientes operaciones:
Identificamos claramente SOLO las tramas DNS de cada uno de estos comandos. No deben de aparecer tramas que no correspondan al servicio DNS.
Revisa el resultado y preguntate:
¿En qué puerto (tipo) se origina la petición y hacia qué puerto destino? (el 53)
¿Qué protocolo? (IPv4, UDP)
¿Cuál es el servidor de DNS?
Tiempo de vida o TTL
¿Qué significa type A y class IN? (Registro de IP en Internet (IN) )
Comandos host y dig
El comando dig
(Domain Information Groper) en Linux es una herramienta poderosa para consultar el Sistema de Nombres de Dominio (DNS). Se utiliza principalmente para resolver nombres de dominio y obtener información detallada sobre cómo los servidores DNS responden a estas consultas.
Comparación general:
dig
Alto
Depuración y análisis DNS
Respuesta detallada, flexible y poderosa.
host
Medio
Consultas rápidas
Sintaxis simple, útil para obtener datos básicos.
nslookup
Medio
Consultas rápidas
Fácil de usar, interfaz interactiva, pero desactualizada.
Usos del comando dig
en el contexto de DNS:
dig
en el contexto de DNS:Consulta de nombres de dominio: Traducir un nombre de dominio a una dirección IP (por ejemplo,
dig google.com
).Ver detalles de respuestas DNS: Proporciona mucha información detallada sobre la respuesta de los servidores DNS, como registros de tipo A (dirección IPv4), AAAA (IPv6), MX (correo), NS (servidores de nombres), y más.
Depuración de problemas DNS: Muy útil para diagnosticar problemas de resolución de nombres, revisar tiempos de respuesta, y la jerarquía de los servidores DNS que se consultan.
Realización de consultas DNS específicas: Permite hacer consultas a servidores DNS específicos y en distintos niveles de la jerarquía DNS (autoritativos, caché, etc.).
Ejemplo de uso:
Esto devolverá:
Respuesta del servidor DNS: Incluyendo direcciones IP asociadas al dominio.
Tiempo de respuesta.
Servidor DNS que ha respondido.
Detalles adicionales como el TTL (Tiempo de vida) de los registros, información sobre la pregunta, etc.
Diferencias entre dig
y host
:
dig
y host
:dig
:Uso: Es la herramienta más detallada y avanzada de las tres. Se utiliza principalmente para depuración avanzada y análisis de respuestas DNS.
Detalles: Muestra una respuesta exhaustiva con toda la información que un servidor DNS devuelve, incluyendo las secciones de encabezado, pregunta, respuesta, autoridad, y adicional.
Flexibilidad: Soporta una variedad de opciones avanzadas y diferentes tipos de consultas, como registros de DNS específicos (A, MX, NS, etc.).
host
:Uso: Es una herramienta más simple y amigable en comparación con
dig
. Está diseñada específicamente para resolver nombres de dominio.Detalles: Muestra solo la información esencial, como la dirección IP asociada al dominio o los registros solicitados.
Flexibilidad: Tiene menos opciones de configuración que
dig
y no muestra tantos detalles.Sintaxis: Más sencilla de usar para consultas rápidas, pero menos flexible para depuración avanzada.
Ejemplo:
Salida típica:
Ataques a DNS
A continuación te dejo una infografia sobre tipos de ataques que se producen sobre DNS
DNSSEC
DNSSEC (Domain Name System Security Extensions) es una serie de extensiones al protocolo DNS que añaden seguridad a las consultas DNS, asegurando la autenticidad y la integridad de las respuestas. Su principal propósito es proteger contra ataques como la suplantación o el envenenamiento de caché DNS (DNS cache poisoning), asegurando que las respuestas provienen de una fuente autorizada y no han sido alteradas durante el tránsito. Este ofrece:
Autenticidad: DNSSEC asegura que la respuesta a una consulta DNS proviene del servidor autorizado para el dominio solicitado.
Integridad: Garantiza que la respuesta no ha sido modificada en el camino (por ejemplo, mediante un ataque de man-in-the-middle o envenenamiento de caché).
No encriptación: DNSSEC no encripta los datos DNS, simplemente asegura que los datos no han sido alterados. La encriptación de las consultas DNS puede lograrse con protocolos como DNS sobre HTTPS (DoH) o DNS sobre TLS (DoT).
¿Cómo funciona DNSSEC?
DNSSEC utiliza firmas digitales y clave pública para verificar que las respuestas de DNS no han sido modificadas:
Firma digital: Cada conjunto de registros DNS (como los registros A, MX, NS, etc.) es firmado digitalmente por el servidor autoritativo usando una clave privada.
Clave pública: La clave pública correspondiente es publicada junto con los registros DNS en lo que se llama un registro DNSKEY. Los resolvers DNS que soportan DNSSEC utilizan esta clave pública para verificar la firma digital.
Cadena de confianza: La clave pública para un dominio puede ser verificada mediante una cadena de confianza que comienza en la zona raíz del DNS. Esta cadena de confianza permite validar que una clave pública específica es legítima y pertenece a la entidad autorizada del dominio. Cada nivel en el DNS tiene una firma, hasta llegar a la clave raíz, que es conocida y confiable.
Registros adicionales: DNSSEC introduce nuevos tipos de registros DNS:
DNSKEY: Contiene la clave pública que se usa para verificar las firmas.
RRSIG: Contiene la firma digital de un conjunto de registros DNS.
DS: Indica el hash de la clave pública del siguiente nivel en la jerarquía DNS.
NSEC/NSEC3: Se utiliza para negar la existencia de registros de forma autenticada (previniendo ataques como "zone-walking").
Funcionamiento básico:
Consulta inicial: Cuando un cliente (resolver DNS) que soporta DNSSEC hace una consulta, obtiene no solo los registros solicitados (por ejemplo, un registro A para una dirección IP), sino también la firma digital de estos registros (RRSIG).
Verificación: El resolver utiliza la clave pública almacenada en el registro DNSKEY para verificar la firma digital de los registros recibidos. Si la firma es válida, el resolver acepta la respuesta como legítima.
Cadena de confianza: Si el resolver confía en la clave pública de la zona raíz del DNS, puede seguir la cadena de confianza para verificar cualquier dominio que utilice DNSSEC, desde la zona raíz, pasando por los TLDs (como
.com
,.org
), hasta el dominio final.
DNSSEC en Linux
En Linux, DNSSEC puede configurarse y utilizarse en conjunto con un resolver DNS compatible, como BIND, Unbound, o systemd-resolved (dependiendo de la distribución), en nuestro caso usamos bind9 por lo que para configurar BIND para usar DNSSEC, hay que asegurarse de que se está validando la cadena de confianza.
Configuración en /etc/named.conf
para habilitar DNSSEC:
dnssec-enable yes: Habilita el uso de DNSSEC.
dnssec-validation auto: Habilita la validación automática de las firmas DNSSEC.
En esta configuración, el servidor descargará las claves necesarias (como la clave pública de la raíz) automáticamente.
Verificación de DNSSEC con dig
dig
Puedes verificar si un dominio utiliza DNSSEC usando el comando dig
. Para ello, realiza una consulta y busca los registros relacionados con DNSSEC (como RRSIG y DNSKEY):
En la respuesta, verás información adicional sobre los registros RRSIG, que contienen las firmas digitales.
Ventajas y Limitaciones de DNSSEC:
Ventajas:
Protección contra ataques de envenenamiento de caché: DNSSEC asegura que los registros DNS no sean alterados durante la consulta.
Autenticación del origen de los datos: Los clientes pueden estar seguros de que los datos provienen del servidor autorizado.
Limitaciones:
No cifra las consultas: DNSSEC no protege contra la interceptación de consultas DNS. Si necesitas encriptar las consultas, debes utilizar DoH (DNS sobre HTTPS) o DoT (DNS sobre TLS).
Complejidad: La implementación de DNSSEC puede ser complicada, especialmente en grandes infraestructuras.
Adopción limitada: Aunque ha ganado popularidad, no todos los dominios y servidores soportan DNSSEC aún.
Protocolo y registros SPF
Referencias:
Última actualización