Posso usare CNAME con indirizzo IP? Perché se funziona (a volte)?


13

Credo che la risposta più semplice per la prima domanda sia "No, hai" A "per questo", ma ho accidentalmente configurato un sottodominio utilizzando CNAME che punta a indirizzo IP e ha funzionato su alcuni computer nel mio ufficio. Mi chiedo come sia stato possibile?

Ora, quando lo controllo da casa, ho il seguente errore:

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

Sono abituato al 100% a lavorare nel mio ufficio (al momento sembra che non lo sia, ma lo sto controllando su un'altra macchina). Pertanto non sono al 100% se ha funzionato a causa di un'impostazione di rete speciale o perché l'ho provato subito dopo aver aggiunto la voce DNS.

So che questa storia sembra un po 'folle / incredibilmente, ma qualcuno può aiutarmi a risolvere questo enigma.

// modifica: sto aggiungendo output di scavo

; <<>> 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

2
Sei sicuro che non sia stato qualcos'altro a far funzionare le macchine da ufficio? Voci nella cache? Server autorevole per quel dominio sulla rete locale che ha la precedenza sulla risoluzione pubblica? File di host?
Shane Madden

Per essere precisi, ha funzionato su due macchine, entrambe sono OSX. Non ha funzionato su macchine Ubuntu. Dato che funzionava su due macchine, ho ignorato il problema "Ubuntu" (che era un errore) poiché credevo fosse un problema di propagazione del DNS o cache del DNS. Ho controllato solo la configurazione DNS su ciascun client ed è stato lo stesso (questo ha lasciato alcune incertezze sulla teoria della propagazione DNS). Una di queste macchine è il mio MacBook e attualmente lo sto usando da casa e il sito Web che ho configurato non funziona più correttamente su di esso: "Impossibile trovare il server su somesubdomain.somedomain.com, perché il DNS ricerca fallita. "
Maciek Sawicki,

Cosa viene restituito quando si richiede il nome utilizzando dig?
Shane Madden

Ho aggiunto l'output di scavo, alla domanda.
Maciek Sawicki,

Sospetto fortemente che i computer OSX stiano usando qualcosa di diverso dal DNS per fare la ricerca, come mDNS (che non è affatto la stessa cosa).
Chris S

Risposte:


16

I dati su un CNAMErecord devono sempre essere un altro nome DNS - questo è l'intero punto di a CNAME.

Come indicato sinteticamente da RFC 1034, i dati in a CNAMEdovrebbero essere:

            CNAME           a domain name.

Mentre, se stai cercando di indicare un indirizzo IP, il tuo biglietto è:

            A               For the IN class, a 32 bit IP address

CNAMEè progettato e implementato per essere un alias DNS; non ha idea di avere un indirizzo IP in quel campo di dati. Come tale, viene interpretato come un alias di un altro nome DNS, come progettato; dopo tutto, un indirizzo IP si adatta alla sintassi di un nome DNS.

Quindi, per esempio, supponiamo che i tuoi dati DNS siano:

somesubdomain.somedomain.com.   60  IN  CNAME   192.0.2.1.

Il server DNS ricorsivo che stai interrogando vede che il record è un CNAMEe indica che vorrai i dati effettivi che contiene. Nessun record diverso da quello CNAMEè stato trovato, quindi non c'è risposta da dare al cliente.

Prova a interrogare un record per un nome host 192, all'interno del dominio 0.2.1. Non ha nulla memorizzato nella cache per quel nome, quindi chiede ai server root. Servono richieste per TLD come .come .net, ma questa richiesta è una richiesta per .1. Rispondono prontamente che non esiste tale, ed è ciò che il ricorritore ti invia.

La risposta che stai vedendo digè il tuo server dei nomi ricorsivo che dice "beh, il nome che cercavi puntava da qualche altra parte e che da qualche parte non esisteva - chiedi al server di root se non mi credi".


Quindi, sì, inserire un indirizzo IP in un CNAMErecord non è mai valido e sospetto che i sistemi che stanno funzionando funzionino correttamente attraverso qualche altro meccanismo, come un file host o la risoluzione dei nomi locali - indagare sul loro comportamento di risoluzione dei nomi.


2

cname è un nome canonico, che è solo un alias di un altro nome, che di solito è il record A o un altro cname, ecc. Se si imposta cname per puntare a un IP, allora è solo un alias di tale IP. Non credo che il tuo server DNS controlli se la destinazione è legittima o meno, perché la RFC standard non dice davvero quale sia il formato / convalida dei dati per la destinazione di cname. Questo non è un uso normale, ma se funziona per te, allora funziona. Credo che il fatto che a volte non funzioni dovrebbe essere sufficiente per utilizzare ciò che viene usato convenzionalmente.


0

Puoi avere:

example IN CNAME 1.2.3.4.

dove 1.2.3.4 è un indirizzo IP funzionante. Nota però il punto finale nel CNAME. Il fatto che alcune macchine nel tuo ufficio funzionino con questo, mentre altre non mi inducono a credere che quelle che hanno il sottodominio impostato nel file lmhostso /etc/hosts.


1
Sebbene si tratti di dati validi per un CNAME, sono abbastanza sicuro che non provocherà una ricerca aggiuntiva .. tranne che nei server root, per un TLD inesistente chiamato 4?
Shane Madden

Una ricerca aggiuntiva verrà eseguita con una QUALSIASI (ad es. host -a) Query.
adamo,

@ShaneMadden A proposito, il tuo commento mi ha ricordato i TLD locali
adamo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.