Si tengo los hosts example.com
y leaf.intermediate.example.com
en los registros DNS para example.com
, pero no tengo registros para intermediate.example.com
sí mismo, ¿eso causa un problema en algunas situaciones o es un mal estilo o etiqueta por alguna razón? Tengo servidores web configurados así y todo parece funcionar bien, pero solo quería verificar si hay algo que me falta.
27
Respuestas:
TL; DR: sí, deben existir subdominios intermedios, al menos cuando se consulta, según la definición del DNS; sin embargo, pueden no existir en el archivo de zona.
Una posible confusión para eliminar primero; Definición de "No terminal vacío"
Puede estar confundiendo dos cosas, como parece que también hay otras respuestas. Es decir, qué sucede cuando se consultan nombres en comparación con cómo configura su servidor de nombres y el contenido del archivo de zona.
El DNS es jerárquico. Para que exista cualquier nodo hoja, DEBEN existir todos los componentes que lo conducen, en el sentido de que si se consultan, el servidor de nombres autorizado responsable debe responder por ellos sin error.
Como se explica en RFC 8020 (que es solo una repetición de lo que siempre fue la regla, pero solo algunos proveedores de DNS necesitaban un recordatorio), si para cualquier consulta, un servidor de nombres autorizado responde NXDOMAIN (es decir: este registro de recursos no existe), entonces significa que cualquier etiqueta "debajo" de este recurso tampoco existe.
En su ejemplo, si una consulta de
intermediate.example.com
devolucionesNXDOMAIN
, entonces cualquier servidor de nombres recursivo adecuada responderá inmediatamenteNXDOMAIN
paraleaf.intermediate.example.com
porque no puede existir este disco si todas las etiquetas en que no existen como registros.Esto ya se dijo en el pasado en el RFC 4592 sobre comodines (que no están relacionados aquí):
Un ejemplo práctico con nombres de dominio .US
Tomemos un ejemplo funcional de un TLD con muchas etiquetas históricamente, es decir
.US
. Escogiendo cualquier ejemplo en línea, usémoslowww.teh.k12.ca.us
.Por supuesto, si consulta este nombre, o incluso
teh.k12.ca.us
puede recuperarA
registros. Aquí no hay nada concluyente para nuestro propósito (incluso hay un CNAME en el medio, pero eso no nos importa):Vamos a consultar ahora
k12.ca.us
(no estoy consultando el servidor de nombres autorizado de él, pero eso no cambia el resultado de hecho):¿Qué aprendemos de esta respuesta?
Primero, es un éxito porque el estado es
NOERROR
. Si hubiera sido otra cosa y específicamenteNXDOMAIN
entoncesteh.k12.ca.us
, tampocowww.teh.k12.ca.us
podría existir.En segundo lugar, la sección RESPUESTA está vacía. No hay
A
registros parak12.ca.us
. Esto no es un error, este tipo (A
) no existe para este registro, pero tal vez existan otros tipos de registro para este registro o este registro sea un ENT, también conocido como "Empty Non Terminal": está vacío, pero no es una hoja, hay cosas "debajo" de él (véase la definición en RFC 7719 ), como ya sabemos (pero normalmente la resolución es de arriba hacia abajo, así que llegaremos a este paso antes de pasar un nivel por debajo y no al contrario, como lo estamos haciendo aquí para la demostración propósito).Esta es la razón por la cual, como acceso directo, decimos que el código de estado es
NODATA
: este no es un código de estado real, solo significaNOERROR
+ sección de RESPUESTA vacía, lo que significa que no hay datos para este tipo de registro específico, pero puede haber otros.Puede repetir el mismo experimento para obtener el mismo resultado si consulta con la siguiente etiqueta "arriba", ese es el nombre
ca.us
.Resultados de las consultas frente al contenido del archivo de zona
¿Ahora de dónde puede venir la confusión? Creo que puede provenir de una falsa idea de que cualquier punto en un nombre DNS significa que hay una delegación. Esto es falso Dicho de otra manera, su
example.com
archivo de zona puede ser así, y es totalmente válido y funciona:Con dicho archivo de zona, al consultar este servidor de nombres obtendrá exactamente el comportamiento observado anteriormente: una consulta para
intermediate.example.com
regresaráNOERROR
con una respuesta vacía. No necesita crearlo específicamente en el archivo de zona (si no lo necesita por otras razones), el servidor de nombres autorizado se encargará de sintetizar las respuestas "intermedias", porque ve que necesita este no terminal vacío (y cualquier otros "intermedios" si hubiera habido otras etiquetas) como se ve el nombre de la hojaleaf.intermediate.example.com
.Tenga en cuenta que este es un caso generalizado en algunas áreas, pero es posible que no lo vea porque apunta a más registros de "infraestructura" a los que las personas no están expuestas:
in-addr.arp
oip6.arpa
, y específicamente la última. Tendrá registros como1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.a.1.d.e.1.6.8.0.0.0.0.0.0.2.6.2.ip6.arpa. 1h IN PTR text-lb.eqiad.wikimedia.org.
y obviamente no hay una delegación en cada punto, ni registros de recursos adjuntos en cada etiquetaSRV
registros, como_nicname._tcp.fr. 12h IN SRV 0 0 43 whois.nic.fr.
, un dominio puede tener muchos_proto._tcp.example.com
y_proto._udp.example.com
SRV
registros porque, por diseño, deben tener este formulario, pero al mismo tiempo_tcp.example.com
y_udp.example.com
permanecerán vacíos sin terminales porque nunca se usaron como registroswhatever._domainkey.example.com
, pero obviamente_domainkey.example.com
por sí solo nunca se usará, por lo que seguirá siendo un no terminal vacío. Esto es lo mismo paraTLSA
registros en DANE (ej .:)_25._tcp.somehost.example.com. TLSA 3 1 1 BASE64==
oURI
registros (ej ._ftp._tcp IN URI 10 1 "ftp://ftp1.example.com/public"
:)Comportamiento del servidor de nombres y generación de respuestas intermedias
¿Por qué el servidor de nombres sintetiza automáticamente tales respuestas intermedias? El algoritmo de resolución central para el DNS, como se detalla en la sección 4.3.2 del RFC 1034, es la razón de esto, permítanos tomarlo y resumirlo en nuestro caso al consultar el nombre del servidor de nombres autorizado
intermediate.example.com
(este es elQNAME
siguiente protocolo):El servidor de nombres encuentra la zona
example.com
como el ancestro más cercano de QNAME, por lo que podemos ir al paso 3.Ahora tenemos esto:
Podemos eliminar los casos byc, porque nuestro archivo de zona no tiene delegación (por lo tanto, nunca habrá una referencia a otros servidores de nombres, ningún caso b), ni comodines (por lo que no hay caso c).
Aquí solo tenemos que tratar el caso a.
Comenzamos a emparejar, etiqueta por etiqueta, en la zona. Entonces, incluso si teníamos un
sub.sub.sub.sub.sub.sub.sub.sub.example.com
nombre largo , en algún momento, llegamos al caso a: no encontramos una referencia, ni un comodín, pero terminamos con el nombre final para el que queríamos un resultado.Luego aplicamos el resto del contenido del caso a:
No es nuestro caso, nos saltamos eso.
Cualquiera que sea QTYPE elegimos (
A
,AAAA
,NS
, etc.) no tenemos RR paraintermediate.example.com
, ya que no aparece en el fichero de zona. Entonces la copia aquí está vacía. Ahora terminamos en el paso 6:No es relevante para nosotros aquí, por lo tanto, terminamos con éxito.
Esto explica exactamente el comportamiento observado: tales consultas volverán
NOERROR
pero tampoco datos.Ahora, puede preguntarse a sí mismo: "pero si uso cualquier nombre, como
another.example.com
entonces con el algoritmo anterior, debería obtener la misma respuesta (sin error)", pero las observaciones en su lugar informaríanNXDOMAIN
en ese caso.¿Por qué?
Debido a que todo el algoritmo como se explicó, comienza con esto:
Esto significa que el archivo de zona anterior se transforma en este árbol:
Entonces, al seguir el algoritmo, desde arriba, puede encontrar una ruta:
com > example > intermediate
(porque la rutacom > example > intermediate > leaf
existe) Peroanother.example.com
, después decom > example
no encontrar laanother
etiqueta en el árbol, como nodo secundario deexample
. Por lo tanto, caemos en parte de la opción c desde arriba:La etiqueta
*
no existe, y no seguimos aCNAME
, por lo tanto estamos en el caso:set an authoritative name error in the response and exit
akaNXDOMAIN
.Tenga en cuenta que todo lo anterior creó confusión en el pasado. Esto se recoge en algunos RFC. Vea, por ejemplo, este lugar inesperado (la alegría de que las especificaciones DNS sean tan impenetrables) que definen comodines: RFC 4592 "El papel de los comodines en el sistema de nombres de dominio" y, en particular, su sección 2.2 "Reglas de existencia", también citada en parte al comienzo de mi respuesta pero aquí está más completa:
Y luego la definición en la siguiente sección es el párrafo que cité al principio.
Tenga en cuenta que el RFC 8020 (en
NXDOMAIN
realidad se quiere decirNXDOMAIN
, que es si respondeNXDOMAIN
paraintermediate.example.com
, a continuación,leaf.intermediate.example.com
no puede existir) fue impuesto en parte debido a que varios proveedores de DNS no siguieron esta interpretación y que el caos creado, o no eran más que errores, véase por ejemplo éste corregido en 2013 en un código de servidor de nombres autorizado de código abierto: https://github.com/PowerDNS/pdns/issues/127Las personas necesitaban poner contramedidas específicas solo para ellos: eso no es un almacenamiento en caché agresivo
NXDOMAIN
porque para esos proveedores si llegaNXDOMAIN
a algún nodo, aún puede significar que obtiene algo más queNXDOMAIN
otro nodo debajo de él.Y esto hacía que la minimización de QNAME (RFC 7816) fuera imposible de obtener (consulte https://indico.dns-oarc.net/event/21/contributions/298/attachments/267/487/qname-min.pdf para obtener más detalles) , mientras se quería aumentar la privacidad. La existencia de no terminales vacíos en el caso de DNSSEC también creó problemas en el pasado, en torno al manejo de la no existencia (ver https://indico.dns-oarc.net/event/25/contributions/403/attachments/378/647 /AFNIC_OARC_Dallas.pdf si está interesado, pero realmente necesita una buena comprensión de DNSSEC antes).
Los siguientes dos mensajes dan un ejemplo de problemas que un proveedor tuvo que hacer cumplir adecuadamente esta regla en los no terminales vacíos, da una perspectiva de los problemas y por qué estamos allí:
fuente
Es posible que no entienda la respuesta de Khaled, pero la falta de registros intermedios no debería ser un problema con la resolución del nombre subzonificado. Tenga en cuenta que esta salida de excavación no proviene ni está dirigida a un servidor DNS autorizado para
teaparty.net
ninguna de sus subzonas:De hecho, deberías poder hacerlo
dig
tú mismo y obtener esa respuesta:teaparty.net
es un dominio real, bajo mi control, y realmente contiene eseA
registro. Puede verificar que no hay registros para ninguna de esas zonas entrevery
yteaparty.net
, y que no tiene ningún impacto en su resolución del nombre de host anterior.fuente
teaparty.net
los registros en un solo archivo de zona, por lo que se sintetizan registros vacíos para los dominios intermedios. ¿Alguien puede explicar qué pasaría siparents.teaparty.net
es una delegación y solovery.deep.host.with.no.immediate
tiene un registro en el archivo de zona de delegado?teaparty.net
es un subdominio delegado denet
; si el único registro A en su archivo de zona fueravery.deep...
, no importaría.Si está consultando directamente el servidor DNS autorizado, obtendrá respuestas sin problemas.
Sin embargo, no obtendrá una respuesta válida si realiza una consulta a través de otro servidor DNS que no tiene una memoria caché válida. La consulta
intermediate.example.com
dará como resultado unNXDOMAIN
error.fuente
NXDOMAIN
, debería generar unNOERROR
código y una sección de respuesta vacía.intermediate.example.com
si no se está utilizando para nada. Entonces, incluso si devuelve un error (no lo hace), ¿qué diferencia hace?NXDOMAIN
, lo conseguirásNOERROR
. Esa es la respuesta para un nodo que existe en la jerarquía de DNS, pero no tiene ningún registro del tipo solicitado.NS
registros, pero solicitaA
registros, obtendráNOERROR
una respuesta vacía.NXDOMAIN
paraintermediate.example.com
y luego entonces significa que no hay nada "abajo"leaf.intermediate.example.com
no puede existir. Algunos solucionadores recursivos agresivos pueden incluso almacenar eso en caché y deducir cosas por sí mismos.Para responder directamente a la pregunta, no, no necesita agregar registros para nombres intermedios que realmente no está utilizando, sin embargo, eso no significa que esos nombres no existan.
En cuanto a si estos nombres existen o no, esa es en realidad una pregunta completamente diferente para la que espero proporcionar una respuesta breve y bastante intuitiva.
Todo se reduce a que DNS es una estructura de árbol, donde cada etiqueta en un nombre de dominio es un nodo de árbol. Ej
www.example.com.
tiene las etiquetaswww
,example
,com
y `` (nodo raíz), que son los nodos del árbol que forman la trayectoria de todo el camino a la raíz.Lo que quizás hace que esta naturaleza fundamental de DNS no sea obvia es que casi siempre cuando se administran datos de DNS no se ve ningún árbol y generalmente no trabajamos directamente con los propios nodos del árbol, en su lugar, generalmente tenemos una lista aplanada de qué registro datos que deberían existir en diferentes nombres de dominio (de hecho, rutas de árbol, como se indicó anteriormente).
Lo que sucede cuando se usa esta lista aplanada es que el software del servidor DNS construye el árbol en función de los registros existentes, y si hay espacios entre los nodos que tienen registros (por ejemplo, hay registros para
foo.bar.example.com.
yexample.com.
nobar.example.com.
), estos simplemente se consideran árbol vacío. nodos Es decir, estos son nombres de dominio / nodos que de hecho existen, el árbol no está roto, estos nodos simplemente no tienen datos asociados.En consecuencia, si consulta uno de estos nodos vacíos, recibirá una
NODATA
respuesta (NOERROR
estado +SOA
en la sección de autoridad), diciendo que el tipo de registro solicitado no existía en este nodo. Si, en cambio, consulta algún nombre que en realidad no existe, recibirá unaNXDOMAIN
respuesta que dice que el nombre de dominio solicitado no existe en el árbol.Ahora, si quieres los detalles esenciales, lee la respuesta muy detallada de Patrick Mevzek.
fuente