172 votes

Pourquoi un enregistrement CNAME ne peut-il pas être utilisé à l'apex (aka racine) d'un domaine ?

Il s'agit d'un Question canonique à propos des CNAMEs aux sommets (ou racines) des zones

Il est relativement communément admis que CNAME Les enregistrements au sommet d'un domaine sont une pratique taboue.

Ejemplo: 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, il pourrait accepter cette configuration et invalider la configuration pour exemple.com.

Récemment, une société d'hébergement a transmis à une unité commerciale des instructions indiquant que nous devions attribuer un nouveau record au sommet de notre domaine. Sachant qu'il s'agirait d'une configuration suicidaire lorsqu'elle serait transmise à BIND, je leur ai fait savoir que nous ne pourrions pas nous y conformer et qu'il s'agissait là d'un conseil de pacotille. L'hébergeur a déclaré que ce n'était pas totalement interdit par les RFCs définissant les standards et que leur le logiciel le supporte. Si nous ne pouvions pas 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 savent que RFC1912 insiste sur le fait que A CNAME record is not allowed to coexist with any other data. Mais soyons honnêtes, cette RFC n'est qu'informative. Le texte le plus proche que je connaisse d'un verbiage interdisant cette pratique provient de RFC1034 :

Si un CNAME RR est présent sur un nœud, aucune autre donnée ne doit être utilisée. présentes ; cela garantit que les données d'un nom canonique et de ses alias ne peuvent être ne peuvent pas être différentes.

Malheureusement, je suis dans le secteur depuis assez longtemps pour savoir que "ne devrait pas" n'est pas la même chose que "ne doit pas", et c'est une corde suffisante pour que la plupart des concepteurs de logiciels se pendent avec. Sachant que tout ce qui n'est pas un lien concis vers une solution miracle serait une perte de temps pour moi, j'ai fini par laisser l'entreprise s'en tirer avec une réprimande pour avoir recommandé des configurations susceptibles de casser des logiciels couramment utilisés sans en faire état.

Ce qui nous amène aux questions-réponses. Pour une fois, j'aimerais que nous ayons realmente technique sur la folie des CNAMEs apex, et non pas contourner le problème comme nous le faisons habituellement lorsque quelqu'un poste sur le sujet. RFC1912 est hors limites, ainsi que tout autre RFC informatif applicable ici et auquel je n'ai pas pensé. Fermons ce bébé.

1 votes

Le RFC 1034 précède le RFC 2119 de pas mal de temps et d'expérience.

2 votes

Le système CMS Adobe AEM exige que les utilisateurs configurent un CNAME pour leurs domaines avec une valeur de cdn.adobeaemcloud.com. Cela fonctionne pour www.yourname.com, mais alors comment configurer votredomaine.com pour qu'il pointe également vers votre très coûteux CMS d'entreprise si les CNAMES apex ne sont pas autorisés par votre fournisseur de DNS ? Vous pouvez trouver une IP actuelle et créer un enregistrement A pour votre domaine apex, mais cela pourrait changer. Comment les gens gèrent-ils cela ?

132voto

CNAME les dossiers ont été à l'origine créés pour permettre à plusieurs noms qui fournissent la même ressource d'être aliasés vers un seul "nom canonique" pour la ressource. Avec l'avènement de l'hébergement virtuel par nom, il est devenu courant de les utiliser comme une forme générique d'alias d'adresse IP. Malheureusement, la plupart des personnes qui viennent du monde de l'hébergement web s'attendent à ce que CNAME pour indiquer l'équivalence dans le DNS ce qui n'a jamais été le but recherché. L'apex contient des types d'enregistrements qui sont clairement no utilisé dans l'identification d'une ressource hôte canonique ( NS , SOA ), qui ne peut être aliasé sans rompre la norme à un niveau fondamental. (notamment en ce qui concerne coupures de zones )

Malheureusement, la norme DNS originale a été rédigée avant que les organismes 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 RFC 2181 afin de clarifier plusieurs cas de figure dus à une formulation vague, et le verbiage mis à jour indique plus clairement qu'une CNAME ne peut pas peut être utilisé pour obtenir un crénelage de l'apex sans enfreindre la norme.

6.1. Autorité de zone

Les serveurs faisant autorité pour une zone sont énumérés dans les enregistrements NS. pour l'origine de la zone, qui, avec un enregistrement Start of Authority (SOA) (SOA), sont les enregistrements obligatoires dans chaque zone. Un tel serveur fait autorité pour tous les enregistrements de ressources dans une zone qui ne sont pas dans une autre zone. Les enregistrements NS qui indiquent une coupure de zone sont la propriété de la zone enfant créée, comme le sont tous les autres enregistrements pour l'élément origine de cette zone enfant, ou de tout sous-domaine de celle-ci. Un serveur pour une zone ne doit pas renvoyer de réponses faisant autorité pour les requêtes liées aux noms de la zone noms d'une autre zone, ce qui inclut les enregistrements NS, et éventuellement A au niveau d'une zone coupée, à moins qu'il ne soit également un serveur pour l'autre zone. zone.

Cela établit que SOA y NS sont obligatoires, mais il ne dit rien sur A ou d'autres types apparaissant ici. Il peut sembler superflu que je le cite alors, mais cela deviendra plus pertinent dans un moment.

RFC 1034 était quelque peu vague quant aux problèmes qui peuvent survenir lorsqu'un CNAME existe aux côtés d'autres types d'enregistrements. RFC 2181 lève l'ambiguïté et énonce explicitement les types d'enregistrements qui sont autorisés à exister à côté d'eux :

10.1. Enregistrements de ressources CNAME

L'enregistrement CNAME (" nom canonique ") du DNS existe pour fournir le nom canonique associé à un nom d'alias. Il ne peut y avoir qu'un seul nom canonique pour un même alias. Ce nom doit généralement être un nom qui existe ailleurs dans le DNS, bien qu'il existe de rares applications d'alias avec applications pour les alias avec le nom canonique correspondant. non défini dans le DNS. Un nom d'alias (étiquette d'un enregistrement CNAME) peut, si le DNSSEC est utilisé, avoir des RR SIG, NXT, et KEY, mais ne peut avoir aucune autres données. C'est-à-dire que pour toute étiquette dans le DNS (tout nom de domaine) exactement l'une des situations suivantes est vraie :

  • un enregistrement CNAME existe, accompagné éventuellement de SIG, NXT, et KEY RRs,
  • un ou plusieurs enregistrements existent, aucun n'étant un enregistrement CNAME,
  • le nom existe, mais n'a pas de RR associé d'aucun type,
  • le nom n'existe pas du tout.

Dans ce contexte, le terme "nom d'alias" se réfère à la partie gauche du nom de l'alias. CNAME enregistrement. La liste à puces précise explicitement qu'une SOA , NS y A ne peuvent pas être vus dans un nœud où un CNAME apparaît également. Lorsque nous combinons cela avec la section 6.1, il est impossible qu'une CNAME pour exister à l'apogée, car elle devrait vivre aux côtés de l'obligatoire SOA y NS les dossiers.

(Cela semble faire l'affaire, mais si quelqu'un a un chemin plus court à prouver, merci de le faire).


Mise à jour :

Il semble que la confusion la plus récente vienne de La récente décision de Cloudflare pour permettre de définir un enregistrement CNAME illégal à l'apex des domaines, pour lesquels ils synthétiseront des enregistrements A. Le terme "RFC compliant", tel que décrit dans l'article en question, signifie que les enregistrements synthétisés par Cloudflare seront compatibles avec le DNS. Cela ne change rien au fait qu'il s'agit d'un comportement totalement personnalisé.

À mon avis, c'est un mauvais service rendu à la communauté DNS dans son ensemble : il ne s'agit pas en fait d'un enregistrement CNAME, et cela induit les gens en erreur en leur faisant croire que les autres logiciels sont déficients parce qu'ils ne le permettent pas. (comme le démontre ma question)

12 votes

Je suis d'accord avec cette preuve et je ne pense pas que ce chemin de preuve en deux étapes soit particulièrement long ou alambiqué. (1. l'apex de la zone est garanti pour avoir au moins SOA + NS records, 2. CNAME ne sont pas autorisés à coexister avec d'autres données)

3 votes

Globalement, je pense que c'est une très bonne explication. Si quelque chose pouvait être ajouté, je pense que ce serait peut-être d'expliquer davantage ce qu'est un CNAME car il s'agit probablement du type d'enregistrement le plus mal compris. Même si c'est un peu hors sujet, je pense que cette FAQ est le résultat direct du fait que beaucoup (la plupart ?) n'ont pas une bonne compréhension de ce qu'est un enregistrement. CNAME .

0 votes

@HåkanLindqvist D'accord ! En fait, je commence à être très en colère contre les personnes qui comprennent très mal ce qu'est et ce que n'est pas le CNAME. Comme les gens qui ne comprennent pas que CNAME != redirection HTTP. 0_o

11voto

Daniel Liuzzi Points 161

Le Consortium des Systèmes Internet a récemment publié un article sur CNAME au sommet d'une zone pourquoi cette restriction existe, et un certain nombre d'alternatives. Malheureusement, cette situation n'est pas prête de changer :

Nous ne pouvons pas modifier la façon dont l'enregistrement CNAME spécial est utilisé sans modifier simultanément toutes les implémentations des serveurs DNS dans le monde. Cela est dû au fait que sa signification et son interprétation ont été strictement définies dans le protocole DNS ; toutes les implémentations actuelles de clients et de serveurs DNS adhèrent à cette spécification. Tenter d'assouplir la manière dont le CNAME est utilisé dans les serveurs faisant autorité sans modifier simultanément tous les résolveurs DNS actuellement en service entraînera une rupture de la résolution des noms (et une indisponibilité intermittente des services Web et de courrier électronique pour les organisations mettant en œuvre des solutions de serveurs faisant autorité "assouplies").

Mais il y a de l'espoir :

Une autre solution potentielle actuellement en discussion consisterait à ajouter un nouveau type d'enregistrement de ressource DNS que les navigateurs consulteraient et qui pourrait exister à l'apex. Il s'agirait d'un nom d'hôte spécifique à une application pour les requêtes http (similaire au fonctionnement de MX).

Pour : C'est tout à fait cohérent avec la conception du DNS.
Inconvénient : cette fonction n'est pas encore disponible et nécessiterait une mise à jour du navigateur client.

8 votes

Un "espoir" ? Il existait déjà une "solution", à savoir les enregistrements HTTP SRV, mais ils ont été universellement rejetés. Ce qui n'est pas clair, c'est la nature du "problème".

2 votes

Je n'étais même pas au courant du HTTP SRV, donc je n'ai aucune idée de la raison pour laquelle il a été rejeté. Avec un peu de chance, cette nouvelle solution potentielle reçoive un meilleur accueil quand/si elle sort.

1voto

Brian Minton Points 248

Si vous redirigez une zone entière, vous devez utiliser le DNAME. Selon le RFC 6672 ,

Le DNAME RR et le CNAME RR [RFC1034] provoquent une recherche vers retourner (potentiellement) des données correspondant à un nom de domaine différent différent du nom de domaine interrogé. La différence entre ces deux enregistrements enregistrements de ressources est que le CNAME RR dirige la recherche de données à son propriétaire vers un autre nom unique, alors qu'un RR DNAME dirige les recherches de données de données sur des descendants du nom de son propriétaire vers des noms correspondants sous un nœud différent (unique) de l'arbre.

Par exemple, regardons à travers une zone (voir RFC 1034 [RFC1034], Section 4.3.2, étape 3) pour le nom de domaine "foo.example.com", et un enregistrement de ressource un enregistrement de ressource DNAME est trouvé à "exemple.com" indiquant que toutes les requêtes sous "exemple.com" soient dirigées vers "exemple.net". La recherche retourne à l'étape 1 avec le nouveau nom de requête "foo.example.net". Si le nom de la requête avait été "www.foo.example.com", le nouveau nom de la requête sera "www.foo.example.net".

4 votes

Il s'agit d'une interprétation incorrecte. Reportez-vous à la deuxième ligne du tableau dans RFC 6672 §2.2 . Un DNAME d'apex ne donnera lieu à aucune correspondance pour les types de requêtes autres que le DNAME à l'apex, c'est-à-dire qu'il ne donnera pas lieu à un alias réel d'un enregistrement A ou AAAA d'apex.

0 votes

Un DNAME apex ne donnera lieu à aucun redirection pour les requêtes du nom de l'apex. Il n'est pas techniquement correct de dire que cela n'aboutira à aucun résultat. match . Vous obtiendrez quand même une correspondance si vous faites une requête pour NS, SOA, ou tout autre type de RR qui sont en réalité présent pour le nom de l'apex. De RFC 6672 : "Si un enregistrement DNAME est présent au sommet de la zone, il est toujours nécessaire d'y avoir également les enregistrements de ressources habituels SOA et NS. Un tel DNAME ne peut pas être utilisé pour miroir une zone complètement, car elle ne miroir le sommet de la zone".

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X