Domain IP Lookup

Los registros que encontrarás en casi toda zona

ANombre de host a una dirección IPv4
AAAANombre de host a una dirección IPv6
CNAMENombre de host a otro nombre de host
MXDominio a sus servidores de correo, por prioridad
TXTDominio a texto arbitrario: SPF, DKIM, verificación
NSDominio a los servidores de nombres que responden por él
Fundamentos de DNS

Dentro de un mensaje DNS: indicadores, secciones y formato

5 min de lectura

Toda consulta DNS, desde un navegador que pide una dirección hasta un resolvedor que persigue una delegación, es un mensaje binario corto con un formato común. Rara vez se ven los bytes, pero herramientas como dig imprimen los campos de la cabecera como texto, y saber qué significan convierte esa salida de ruido en evidencia. El formato está especificado por la RFC 1035 desde 1987, que perfeccionó la RFC 883 de 1983, y desde entonces se ha ampliado, no sustituido.

La cabecera de 12 bytes

Todo mensaje empieza con los mismos 12 bytes: un ID de 16 bits, una palabra de 16 bits con indicadores y códigos, y cuatro contadores de 16 bits.

CampoTamañoSignificado
ID16 bitsLo elige el cliente y se copia en la respuesta, para que el cliente pueda emparejar las respuestas con las preguntas
QR1 bit0 para una consulta, 1 para una respuesta
Opcode4 bitsEl tipo de solicitud; 0 es una consulta estándar
AA1 bitRespuesta autoritativa: el servidor que responde es una autoridad para el nombre de la pregunta
TC1 bitTruncado: el mensaje era más largo de lo que permite el transporte
RD1 bitRecursión deseada: el cliente pide al servidor que haga toda la consulta
RA1 bitRecursión disponible: el servidor ofrece ese servicio
Z3 bitsReservado en la RFC 1035; DNSSEC aprovechó después dos de estos bits para AD y CD (RFC 2535, retomado en la RFC 4035)
RCODE4 bitsCódigo de respuesta: el resultado de la consulta
QDCOUNT, ANCOUNT, NSCOUNT, ARCOUNT16 bits cada unoCuántas entradas contienen las secciones de pregunta, de respuesta, de autoridad y adicional

Después de la cabecera vienen las cuatro secciones, en ese orden. La sección de pregunta repite lo que se preguntó, la sección de respuesta contiene los registros que la responden, la sección de autoridad señala los servidores de nombres responsables de la zona y la sección adicional lleva registros extra que el servidor espera que el cliente necesite a continuación, como las direcciones de esos servidores de nombres.

Conviene tratar AA con cuidado. Un resolvedor recursivo que responde desde su caché no es una autoridad para esos datos y no lo activa. En el diseño original, un servidor marca una respuesta como autoritativa cuando responde con datos de zona que posee, a diferencia de los datos en caché (Mockapetris y Dunlap, 1988). Ver aa en una respuesta de uno de los servidores de nombres de la propia zona es lo normal, salvo en una referencia a una zona hija, que no lo lleva ni siquiera cuando procede de un servidor autoritativo.

Cómo leer la línea de cabecera de dig

dig imprime la cabecera en dos líneas. Una respuesta típica tiene este aspecto:

La cabecera tal como la imprime dig
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6891
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

opcode y status son los campos Opcode y RCODE. La línea flags enumera los bits activados, aquí qr, rd y ra, que juntos significan: una respuesta, a una consulta que pidió recursión, de un servidor que la ofrece. Los cuatro contadores son los tamaños de las secciones. El ADDITIONAL: 1 suele ser el pseudorregistro EDNS del servidor, devuelto porque dig incluye uno en su consulta; no es una dirección adicional.

El estado es lo más rápido de leer. La RFC 1035 define seis códigos de respuesta.

CódigoNombreSignificado
0NOERRORLa consulta se procesó sin errores
1FORMERREl servidor no pudo interpretar la consulta
2SERVFAILEl servidor falló al procesar la consulta
3NXDOMAINEl nombre no existe; la RFC 1035 lo llama «Name Error» (error de nombre) y lo define para los servidores autoritativos
4NOTIMPEl servidor no admite ese tipo de consulta
5REFUSEDEl servidor se niega a responder por motivos de política

Un resultado frecuente no tiene código propio. Un nombre que existe pero no tiene ningún registro del tipo que pediste devuelve NOERROR sin registros de ese tipo en la sección de respuesta (aun así puede aparecer un CNAME), y la RFC 2308 lo llama NODATA. La diferencia importa al diagnosticar; consulta NXDOMAIN explicado y Timeout de DNS frente a SERVFAIL para saber qué hacer en cada caso.

Una consulta, byte a byte

Esta es una consulta completa del registro A de example.com en su forma clásica, sin EDNS, tal como la enviaría un cliente que pide recursión. Mide 29 bytes.

Una consulta DNS de example.com, tipo A, en hexadecimal
1a 2b 01 00 00 01 00 00 00 00 00 00 07 65 78 61 6d 70 6c 65 03 63 6f 6d 00 00 01 00 01
BytesSignificado
1a 2bID: un valor arbitrario elegido por el cliente
01 00Indicadores: solo está activado RD
00 01QDCOUNT: una pregunta
00 00 00 00 00 00ANCOUNT, NSCOUNT y ARCOUNT: todos a cero en una consulta
07 65 78 61 6d 70 6c 65Una etiqueta de longitud 7, seguida de las letras ASCII de «example»
03 63 6f 6dUna etiqueta de longitud 3, seguida de «com»
00La etiqueta raíz de longitud cero, que termina el nombre
00 01QTYPE 1: el registro A
00 01QCLASS 1: la clase Internet

Los mismos bytes viajan dentro de los transportes cifrados. En DNS sobre HTTPS (RFC 8484), por ejemplo, el mismo mensaje viaja como cuerpo en bruto de un POST HTTP o, en una solicitud GET, codificado en base64url dentro de un parámetro dns, y se aconseja a los clientes poner el ID a 0; consulta DNS sobre HTTPS y DNS sobre TLS explicados.

Nombres, límites y compresión

Un nombre es una secuencia de etiquetas, cada una precedida por su longitud, que termina en un byte cero. La RFC 1035 limita una etiqueta a 63 octetos y un nombre completo a 255. Como el byte de longitud de una etiqueta nunca supera 63, sus dos bits superiores son siempre cero, y eso dejó espacio para la compresión: cuando los dos bits superiores valen uno, ese byte y el siguiente forman un puntero, y los 14 bits restantes indican un desplazamiento desde el inicio del mensaje. En una respuesta, es muy habitual que el nombre de la respuesta sean los dos bytes c0 0c, un puntero al desplazamiento 12, donde el nombre de la pregunta empieza justo después de la cabecera. Todo programa DNS debe entender los punteros en los mensajes que recibe, aunque puede optar por no generarlos.

Por qué importaban los 512 bytes y qué los sustituyó

La RFC 1035 restringe los mensajes UDP a 512 bytes, sin contar las cabeceras IP y UDP. Un mensaje más largo se trunca y se activa el bit TC, que indica al cliente que reintente por TCP. Los diseñadores originales consideraron el límite del datagrama un acierto y no un problema: el rendimiento era mucho mejor que con circuitos TCP y no quedaban atados recursos del sistema operativo, aunque la decisión exigía estrategias cuidadosas de retransmisión (Mockapetris y Dunlap, 1988).

A medida que las respuestas crecieron con IPv6 y DNSSEC, el límite se quedó estrecho. EDNS(0), definido en la RFC 6891, permite que un cliente anuncie un tamaño de carga útil UDP mayor en un pseudorregistro OPT. La RFC sugiere 4096 octetos como punto de partida y, si eso falla, volver a un valor dentro de un intervalo de aproximadamente 1280 a 1410 bytes. Desde la RFC 7766, en 2016, el soporte de TCP es una parte obligatoria de una implementación DNS completa. Las respuestas UDP más grandes también tienen un coste de seguridad, porque hacen más rentables los ataques de reflexión; Ataques de amplificación DNS y resolvedores abiertos lo trata.

Idea clave

Lee primero la cabecera: QR indica si es consulta o respuesta, RCODE dice qué ocurrió, AA indica si la respuesta procede de una autoridad y TC indica que hay que reintentar por TCP.

Fuentes y lecturas complementarias

¿Necesitas comprobar las direcciones DNS públicas de un dominio? Usa la herramienta Domain IP Lookup.

Preguntas frecuentes

Lecturas relacionadas

Una consulta DNS recursiva, salto a salto

Navegador

quiere example.com

Resolvedor

tu ISP / 1.1.1.1

Raíz + TLD

¿quién gestiona .com?

Autoritativo

la respuesta real

Cada salto de la cadena es otra consulta DNS, y luego se guarda en caché

Fundamentos de DNS

Cómo funciona el DNS: de un nombre de dominio a una dirección IP

La guía telefónica de internet, rastreada de principio a fin: qué ocurre en los pocos milisegundos entre escribir un dominio y la llegada del primer paquete a un servidor.

3 min de lectura

Cuatro resultados, cuatro pasos siguientes distintos

NXDOMAINEl nombre no existe: nunca vale la pena reintentar
TIMEOUTNo llegó respuesta a tiempo: suele ser transitorio
SERVFAILEl servidor no pudo procesarla: a veces es transitorio
REFUSEDRechazada por política: rara vez un fallo, rara vez transitorio
Solución de problemas

Timeout de DNS frente a SERVFAIL: ¿en qué se diferencian?

Ambos parecen una consulta fallida, pero un timeout y un SERVFAIL apuntan a problemas distintos y exigen pasos siguientes diferentes.

3 min de lectura

Los registros que encontrarás en casi toda zona

ANombre de host a una dirección IPv4
AAAANombre de host a una dirección IPv6
CNAMENombre de host a otro nombre de host
MXDominio a sus servidores de correo, por prioridad
TXTDominio a texto arbitrario: SPF, DKIM, verificación
NSDominio a los servidores de nombres que responden por él
Fundamentos de DNS

Tipos de registros DNS explicados: una referencia completa

Una página de referencia para cada tipo de registro que merece la pena conocer: qué hace, qué aspecto tiene y el error que suele cometerse con él.

4 min de lectura