Si j'ai les hôtes example.com
et les leaf.intermediate.example.com
enregistrements DNS pour example.com
, mais que je n'ai pas d'enregistrements pour intermediate.example.com
lui-même, cela pose-t-il un problème dans certaines situations ou est-ce un mauvais style ou une mauvaise étiquette pour une raison quelconque? J'ai des serveurs Web configurés comme ça et tout semble bien fonctionner, mais je voulais juste vérifier s'il y avait quelque chose qui me manquait.
27
Réponses:
TL; DR: oui, des sous-domaines intermédiaires doivent exister, au moins lorsqu'ils sont interrogés, par définition du DNS; ils peuvent cependant ne pas exister dans le fichier de zone.
Une confusion possible à éliminer en premier; Définition de «non-terminal vide»
Vous pouvez confondre deux choses, comme d'autres réponses semblent également le faire. À savoir, ce qui se passe lors de la recherche de noms par rapport à la façon dont vous configurez votre serveur de noms et le contenu du fichier de zone.
Le DNS est hiérarchique. Pour qu'un nœud terminal existe, tous les composants qui y mènent DOIVENT exister, dans le sens où s'ils sont interrogés, le serveur de noms faisant autorité doit répondre pour eux sans erreur.
Comme expliqué dans la RFC 8020 (qui est juste une répétition de ce qui a toujours été la règle, mais seulement certains fournisseurs DNS avaient besoin d'un rappel), si pour toute requête, un serveur de noms faisant autorité répond NXDOMAIN (c'est-à-dire que cet enregistrement de ressource n'existe pas), cela signifie alors que toute étiquette "en dessous" de cette ressource n'existe pas non plus.
Dans votre exemple, si une requête pour les
intermediate.example.com
retoursNXDOMAIN
, toute nameserver récursive appropriée répondra immédiatementNXDOMAIN
pourleaf.intermediate.example.com
que ce disque ne peut exister que si toutes les étiquettes , il n'existent pas sous forme d' enregistrements.Cela a déjà été déclaré dans le passé dans la RFC 4592 sur les caractères génériques (qui ne sont pas liés ici):
Un exemple pratique avec les noms de domaine .US
Prenons un exemple de travail d'un TLD avec beaucoup d'étiquettes historiquement, c'est-à-dire
.US
. En choisissant n'importe quel exemple en ligne, utilisons-lewww.teh.k12.ca.us
.Bien sûr, si vous recherchez ce nom, ou même
teh.k12.ca.us
vous pouvez récupérer desA
enregistrements. Rien de concluant ici pour notre propos (il y a même un CNAME au milieu, mais on s'en fout):Interrogons maintenant
k12.ca.us
(je n'en interroge pas le serveur de noms faisant autorité, mais cela ne change pas le résultat en fait):Qu'apprenons-nous de cette réponse?
Tout d'abord, c'est un succès car le statut est
NOERROR
. Si cela avait été autre chose et spécifiquementNXDOMAIN
alorsteh.k12.ca.us
, celawww.teh.k12.ca.us
n'aurait pas pu exister.Deuxièmement, la section REPONSE est vide. Il n'y a aucun
A
document pourk12.ca.us
. Ce n'est pas une erreur, ce type (A
) n'existe pas pour cet enregistrement, mais peut-être d'autres types d'enregistrement existent pour cet enregistrement ou cet enregistrement est un ENT, alias "Empty Non Terminal": il est vide, mais ce n'est pas une feuille, il y a des choses "en dessous" (voir la définition dans la RFC 7719 ), comme nous le savons déjà (mais normalement la résolution est de haut en bas, donc nous atteindrons cette étape avant d'aller un niveau en dessous et non l'inverse comme nous le faisons ici pour la démonstration) objectif).C'est pourquoi en fait, comme raccourci, nous disons que le code d'état est
NODATA
: ce n'est pas un vrai code d'état, cela signifie simplementNOERROR
+ une section ANSWER vide, ce qui signifie qu'il n'y a pas de données pour ce type d'enregistrement spécifique mais il peut y en avoir pour d'autres.Vous pouvez répéter la même expérience pour le même résultat si vous interrogez avec la prochaine étiquette "up", c'est-à-dire le nom
ca.us
.Résultats des requêtes vs contenu du fichier de zone
D'où peut venir la confusion? Je crois que cela peut provenir d'une fausse idée que tout point dans un nom DNS signifie qu'il y a une délégation. C'est faux.
example.com
Autrement dit, votre fichier de zone peut être comme ça, et il est totalement valide et fonctionne:Avec un tel fichier de zone, en interrogeant ce serveur de noms, vous obtiendrez exactement le comportement observé ci-dessus: une requête pour
intermediate.example.com
retourneraNOERROR
avec une réponse vide. Vous n'avez pas besoin de le créer spécifiquement dans le fichier de zone (si vous n'en avez pas besoin pour d'autres raisons), le serveur de noms faisant autorité se chargera de synthétiser les réponses "intermédiaires", car il voit qu'il a besoin de ce non-terminal vide (et de tout d'autres "entre-deux" s'il y avait eu d'autres étiquettes) car il voit le nom de la feuilleleaf.intermediate.example.com
.Notez qu'il s'agit en fait d'un cas répandu dans certaines régions, mais vous ne le verrez peut-être pas car il cible davantage d'enregistrements "d'infrastructure" auxquels les gens ne sont pas exposés:
in-addr.arp
ouip6.arpa
, et plus particulièrement la dernière. Vous aurez des enregistrements comme1.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.
et il n'y a évidemment pas de délégation à chaque point, ni d'enregistrements de ressources attachés à chaque étiquetteSRV
enregistrements, par exemple_nicname._tcp.fr. 12h IN SRV 0 0 43 whois.nic.fr.
, un domaine peut avoir plusieurs enregistrements_proto._tcp.example.com
et_proto._udp.example.com
SRV
, car par conception, ils doivent avoir ce formulaire, mais en même temps_tcp.example.com
,_udp.example.com
ils resteront des non-terminaux vides car ils ne sont jamais utilisés comme enregistrements.whatever._domainkey.example.com
, mais évidemment,_domainkey.example.com
en soi, ne sera jamais utilisé, il restera donc un non-terminal vide. Ceci est le même pour lesTLSA
enregistrements dans DANE (ex:_25._tcp.somehost.example.com. TLSA 3 1 1 BASE64==
), ou desURI
documents (ex:_ftp._tcp IN URI 10 1 "ftp://ftp1.example.com/public"
)Comportement du serveur de noms et génération de réponses intermédiaires
Pourquoi le serveur de noms synthétise-t-il automatiquement ces réponses intermédiaires? L'algorithme de résolution de base pour le DNS, comme détaillé dans la section 4.3.2 de la RFC 1034 en est la raison, prenons-le et résumons dans notre cas lorsque nous interrogeons le serveur de noms faisant autorité ci-dessus pour le nom
intermediate.example.com
(c'est leQNAME
protocole ci-dessous):Le serveur de noms trouve la zone
example.com
comme l'ancêtre le plus proche de QNAME, nous pouvons donc passer à l'étape 3.Nous avons maintenant ceci:
Nous pouvons éliminer les cas b et c, car notre fichier de zone n'a pas de délégation (donc il n'y aura jamais de renvoi vers d'autres serveurs de noms, pas de cas b), ni de caractères génériques (donc pas de cas c).
Nous n'avons qu'à traiter ici du cas a.
Nous commençons à faire correspondre, étiquette par étiquette, dans la zone. Donc, même si nous avions un
sub.sub.sub.sub.sub.sub.sub.sub.example.com
nom long , à un moment donné, nous arrivons au cas a: nous n'avons pas trouvé de référence, ni de caractère générique, mais nous nous sommes retrouvés avec le nom final pour lequel nous voulions un résultat.Ensuite, nous appliquons le reste du contenu du cas a:
Pas notre cas, nous sautons cela.
Quelle que soit qtype nous choisissons (
A
,AAAA
,NS
, etc.) nous n'avons pas pour RRsintermediate.example.com
car il ne figure pas dans le fichier de zone. La copie ici est donc vide. Nous terminons maintenant à l'étape 6:Pas pertinent pour nous ici, donc nous finissons avec succès.
Cela explique exactement le comportement observé: de telles requêtes retourneront
NOERROR
mais aucune donnée non plus.Maintenant, vous pouvez vous demander: "mais alors si j'utilise un nom, comme
another.example.com
alors par l'algorithme ci-dessus, je devrais obtenir la même réponse (pas d'erreur)", mais les observations rapporteraient plutôtNXDOMAIN
dans ce cas.Pourquoi?
Parce que tout l'algorithme comme expliqué, commence par ceci:
Cela signifie que le fichier de zone ci-dessus est transformé en cet arbre:
Donc, en suivant l'algorithme, du haut, vous pouvez en effet trouver un chemin:
com > example > intermediate
(car le chemincom > example > intermediate > leaf
existe) Mais pouranother.example.com
, aprèscom > example
vous ne trouvez pas l'another
étiquette dans l'arbre, en tant que nœud enfant deexample
. Par conséquent, nous tombons dans une partie du choix c d'en haut:Le label
*
n'existe pas, et nous n'avons pas suivi aCNAME
, donc nous sommes dans le casset an authoritative name error in the response and exit
:, akaNXDOMAIN
.Notez que tout ce qui précède a créé de la confusion dans le passé. Ceci est collecté dans certains RFC. Voir par exemple cet endroit inattendu (la joie des spécifications DNS étant si impénétrable) définissant les caractères génériques: RFC 4592 "Le rôle des caractères génériques dans le système de noms de domaine" et notamment sa section 2.2 "Règles d'existence", également citée en partie au début de ma réponse mais ici elle est plus complète:
Et puis la définition dans la section suivante est le paragraphe que j'ai cité au début.
Notez que RFC 8020 (sur
NXDOMAIN
vraiment le sensNXDOMAIN
, c'est-à-dire si vous répondezNXDOMAIN
pourintermediate.example.com
, alorsleaf.intermediate.example.com
ne peut pas exister) a été mandaté en partie parce que divers fournisseurs DNS n'ont pas suivi cette interprétation et qui ont créé des ravages, ou ils n'étaient que des bugs, voir par exemple celui-ci corrigé en 2013 dans un code de serveur de noms faisant autorité en open source: https://github.com/PowerDNS/pdns/issues/127Les gens devaient alors mettre des contre-mesures spécifiques pour eux: ce n'est pas une mise en cache agressive
NXDOMAIN
car pour ces fournisseurs, si vous atteignezNXDOMAIN
un nœud, cela peut toujours signifier que vous obtenez autre chose queNXDOMAIN
sur un autre nœud en dessous.Et cela rendait la minimisation de QNAME (RFC 7816) impossible à obtenir (voir https://indico.dns-oarc.net/event/21/contributions/298/attachments/267/487/qname-min.pdf pour plus de détails) , alors que l'on voulait augmenter la confidentialité. L'existence de non-terminaux vides en cas de DNSSEC a également créé des problèmes dans le passé, concernant la gestion de la non-existence (voir https://indico.dns-oarc.net/event/25/contributions/403/attachments/378/647 /AFNIC_OARC_Dallas.pdf si vous êtes intéressé, mais vous avez vraiment besoin d'une bonne compréhension de DNSSEC avant).
Les deux messages suivants donnent un exemple de problèmes qu'un fournisseur a dû être en mesure d'appliquer correctement cette règle sur les non-terminaux vides, il donne une certaine perspective des problèmes et pourquoi nous y étions:
la source
Il est possible que je comprenne mal la réponse de Khaled, mais le manque d'enregistrements intermédiaires ne devrait en aucun cas être un problème avec la résolution du nom sous-zoné. Notez que cette sortie de fouille ne provient pas ni n'est dirigée vers un serveur DNS faisant autorité pour
teaparty.net
ou l'une de ses sous-zones:En effet, vous devriez être en mesure de le faire
dig
vous - même et d'obtenir cette réponse -teaparty.net
est un véritable domaine, sous mon contrôle, et contient vraiment cetA
enregistrement. Vous pouvez vérifier qu'il n'y a aucun enregistrement pour aucune de ces zones entrevery
etteaparty.net
et que cela n'a aucun impact sur votre résolution du nom d'hôte ci-dessus.la source
teaparty.net
les enregistrements de dans un seul fichier de zone, donc les enregistrements vides sont synthétisés pour les domaines intermédiaires. Quelqu'un peut-il expliquer ce qui se passerait s'ilparents.teaparty.net
s'agit d'une délégation et qu'ellevery.deep.host.with.no.immediate
n'a qu'un enregistrement dans le fichier de zone des délégués?teaparty.net
est un sous-domaine délégué denet
; si le seul enregistrement A de son fichier de zone l'était,very.deep...
cela n'aurait pas d'importance.Si vous interrogez directement le serveur DNS faisant autorité, vous obtiendrez des réponses sans problème.
Cependant, vous n'obtiendrez pas de réponse valide si vous interrogez via un autre serveur DNS qui n'a pas de cache valide. La requête
intermediate.example.com
entraînera uneNXDOMAIN
erreur.la source
NXDOMAIN
, il doit en résulter unNOERROR
code et une section Réponse vide.intermediate.example.com
s'il n'est utilisé pour rien. Donc, même s'il renvoie une erreur (ce n'est pas le cas), quelle différence cela fait-il?NXDOMAIN
, vous obtenezNOERROR
. C'est la réponse pour un nœud qui existe dans la hiérarchie DNS, mais qui n'a aucun enregistrement du type demandé.NS
enregistrements, mais que vous demandez desA
enregistrements, vous obtiendrezNOERROR
une réponse vide.NXDOMAIN
pourintermediate.example.com
cela signifie qu'il n'y a rien « ci - dessous » etleaf.intermediate.example.com
ne peut pas exister. Certains résolveurs récursifs agressifs peuvent même mettre cela en cache et déduire les choses par eux-mêmes.Pour répondre directement à la question, non, vous n'avez pas besoin d'ajouter des enregistrements pour les noms intermédiaires que vous n'utilisez pas réellement, mais cela ne signifie pas que ces noms n'existent pas.
Quant à savoir si ces noms existent ou non, c'est en fait une question entièrement distincte pour laquelle j'espère apporter une réponse brève et plutôt intuitive.
Tout se résume à ce que DNS est une structure arborescente, où chaque étiquette dans un nom de domaine est un nœud d'arborescence. Par exemple ,
www.example.com.
a les étiquetteswww
,example
,com
et `` (noeud racine), qui sont les noeuds de l' arbre qui forment le chemin tout le chemin vers la racine.Ce qui rend peut-être cette nature fondamentale du DNS non évidente, c'est que presque toujours lors de la gestion des données DNS, il n'y a pas d'arbre à voir et nous ne travaillons généralement pas directement avec les nœuds d'arbre eux-mêmes, au lieu de cela, nous avons généralement une liste aplatie de quel enregistrement les données qui devraient exister dans différents noms de domaine (en fait, les chemins d'arborescence, comme ci-dessus).
Ce qui se passe lorsque cette liste aplatie est utilisée, c'est que le logiciel du serveur DNS construit l'arborescence sur la base des enregistrements existants, et s'il y a des écarts entre les nœuds qui ont des enregistrements (par exemple, il y a des enregistrements pour
foo.bar.example.com.
etexample.com.
mais pasbar.example.com.
), ceux-ci sont simplement considérés comme des arbres vides. nœuds. Autrement dit, ce sont des noms de domaine / nœuds qui existent en fait, l'arborescence n'est pas cassée, ces nœuds n'ont tout simplement aucune donnée qui leur est associée.Par conséquent, si vous interrogez l'un de ces nœuds vides, vous obtiendrez une
NODATA
réponse (NOERROR
état +SOA
dans la section d'autorité), indiquant que le type d'enregistrement demandé n'existait pas sur ce nœud. Si vous interrogez un nom qui n'existe pas, vous obtiendrez uneNXDOMAIN
réponse, indiquant que le nom de domaine demandé n'existe pas dans l'arborescence.Maintenant, si vous voulez les moindres détails, lisez la réponse très complète de Patrick Mevzek.
la source