Puis-je utiliser CNAME avec une adresse IP? Pourquoi si fonctionne (parfois)?

13

Je crois que la réponse la plus simple à la première question est "Non, vous avez" A "pour cela", mais j'ai accidentellement configuré un sous-domaine en utilisant CNAME pointant vers l'adresse IP et cela a fonctionné sur quelques ordinateurs dans mon bureau. Je me demande comment c'était possible?

Maintenant, quand je le vérifie de chez moi, j'ai l'erreur suivante:

beast:~ viroos$ host somesubdomain.somedomain.com
Host somesubdomain.somedomain.com not found: 3(NXDOMAIN)

Je suis à 100%, il travaillait à mon bureau (actuellement, il ne semble pas, mais je le vérifie sur une machine différente). Par conséquent, je ne suis pas à 100% si cela a fonctionné en raison d'une configuration réseau spéciale ou parce que je l'ai testé juste après avoir ajouté une entrée DNS.

Je sais que cette histoire sonne, un peu folle / incroyablement, mais quelqu'un peut-il m'aider à résoudre ce puzzle.

// edit: j'ajoute une sortie dig

; <<>> DiG 9.6-ESV-R4-P3 <<>> somesubdomain.somedomain.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60224
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;somesubdomain.somedomain.com.      IN  A

;; ANSWER SECTION:
somesubdomain.somedomain.com.   67  IN  CNAME   xxx.xxx.xxx.xx1.

;; AUTHORITY SECTION:
.           1800    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2012040901 1800 900 604800 86400

;; Query time: 72 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Tue Apr 10 00:11:01 2012
;; MSG SIZE  rcvd: 136
Maciek Sawicki
la source
2
Êtes-vous sûr que ce n'est pas autre chose qui a fait fonctionner les machines de bureau? Entrées en cache? Serveur faisant autorité pour ce domaine sur le réseau local remplaçant la résolution publique? Héberge des fichiers?
Shane Madden
Pour être précis, cela a fonctionné sur deux machines, les deux sont OSX. Cela n'a pas fonctionné sur la machine Ubuntu. Comme il fonctionnait sur deux machines, j'ai ignoré le problème "ubuntu" (c'était une erreur) car je pensais que c'était un problème de propagation DNS ou un cache DNS. J'ai seulement vérifié la configuration DNS sur chaque client et c'était la même chose (cela a laissé une certaine incertitude concernant la théorie de propagation DNS). L'une de ces machines est mon MacBook et je l'utilise actuellement depuis chez moi et le site Web que j'ai configuré ne fonctionne plus correctement: "Le serveur sur somesubdomain.somedomain.com est introuvable, car le DNS échec de la recherche. "
Maciek Sawicki
Qu'est-ce qui est retourné lorsque vous recherchez le nom en utilisant dig?
Shane Madden
J'ai ajouté une sortie de fouille, pour remettre en question.
Maciek Sawicki
Je soupçonne fortement que les ordinateurs OSX utilisent autre chose que DNS pour faire la recherche, comme mDNS (ce qui n'est pas du tout la même chose).
Chris S

Réponses:

16

Les données sur un CNAMEenregistrement doivent toujours être un autre nom DNS - c'est tout l'intérêt d'un CNAME.

Comme le dit succinctement la RFC 1034, les données dans a CNAMEdoivent être:

            CNAME           a domain name.

Alors que si vous cherchez à pointer vers une adresse IP, votre ticket est:

            A               For the IN class, a 32 bit IP address

CNAMEest conçu et implémenté pour être un alias DNS; il n'a aucune idée d'avoir une adresse IP dans ce champ de données. En tant que tel, il est interprété comme un alias vers un autre nom DNS, tel que conçu; après tout, une adresse IP correspond à la syntaxe d'un nom DNS.

Donc, par exemple, disons que vos données DNS sont:

somesubdomain.somedomain.com.   60  IN  CNAME   192.0.2.1.

Le serveur DNS récursif que vous interrogez voit que l'enregistrement est un CNAME, et pense que vous voudrez les données réelles qu'il contient. Aucun dossier autre que le CNAMEn'a été trouvé, il n'y a donc pas de réponse à donner au client.

Il essaie d'interroger un enregistrement pour un nom d'hôte 192, dans le domaine 0.2.1. Il n'a rien mis en cache pour ce nom, il demande donc aux serveurs racine. Ils servent des demandes de TLD comme .comet .net, mais cette demande est une demande de .1. Ils répondent rapidement qu'il n'y en a pas, et c'est ce que le récurseur vous envoie.

La réponse que vous voyez digest que votre serveur de noms récursif dit: "Eh bien, le nom que vous avez cherché pointait ailleurs et que quelque part n'existait pas - demandez au serveur racine si vous ne me croyez pas".


Donc, oui, mettre une adresse IP dans un CNAMEenregistrement n'est jamais valide, et je soupçonne que les systèmes qui fonctionnent fonctionnent correctement via un autre mécanisme, comme un fichier d'hôtes ou une résolution de nom locale - étudiez leur comportement de résolution de nom.

Shane Madden
la source
2

cname est un nom canonique, qui est juste un alias d'un autre nom, qui est généralement l'enregistrement A ou un autre cname, etc. Si vous configurez cname pour pointer vers une IP, alors c'est juste un alias de cette IP. Je ne pense pas que votre serveur DNS vérifie si la cible est légitime ou non, car le RFC standard ne dit pas vraiment quel est le format / validation des données pour la cible de cname. Ce n'est pas une utilisation habituelle, mais si cela fonctionne pour vous, alors cela fonctionne. Le fait que cela ne fonctionne pas parfois devrait être suffisant pour que vous puissiez utiliser ce qu'il est conventionnellement utilisé, je pense.

johnshen64
la source
0

Vous pouvez avoir:

example IN CNAME 1.2.3.4.

où 1.2.3.4 est une adresse IP fonctionnelle. Notez cependant le point de fin dans le CNAME. Le fait que certaines machines de votre bureau fonctionnent avec cela, tandis que d'autres ne m'amène pas à croire que celles qui ont le sous-domaine défini dans le fichier lmhostsou /etc/hosts.

adamo
la source
1
Bien que ce soient des données valides pour un CNAME, je suis presque sûr que cela ne provoquera pas de recherche supplémentaire ... sauf contre les serveurs racine, pour un TLD inexistant nommé 4?
Shane Madden
Une recherche supplémentaire sera effectuée avec n'importe quelle host -arequête (par exemple ).
adamo
@ShaneMadden BTW, votre commentaire m'a rappelé les TLD locaux
adamo