• Tecnología
  • Equipo eléctrico
  • Industria de materiales
  • vida digital
  • política de privacidad
  • oh nombre
Localización: Hogar / Tecnología / Comprensión del DNS: anatomía de un archivo de zona BIND

Comprensión del DNS: anatomía de un archivo de zona BIND

techserving |
4127

Agrandar

/

¿Qué tiene que ver este flujo de dígitos binarios con el DNS? Nada, en realidad, ¡pero buena suerte para encontrar una foto bonita en algún lugar que sí lo haga!

Santo Heston

comentarios del lector

121

con la participación de 76 carteles, incluido el autor de la historia

Comparte esta historia

Compartir en Facebook

Compartir en Twitter

Compartir en Reddit

Si desea ser un administrador de sistemas o de red de cualquier tipo, existe una tecnología fundamental que realmente necesita comprender: DNS, el sistema de nombres de dominio. Hubo un tiempo en el que un administrador de sistemas sin aspiraciones de administrar servicios accesibles por Internet podría haber sobrevivido sin comprender el DNS, pero ese tiempo ya pasó.

No puede aprender todo lo que hay que saber sobre DNS en un solo artículo. Pero eso no es lo que buscamos hacer hoy; en cambio, queremos brindarle una guía clara y concisa sobre la estructura y el significado de la parte más importante del Sistema de Nombres de Dominio: un archivo de zona, como se ve en BIND, el Demonio de Nombres de Internet de Berkeley.

Archivo de zona de muestra

Agrandar

/

Este archivo de zona de muestra no contiene todos los tipos de registro posibles, pero es un buen comienzo.

Jim Salter

Origen y TTL

Arriba, tenemos un ejemplo pequeño pero completo de un archivo de zona típico; de hecho, es una versión anónima de un archivo de zona de producción en un dominio que administro. Repasemos esto línea por línea.

$ ORIGEN tld. $ TTL 5 millones

Siempre que vea un

$ ORIGEN

línea en un archivo de zona, este es un atajo que le permite a BIND saber que cualquier referencia de nombre de host no terminada que sigue a esa línea debe suponerse que termina en el argumento siguiente

$ ORIGEN

. En este caso, eso es

.tld

—El dominio ficticio de nivel superior para

ejemplo.tld

.

La siguiente línea

$ TTL 5 millones

, declara que las siguientes líneas tendrán un tiempo de vida de cinco minutos. Este valor relativamente corto significa que los solucionadores de DNS remotos solo deben almacenar en caché los registros recuperados de esta zona durante cinco minutos antes de volver a solicitarlos. Si está relativamente seguro de que su DNS para un dominio determinado no cambiará con mucha frecuencia, podría considerar aumentar ese valor para reducir la cantidad de veces que los hosts remotos deben consultar su servidor de nombres, pero tenga en cuenta que un TTL más largo también significa períodos de inactividad más prolongados, cuando debe realizar un cambio en su DNS (o realizar un cambio que lo rompa accidentalmente).

Ambos

$ ORIGEN

y

$ TTL

se pueden definir varias veces en la misma zona; cada vez que los redefine, cambia su valor para cualquier línea debajo de los nuevos valores en el mismo archivo de zona.

Registro SOA

ejemplo EN SOA ns1.example.tld. hostmaster.example.tld. (90; serial 4h; actualizar 15m; reintentar 8h; expirar 4m); TTL de almacenamiento en caché negativo

El primer registro real en nuestro archivo de zona de muestra, o en cualquier archivo de zona normal, es el registro SOA, que nos indica el inicio de autoridad para el dominio. También es fácilmente el tipo de registro más confuso de todo el sistema DNS.

Para cualquier listado de registros, incluido este registro SOA, el primer argumento es el nombre de host al que se aplica el registro; en este caso,

ejemplo

. Recuerda cómo nos preparamos

$ ORIGEN tld

en la primera línea del archivo de zona? Eso significa que este nombre de host no terminado

ejemplo

se expande a

ejemplo.tld

—Por tanto, estamos definiendo la SOA para el FQDN (nombre de dominio completo)

ejemplo.tld.

Nos referimos a este nombre de host

ejemplo

como "sin terminar" porque no termina en un punto. Si quisiéramos pasar por alto el

$ ORIGEN

establecer y hacer referencia a un FQDN directamente, lo terminaríamos con un punto final, por ejemplo,

ejemplo.tld.

sería el FQDN aquí,

con

el punto final.

El siguiente argumento que vemos es

EN

, abreviatura de "Internet". Esta es la clase de récord. Hay otras clases de registros DNS, pero puede seguir fácilmente toda su carrera sin ver una de ellas (como

CH

, for Chaos) en producción. La clase de registro es opcional; si se omite, BIND asumirá que el registro que se especifica es de clase

EN

. Nosotros recomendamos

no

omitiéndolo, sin embargo, no sea que algo cambie y todos sus archivos de zona se rompan repentinamente después de una actualización de BIND.

Los siguientes dos argumentos son FQDN; al menos, lo parecen. El primer FQDN es realmente un FQDN, y debería ser el FQDN del servidor de nombres principal para el dominio en sí; en este caso,

ns1.example.tld.

Tenga en cuenta que usted

pueden

use nombres de host no terminados aquí; por ejemplo, podríamos haber usado

ns1.example

para este argumento, que se habría expandido a

ns1.example.tld.

gracias a nuestro

$ ORIGEN .tld

línea, pero probablemente sea mejor ser explícito aquí.

El segundo FQDN,

hostmaster.example.tld.

, en realidad no es un FQDN. En cambio, es una forma perversa de reescribir una dirección de correo electrónico.

@

es un carácter reservado en los archivos de zona, y el BIND original usa la primera sección de este "FQDN" como la parte de usuario de una dirección de correo electrónico; por lo tanto, esto se traduciría en la dirección

hostmaster@example.tld

. Es

increíblemente

Es común ver esto arruinado en archivos de zona de la vida real; afortunadamente, no importa mucho. No conocemos literalmente a nadie que realmente use esta función de una zona DNS para contactar a alguien.

Continuando, tenemos

de serie

,

actualizar

,

rever

,

expirar

, y

TTL negativo

para la zona entre paréntesis. Tenga en cuenta que los comentarios que ve aquí etiquetándolos no son obligatorios y, en la vida real, rara vez los verá. Preferimos encarecidamente poner estos comentarios en los archivos de la zona de producción para que sea más fácil leerlos, ¡pero a BIND no le importa!

de serie

: Este es un número de serie simple para el archivo de zona, que debe incrementarse cada vez que se cambia el contenido de la zona. Si no actualiza la serie del archivo de la zona, sus cambios en la zona no serán recogidos por los solucionadores de DNS que hayan almacenado previamente en caché los registros de su zona. Este solía ser un formato AAMMDDnn en el pasado, pero ese formato ya no es necesario o, en algunos casos, incluso es compatible. Simplemente inicie sus zonas con serial

1

, incremento a

2

la próxima vez que realice un cambio en la zona, y así sucesivamente.

actualizar

—Después de este período de tiempo, los servidores de nombres secundarios deben consultar al servidor de nombres primario para este registro SOA, para detectar cambios en el número de serie. Si el número de serie se ha incrementado, todos los registros almacenados en caché deben invalidarse y recuperarse nuevamente del servidor de nombres principal.

rever

—Si el servidor de nombres principal no responde a una solicitud SOA, un servidor de nombres secundario debe esperar tanto tiempo antes de intentar consultar de nuevo el servidor de nombres principal.

expirar

—Si el servidor de nombres primario no ha respondido a la solicitud SOA de un servidor de nombres secundario durante este período de tiempo, el servidor de nombres secundario debe dejar de ofrecer la resolución de DNS para el dominio por completo.

TTL de almacenamiento en caché negativo

—Esto controla cuánto tiempo debe almacenarse en caché una respuesta "negativa", por ejemplo, "No tengo el registro que estás pidiendo".

Anuncio publicitario

Una de las áreas más comunes de confusión en el registro SOA es qué efecto

actualizar

,

rever

, y

expirar

los argumentos tienen. Estos argumentos no afectan en absoluto a los resolutores de DNS, solo a los servidores de nombres autorizados secundarios para el dominio. Si no tiene uno o más servidores de nombres secundarios para su dominio, que usan la replicación BIND para recuperar actualizaciones del primario, estos argumentos no tendrán ningún efecto.

Una nota final: las versiones anteriores de BIND requerían que todos estos tiempos fueran en segundos ... incluso cuando el intervalo de tiempo real estaba en días o semanas. BIND9, lanzado hace casi 20 años, en octubre de 2000, admite sufijos de tiempo legibles por humanos como "m" para minutos, "h" para horas y "d" para días.

Por favor

utilice estos sufijos legibles por humanos al escribir archivos de zona; ¡nadie debería tener que usar una calculadora para darse cuenta de que 86,400 segundos es un día!

Registros NS

IN NS ns1.example.tld.IN NS ns2.example.tld.

En estos dos registros, definimos los nombres de host, que son servidores de nombres autorizados para nuestra zona. Una vez más, hemos utilizado FQDN terminados en puntos para estos registros. Una vez más, nosotros

podría

han utilizado nombres de host no terminados

ns1.example

y

ns2.example

—Y confió en nuestro

$ ORIGEN .tld

para expandirlos. Sin embargo, si lo hiciera, la zona sería más confusa y difícil de leer.

Tenga en cuenta que el registro NS especifica

nombres de host

, no direcciones IP. Esta es una fuente común de confusión para los principiantes en DNS, y es importante hacerlo bien. usted

no poder

especifique una dirección IP simple como servidor de nombres para un dominio; es absolutamente necesario especificar un nombre de host aquí.

Por último, tenga en cuenta que no hemos especificado el nombre de dominio en ninguna línea; esto se debe a que lo hemos heredado del

SOA

grabar arriba. Empezamos esa línea con

ejemplo

, que se expande a

ejemplo.tld

. Como no hemos especificado otro nombre de host, estos nuevos

NS

Los registros también se aplican a ese nombre de host de forma predeterminada.

En el mundo real, también puede ver archivos de zona con

$ ORIGIN ejemplo.tld.

, y comenzando la SOA y posiblemente otras líneas con el carácter reservado especial

@

. Cuando veas

@

como un nombre de host en un archivo de zona, eso solo significa que está usando el

$ ORIGEN

sin más calificativos.

Registro (s) MX

EN MX 10 mail.example.tld.

En este dominio simple, tenemos un solo servidor de correo, y es

mail.example.tld.

El registro MX simplemente le dice a cualquiera que quiera enviar un correo electrónico a cualquier dirección en

ejemplo.tld

para realizar su conexión SMTP al nombre de host especificado en este registro.

El argumento anterior:

10

en este caso, es la prioridad numérica del servidor de correo en este registro específico. Los números más bajos significan una prioridad más alta. Cuando hay varios servidores SMTP disponibles para un dominio, verá varios

MX

registros también, cada uno con una prioridad diferente. En teoría, los servidores de correo de mayor prioridad siempre deben probarse primero, y los servidores de correo de menor prioridad solo deben probarse si falla el servidor de mayor prioridad.

Los servidores SMTP que se comportan bien siguen este protocolo, pero los spammers tienden a apuntar deliberadamente a los servidores de correo de menor prioridad en primer lugar, basándose en la teoría de que los servidores de alta prioridad pueden ser puertas de enlace anti-spam, y los servidores de menor prioridad pueden ser los desnudos. , servidor final sin filtrar. Los spammers apestan.

Un registro (s)

EN 127.0.0.1

Los registros A son la parte de un archivo de zona que realmente hace lo que la mayoría de la gente piensa que hace el DNS: tra

ducen un nombre de host a una dirección IPv4 simple. En este caso, este es solo un archivo de muestra, y nuestro

A

grabar para

ejemplo.tld

simplemente se resuelve en localhost, según el mismo principio de que los números de teléfono en las películas siempre comienzan con el intercambio

555

. En la vida real, por supuesto, ingresaría la dirección IP del servidor que esperaba que respondiera cuando

ping example.tld

, apunte un navegador web a

https: //example.tld/

, Etcétera.

En este archivo de zona simple, solo tenemos una

A

grabar para

ejemplo.tld

. En la vida real, puede encontrar varios; podría haber varios servidores de puerta de enlace capaces de responder a las solicitudes web de

https: //example.tld/

; y si es así, cada uno obtendría su propio récord A en su propia línea.

Registro (s) TXT

IN TXT "v = spf1 a mx a: mail.example.tld a: www.example.tld? All"

Esta

TXT

, o registro de texto, todavía se encuentra en la sección principal de nuestro archivo de zona, bajo el nombre de host

ejemplo.tld

. Entonces su alcance es todo

ejemplo.tld

dominio. Puedes poner casi cualquier cosa en un

TXT

registro; este específico es un

SPF

registro, formateado para dar información a los servidores de correo sobre qué máquinas están autorizadas a emitir correo en nombre de

ejemplo.tld

.

En este caso, estamos diciendo que estamos usando la versión de formato SPF1. Luego informamos a cualquiera que consulte este registro que cualquier

A

grabar para

ejemplo.tld

está autorizado a enviar correo en su nombre, al igual que cualquier

MX

para el dominio, y finalmente que las direcciones IP asociadas con el

A

registros para

mail.example.tld

y

www.example.tld

están autorizados a enviar correo. Finalmente,

?todos

dice que si cualquier otra máquina dice que quiere enviar correo desde alguna dirección en

ejemplo.tld

, debería estar permitido ... pero debería examinarse más de cerca que los hosts específicamente autorizados.

Nombres de host, subdominios y CNAME debajo de example.tld

$ ORIGIN example.tld.ns1 IN A 127.0.0.2ns2 IN A 127.0.0.3www IN CNAME example.tld.mail IN AAAA :: 1mail IN A 127.0.0.4

Ahora que hemos definido todo lo que necesitamos para el dominio, podemos comenzar a agregar registros para cualquier nombre de host y subdominio.

bajo

ejemplo.tld

sí mismo. Lo primero que hacemos aquí es cambiar nuestro

$ ORIGEN

para

ejemplo.tld.

Nuevamente, observe el último punto final: si lo olvida, las cosas se pondrán realmente extrañas y se rasgará el cabello preguntándose por qué ninguno de sus registros se resuelve correctamente.

Vemos

A

registros aquí para

ns1

,

ns2

, y

correo

. Estas

A

Los registros funcionan de la misma manera que los

A

record para el dominio mismo, le estamos diciendo a BIND a qué dirección IP resolver las solicitudes para ese nombre de host.

También tenemos un

AAAA

grabar para

mail.example.tld.

-

AAAA

los registros son como

A

registros, pero son para resolver IPv6 en lugar de IPv4. Una vez más, hemos elegido en nuestro ejemplo utilizar una dirección de host local. Necesitarás estar familiarizado con

AAAA

registros si espera configurar su propio servidor de correo: ¡Google dejó de estar dispuesto a hablar con servidores de correo sin que el DNS IPv6 funcionara completamente hace unos años!

Anuncio publicitario

El último tipo de registro que vemos aquí es

CNAME

, abreviatura de Canonical Name. Este es un alias: le permite decirle a BIND que siempre resuelva las solicitudes de

CNAME

d host utilizando el registro A o AAAA especificado en el argumento de destino. En este caso,

www EN CNAME example.tld.

significa que la dirección IP para

ejemplo.tld

sí mismo también debe entregarse si alguien pide

www.example.tld.

CNAME

Los discos son útiles, pero son un poco extravagantes. Vale la pena recordar que cada nivel de

CNAME

necesita otra búsqueda de DNS; en este caso, una máquina remota que solicitó resolver

www.example.tld

se le diría "por favor mira hacia arriba

ejemplo.tld.

para encontrar la respuesta ", y luego tendría que emitir un

separar

Solicitud de DNS para el

A

registro asociado con

ejemplo.tld.

Si usted tiene

CNAME

s apuntando a

CNAME

s apuntando a

CNAME

s, introducirá una latencia innecesaria en las solicitudes de sus recursos y su dominio parecerá "lento" y "retrasado" para sus usuarios.

Hay más limitaciones en

CNAME

registros. Recuerda como te dijimos que

MX

y

NS

los registros deben apuntar a nombres de host, no a direcciones IP sin procesar? Más específicamente, deben apuntar directamente a

A

registros, no a

CNAME

registros. Si intentas configurar

MX mail.example.tld.

seguido por

mail.example.tld. CNAME example.tld.

, su archivo de zona se romperá y

MX

los intentos de búsqueda devolverán errores.

Herramientas del oficio

Si está administrando su propio DNS, deberá dominar el uso de herramientas de línea de comandos para consultar su servidor DNS directamente y ver cómo responde a las solicitudes; es difícil estar seguro de si el problema es el DNS o alguna otra cosa con solo poniendo

https: //example.tld/

en un navegador y ver qué sucede.

cavar

you @ box: ~ $ dig @ 127.0.0.1 NS example.tld; << >> DiG 9.16.1-Ubuntu << >> NS example.tld ;; opciones globales: + cmd ;; Tengo respuesta: ;; - >> ENCABEZADO <

Si tiene acceso al subsistema Linux, Mac o Windows para Linux, la mejor herramienta de línea de comandos es

cavar

. Utilizando

cavar

es tan simple como especificar un servidor para consultar, el tipo de registro que desea buscar y el FQDN al que debe estar asociado.

En el ejemplo anterior, le preguntamos al servidor DNS en

127.0.0.1

para mostrarnos a todos

NS

registros asociados con

ejemplo.tld

. Además de las respuestas que queríamos, obtuvimos un montón de información de diagnóstico: el servidor DNS que consultamos no devolvió un

ERROR

cuando se le pregunta, dice que tiene autoridad para el dominio en cuestión, y así sucesivamente.

También puede suministrar un

+ corto

argumento si quieres

cavar

para simplemente callarme y darle la respuesta que está buscando sin todos los diagnósticos detallados:

you @ box: ~ $ dig + short @ 127.0.0.1 NS example.tldns1.example.tld.ns2.example.tld.

Sin embargo, tenga en cuenta que si no hay respuestas disponibles para un

+ corto

consulta, por ejemplo, si escribe el nombre de dominio, no obtendrá ninguna respuesta, incluso si el servidor DNS consultado arrojó un error.

you @ box: ~ $ dig + short @ 127.0.0.1 NS example.tmdyou@box: ~ $

Si quieres averiguar

por qué

no obtuvo una respuesta, tendrá que perder el

+ corto

argumento para averiguarlo.

nslookup

Si no tiene acceso a

cavar

, generalmente puede arreglárselas con

nslookup

. Por lo general, esta es una solución semi-maldita para los usuarios que se sientan en una caja de Windows sin acceso al Subsistema de Windows para Linux, cygwin o alguna otra forma de obtener acceso a herramientas más avanzadas que las que proporciona la CLI de Windows.

nslookup

normalmente se invoca sin argumentos y se consulta en modo interactivo. Aquí hay una sesión de muestra:

C: \> nslookup> servidor 127.0.0.1 Servidor predeterminado: 127.0.0.1 Dirección: 127.0.0.1 # 53> ejemplo.tld Servidor: 127.0.0.1 Dirección: 127.0.0.1 # 53 Respuesta no autorizada: Nombre: ejemplo.tld Dirección: 127.0. 0,1

Configurando

servidor 127.0.0.1

, especificamos a

nslookup

para utilizar esa máquina como servidor DNS para realizar consultas. No tiene que especificar esto; si no lo haces

nslookup

utilizará lo que sea que utilice el sistema de resolución de DNS predeterminado en su máquina.

Después de configurar opcionalmente el

servidor

, puede escribir un nombre de host desnudo en

nslookup

indicador interactivo, y devolverá cualquier

A

o

AAAA

registros que puede encontrar para ese nombre de host.

Si desea consultar el servidor remoto por un tipo diferente de registro, deberá usar un

tipo de conjunto

mando.

> set type = ns> example.tldServer: 127.0.0.1 Dirección: 127.0.0.1 # 53 Respuesta no autorizada: example.tld nameserver = ns1.example.tld.example.tld nameserver = ns2.example.tld Las respuestas autoritativas pueden ser Encontrado en:> set type = mx> example.tldServer: 127.0.0.1 Dirección: 127.0.0.1 # 53 Respuesta no autorizada: example.tld mail exchangeger = 10 mail.example.tld Las respuestas autoritativas se pueden encontrar en: example.tld nameserver = ns2.example.tld.example.tld nameserver = ns1.example.tld.mail.example.tld dirección de Internet = 127.0.0.4> salir

En los ejemplos anteriores, usamos

tipo de conjunto = ns

y

tipo de conjunto = mx

para consultar el servidor DNS remoto para

NS

y

MX

registros para

ejemplo.tld

. Funciona, y obtienes tus respuestas ... pero la sintaxis es complicada, hay menos información de diagnóstico disponible, es mucho menos programable, y si eres como nosotros, probablemente maldecirás lo anticuado una o dos veces antes que tú. ya terminaste.

La forma correcta de salir de

nslookup

El modo interactivo es el comando

Salida

. Con suerte, nunca necesitará buscar información sobre un dominio de nivel superior también denominado

Salida

—O si lo hace, tendrá una herramienta mejor disponible que

nslookup

Cuando tu lo hagas.

Conclusiones

Con suerte, ha aprendido algo valioso hoy sobre cómo funciona el DNS y cómo se almacena su información. Aunque BIND no es la única plataforma de servidor DNS que existe, en particular, los administradores de Windows deberán trabajar con Active Directory DNS, las lecciones aprendidas aquí se aplican casi por igual a todas las plataformas y aplicaciones.

Aunque el formato de almacenamiento puede cambiar algo de un servidor a otro, como un controlador de dominio de Active Directory que literalmente almacena zonas dentro de Active Directory mismo, en lugar de un archivo de texto sin formato, los tipos de registro son universales y el formato al menos casi universal.

Si es un administrador de sistemas en ciernes o un entusiasta que está interesado en ejecutar su propio servidor DNS, le recomiendo que lo haga y utilice la plataforma original cuando lo haga; BIND en Linux o BSD. La carga del sistema de ejecutar un servidor de nombres es casi inexistente en cualquier escala que no sea verdaderamente masiva; una caja Digital Ocean o Linode de $ 5 puede realizar el trabajo perfectamente.

Además de la gran alegría de aprender a administrar estas cosas, también puede encontrar que valora la capacidad de establecer sus TTL absurdamente cortos: la mayoría de los servidores DNS administrados no permiten un TTL de menos de 30 m, y la mayoría intentará predeterminar a TTL de hasta una semana. Esto está bien y es excelente para una zona DNS, que ya está configurada correctamente y no necesita cambiar ... pero si su dirección IP cambia y su DNS necesita cambiar junto con ella, un TTL de cinco minutos es muy, algo muy bueno para tener.