C’est une question canonique sur les CNAME aux sommets (ou racines) des zones
Il est de notoriété publique que les CNAME
enregistrements au sommet d'un domaine sont une pratique tabou.
Exemple:
example.com. IN CNAME ithurts.example.net.
Dans le meilleur des cas, le logiciel du serveur de noms pourrait refuser de charger la configuration et, dans le pire des cas, accepter cette configuration et invalider celle-ci pour example.com.
Récemment, j'ai demandé à une entreprise d’hébergement Web de donner à une unité commerciale les instructions nécessaires pour que CNAME atteigne le sommet de notre domaine. Sachant qu'il s'agirait d'une configuration suicide lorsque BIND serait alimenté, je leur ai dit que nous ne serions pas en mesure de nous conformer et qu'il s'agissait en général de conseils superflus. La société d’hébergement Web a adopté la position selon laquelle les RFC définissant les standards ne l’interdisent pas expressément et que leur logiciel le prend en charge. Si nous ne pouvions pas nommer CNAME l'apex, leur conseil était de ne pas avoir d'enregistrement apex du tout et ils ne fourniraient pas de serveur Web de redirection. ...Quoi?
La plupart d'entre nous savons que RFC1912 insiste sur ce point A CNAME record is not allowed to coexist with any other data.
, mais soyons honnêtes avec nous-mêmes, cette RFC est uniquement informative. Le plus proche que je connaisse du verbiage qui interdit la pratique est tiré de la RFC1034 :
Si un RR CNAME est présent sur un nœud, aucune autre donnée ne doit être présente; Cela garantit que les données d'un nom canonique et ses alias ne peuvent pas être différents.
Malheureusement, je suis dans l'industrie depuis assez longtemps pour savoir que "ne devrait pas" n'est pas la même chose que "ne doit pas", et que c'est assez de corde pour que la plupart des concepteurs de logiciels se pendent. Sachant que tout ce qui serait moins qu'un lien concis avec un slam dunk serait une perte de temps, j'ai fini par laisser la société s'en tirer en reprochant de recommander des configurations qui casseraient les logiciels couramment utilisés sans divulgation appropriée.
Cela nous amène à la période de questions. Pour une fois, j'aimerais que nous devenions vraiment techniques sur la folie des CNAME apex, et que nous ne nous écartions pas de la question comme nous le faisons habituellement lorsque quelqu'un poste sur le sujet. La RFC1912 est interdite, de même que toute autre RFC Informational applicable ici à laquelle je n'ai pas pensé. Fermons ce bébé.
la source
Réponses:
CNAME
Les enregistrements ont été créés à l' origine pour permettre à plusieurs noms fournissant la même ressource de créer un alias avec un "nom canonique" unique pour la ressource. Avec l'avènement de l'hébergement virtuel basé sur le nom, il est devenu banal de les utiliser comme une forme générique d'alias d'adresse IP. Malheureusement, la plupart des personnes issues d'un environnement d'hébergement Web s'attendentCNAME
à ce que les enregistrements indiquent une équivalence dans le DNS , ce qui n'a jamais été l'intention. L'apex contient des types d'enregistrement qui ne sont clairement pas utilisés dans l'identification d'une ressource hôte canonique (NS
,SOA
), qui ne peuvent pas être aliasés sans rompre la norme à un niveau fondamental. (particulièrement en ce qui concerne les coupures de zone )Malheureusement, la norme DNS originale a été rédigée avant que les instances de normalisation ne se rendent compte qu'un verbiage explicite était nécessaire pour définir un comportement cohérent ( RFC 2119 ). Il était nécessaire de créer la RFC 2181 pour clarifier plusieurs cas critiques en raison de la formulation vague, et le verbiage mis à jour précise qu'il
CNAME
est impossible d' utiliser un alias apex sans enfreindre la norme.Cela établit cela
SOA
et lesNS
enregistrements sont obligatoires, mais cela ne dit rien sur lesA
autres types apparaissant ici. Cela peut sembler superflu que je le cite alors, mais cela deviendra plus pertinent dans un instant.La RFC 1034 était assez vague sur les problèmes qui peuvent survenir quand il
CNAME
existe à côté d'autres types d'enregistrements. La RFC 2181 supprime l'ambiguïté et énonce explicitement les types d'enregistrement autorisés à coexister:"nom d'alias" dans ce contexte fait référence à la partie gauche de l'
CNAME
enregistrement. La liste à puces indique explicitement que aSOA
,NS
et lesA
enregistrements ne peuvent pas être vus sur un nœud où unCNAME
apparaît également. Lorsque nous combinons à l' article 6.1, il est impossible pourCNAME
exister au sommet comme il aurait à vivre aux côtés obligatoiresSOA
etNS
dossiers.(Cela semble faire l'affaire, mais si quelqu'un a un chemin de preuve plus court, donnez-lui une chance.)
Mise à jour:
Il semble que la confusion la plus récente provienne de la décision récente de Cloudflare de permettre à un enregistrement CNAME illégal d'être défini au sommet de domaines, pour lequel ils synthétiseront des enregistrements A. Le terme "conforme à la RFC" décrit dans l'article lié indique que les enregistrements synthétisés par Cloudflare fonctionneront bien avec le système DNS. Cela ne change pas le fait qu'il s'agisse d'un comportement complètement personnalisé.
À mon avis, il s’agit d’un mauvais service pour la communauté DNS dans son ensemble: il ne s’agit pas d’un enregistrement CNAME, et il induit les gens en erreur en leur faisant croire que les autres logiciels sont déficients pour ne pas le permettre. (comme le montre ma question)
la source
SOA
+NS
enregistrements, 2. lesCNAME
enregistrements ne sont pas autorisés à coexister avec d'autres données)CNAME
signifie réellement un enregistrement, car il s'agit probablement du type d'enregistrement le plus mal compris. Même si cela dépasse le propos, je pense que le fait d'être une FAQ est le résultat direct du fait que beaucoup (la plupart?) Ne comprennent pas correctementCNAME
.SRV
place, ce qui aurait également permis d' éviter tout problème. Le problème ne se limite pas à ce qui est discuté ici;CNAME
contrairement à la croyance populaire, ne correspond pas parfaitement à ce qui est nécessaire. En fin de compte, commeCNAME
cela ne fonctionne pas comme prévu (!), Il ne peut pas être repensé rétroactivement et, comme les implémentations HTTP ne l'utilisent pas,SRV
il semble plus probable que la fonctionnalité de style "alias" devienne plus courante pour prendre en charge HTTP (type d'enregistrement spécifique). aliasing implémenté dans les coulisses plutôt qu'en tant que type d'enregistrement visible)L'Internet Systems Consortium a récemment publié un article sur CNAME au sommet d'une zone , expliquant les raisons de cette restriction et proposant plusieurs alternatives. Cela ne changera probablement pas de sitôt, malheureusement:
Mais il y a de l'espoir:
la source
Si vous redirigez une zone entière, vous devez utiliser DNAME. Selon RFC 6672 ,
la source