Validador de archivos de zona DNS
Un archivo de zona parece una tabla y se comporta como un programa. El nombre del propietario de un registro puede heredarse de la línea anterior solo porque la línea empieza con un espacio; un nombre sin punto final recibe el origen actual detrás, de modo que `www IN CNAME example.com` se convierte en silencio en example.com.example.com.; una directiva $ORIGIN o $TTL a mitad del archivo cambia el significado de todo lo que viene debajo; y un registro repartido en varias líneas dentro de paréntesis es un solo registro por mucho que se sangre. Este validador analiza el archivo tal como lo define la sección 5 del RFC 1035 — cadenas entrecomilladas, comentarios, escapes con barra invertida, continuaciones entre paréntesis, las unidades de TTL de BIND 8 y la regla de herencia del propietario — y después te enseña la zona que el archivo describe realmente: cada registro con el propietario completo, el TTL que un servidor serviría de verdad y un recuento por tipo. Además del análisis ejecuta las comprobaciones que un analizador no tiene motivo para hacer. Señala un nombre escrito sin punto final al que por tanto se le añadirá el origen; un CNAME que comparte nombre con cualquier otro registro, algo que el RFC 1034 prohíbe y que la mayoría de servidores se niegan a cargar; una cadena de CNAME que se muerde la cola; un destino de MX, NS o CNAME dentro de la zona sin ningún registro de dirección detrás; un TTL de cero; un registro duplicado; un nombre fuera del origen, que el cargador descarta sin decir nada; y un SOA cuyo serial no tiene forma de fecha o cuyo TTL de caché negativa mantendría una errata viva durante días. Cada hallazgo nombra la línea de la que procede, igual que cada error de análisis, junto con la línea misma. Lo que no puede decirte es si la zona es cierta. Nunca consulta la red, así que no sabe si la dirección que diste a un host es la que ese host tiene, si el servidor al que delegas responde de verdad, o si el TXT que pegaste coincide con el que tu proveedor espera. Además revisa un archivo, no una zona en marcha: un registro servido desde una base de datos, un comodín expandido en el momento de la consulta y un CNAME que vive en otra zona quedan fuera de su vista. Para las respuestas en vivo usa una herramienta de consulta DNS; usa esta antes de cargar el archivo, cuando un punto que falta todavía no cuesta nada.
Cada registro se muestra con el nombre del propietario completo y con el TTL que el servidor serviría de verdad.
Registros
14
Nombres
7
Tipos
8
Hallazgos
5
$ORIGIN al final del archivo
example.com.
TTL predeterminado
3600 (de $TTL)
Servidor de nombres primario
ns1.example.com.
El MNAME: el maestro del que transfiere un secundario y el servidor que envía los NOTIFY.
Buzón responsable
hostmaster@example.com
El RNAME, escrito como nombre de dominio; la primera etiqueta es la parte local de la dirección.
Serial
2026090301
Un secundario solo transfiere la zona cuando este número sube, comparado como serial de 32 bits.
Refresh
7200 (2h)
Cada cuánto vuelve a comprobar el serial un secundario cuando no le llega un NOTIFY.
Retry
3600 (1h)
Cuánto espera un secundario antes de reintentar después de un refresco fallido.
Expire
1209600 (2w)
Pasado este tiempo sin una transferencia con éxito, el secundario deja de responder por la zona.
TTL de caché negativa
300 (5m)
Desde el RFC 2308 este campo limita cuánto se cachea una respuesta NXDOMAIN; ya no es el TTL por defecto de la zona.
- ErrorLínea 19Escrito sin punto final, así que se le añade el origenexample.com → example.com.example.com.
- ErrorLínea 20Escrito sin punto final, así que se le añade el origenshops.myprovider.net → shops.myprovider.net.example.com.
- AvisoLínea 19El destino está dentro de esta zona pero no tiene registro de direcciónCNAME → example.com.example.com.
- AvisoLínea 20El destino está dentro de esta zona pero no tiene registro de direcciónCNAME → shops.myprovider.net.example.com.
- AvisoLínea 21Un TTL de cero prohíbe cachear este registroold.example.com. A
| Propietario | TTL | Clase | Tipo | Datos |
|---|---|---|---|---|
| example.com. | 3600 | IN | SOA | ns1.example.com. hostmaster.example.com. 2026090301 7200 3600 1209600 300 |
| example.com. | 3600 | IN | NS | ns1.example.com. |
| example.com. | 3600 | IN | NS | ns2.example.com. |
| example.com. | 3600 | IN | A | 192.0.2.10 |
| example.com. | 3600 | IN | AAAA | 2001:db8::10 |
| example.com. | 3600 | IN | MX | 10 mail.example.com. |
| example.com. | 3600 | IN | TXT | "v=spf1 mx -all" |
| example.com. | 3600 | IN | CAA | 0 issue "letsencrypt.org" |
| ns1.example.com. | 3600 | IN | A | 192.0.2.1 |
| ns2.example.com. | 3600 | IN | A | 192.0.2.2 |
| mail.example.com. | 3600 | IN | A | 192.0.2.3 |
| www.example.com. | 3600 | IN | CNAME | example.com.example.com. |
| shop.example.com. | 3600 | IN | CNAME | shops.myprovider.net.example.com. |
| old.example.com. | 0 | IN | A | 192.0.2.9 |
Todo se ejecuta en tu navegador: el archivo nunca se sube y no se consulta nada por la red.
Cómo usar
- Pega el archivo de zona en el cuadro. Se queda en el navegador: no se sube nada ni se hace ninguna consulta.
- Deja vacía la casilla del origen si el archivo empieza por $ORIGIN. Si no, escribe ahí el nombre de la zona tal como lo nombra la configuración del servidor, porque el mismo archivo significa cosas distintas bajo orígenes distintos.
- Si el archivo no se analiza, lee el número de línea y la línea impresa debajo: el error se informa donde el analizador se rindió, que con una comilla suelta o un paréntesis sin cerrar puede ser una línea después del fallo.
- Revisa el panel del SOA: el buzón responsable se muestra como dirección de correo y cada temporizador aparece en segundos con su forma legible al lado.
- Recorre los hallazgos de arriba abajo — primero errores, luego avisos y después notas — y usa el número de línea de cada uno para volver al registro culpable.
Preguntas frecuentes
- ¿Por qué mi CNAME se convirtió en example.com.example.com.?
- Porque el destino no llevaba punto final. En un archivo maestro todo nombre es relativo al origen actual salvo que termine en punto, y el analizador no tiene forma de saber si "example.com" pretendía ser un nombre completo o un host llamado example.com dentro de tu zona. La regla se aplica a todos los campos de nombre, no solo al CNAME: los destinos de MX, NS y SRV y el servidor primario del SOA reciben el origen igual. La costumbre que lo evita es escribir con punto todo nombre que salga de tu zona y escribir los de dentro como etiquetas sueltas.
- El archivo no tiene $TTL. ¿Es un error?
- No necesariamente. El RFC 1035 no tenía la directiva $TTL; el RFC 2308 la añadió y la exigió, pero la mayoría de analizadores, dnspython incluido, siguen recurriendo al campo minimum del SOA para cualquier registro sin TTL propio, y si el SOA es el primer registro, su propio TTL también sale de su minimum. Un registro sin TTL que aparece antes del SOA y antes de cualquier $TTL sí es un error real, porque no hay nada de lo que heredar. Esta herramienta informa del recurso como nota y te dice qué valor acabó usándose.
- Dos registros con el mismo nombre y tipo tienen TTL distintos. ¿Cuál gana?
- Ninguno, en realidad. Todos los registros de un mismo nombre y tipo forman un único RRset, y un RRset se sirve con un solo TTL; cuando el archivo da varios, el cargador se queda con el más pequeño y no aparece ningún aviso en el log. Eso significa que un registro de 60 segundos junto a otro de 86400 del mismo nombre y tipo deja a los dos en 60 segundos, que suele ser lo contrario de lo que el autor quería. La herramienta muestra el TTL efectivo en la tabla y marca cada línea cuyo TTL escrito quedó anulado.
- ¿Por qué falta en la tabla un registro con un nombre fuera de la zona?
- Porque falta en la zona. Un cargador solo conserva los registros cuyo nombre de propietario está en el origen de la zona o por debajo; lo demás son datos fuera de zona, y se descartan en silencio en lugar de rechazarse. Así es como un registro PTR pegado en una zona directa, o un registro sobrante del origen anterior tras una línea $ORIGIN, desaparece sin que el archivo llegue a fallar. La herramienta lista cada nombre descartado como hallazgo para que la desaparición al menos se vea.
- ¿Puede un registro TXT superar los 255 caracteres?
- El registro sí; una sola cadena dentro de él no. Una character-string en DNS lleva una longitud de un octeto, así que 255 es el techo duro, y una cadena entrecomillada más larga es un error de sintaxis, no un recorte. La forma de escribir un valor largo de DKIM o SPF es con varios trozos entrecomillados en un mismo registro — "primera parte" "segunda parte" — que el servidor concatena sin nada en medio. Los resolutores entregan las piezas por separado a la aplicación, así que un valor partido en un punto arbitrario se reensambla bien, pero solo si las piezas están en orden.
- ¿Un archivo de zona válido significa que el DNS funcionará?
- No. Analizarlo demuestra la sintaxis, y las comprobaciones extra de aquí demuestran algo de coherencia interna, pero nada dentro de un archivo puede decirte que la zona padre delega en tus servidores de nombres, que esos servidores han cargado esta versión, que las direcciones son alcanzables o que el serial que subiste es de verdad mayor que el que ya tienen tus secundarios. La comparación de seriales, en particular, es aritmética de espacio de secuencia de 32 bits, así que un serial que "bajó" porque alguien escribió mal una fecha puede dejar a los secundarios atascados en la zona antigua hasta que el número dé la vuelta.
Herramientas relacionadas
Referencia de Registros DNS
Hoja de referencia buscable de tipos de registro DNS — A, AAAA, CNAME, MX, TXT, NS, SOA, PTR, SRV, CAA, DNSSEC, SVCB / HTTPS — con ejemplos.
Divisor de Registro TXT (Chunks de 255 Bytes)
Divide un registro TXT SPF, DKIM o DMARC largo en los chunks de 255 bytes que exige DNS — con salida BIND, zone genérico, Cloudflare o Route 53.
Generador y parser de registros DKIM
Construye o parsea un registro DNS TXT DKIM — pega tu clave pública, elige selector, tipo de clave, hash y flags, y obtén el registro troceado.
Generador de registros DNS CAA
Genera registros DNS CAA (Certificate Authority Authorization) para que solo las CAs que tú autorizas puedan emitir certificados TLS para tu dominio.
Inspector de bibliotecas estáticas .a
Lee un archivo .a en el navegador: miembros con tamaños y fechas, los símbolos que cada objeto define y necesita, y si el índice de símbolos está obsoleto.
Inspector de archivos TZif (zoneinfo)
Abre un archivo zoneinfo compilado en el navegador: cabecera, tipos de hora local, transiciones, segundos intercalares y el pie POSIX TZ.