Posso usar o CNAME com endereço IP? Por que funciona (às vezes)?

10

Eu acredito que a resposta mais fácil para a primeira pergunta é "Não, você tem" A "para isso", mas eu acidentalmente configurei algum subdomínio usando CNAME apontando para o endereço IP e ele funcionou em poucos computadores no meu escritório. Eu me pergunto como isso foi possível?

Agora, quando estou verificando em casa, tenho o seguinte erro:

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

Eu tenho 100% de uso em meu escritório (atualmente parece que não funciona, mas estou verificando em uma máquina diferente). Portanto, não estou 100% se funcionou devido a alguma configuração de rede especial ou porque testei-a logo após adicionar a entrada de DNS.

Eu sei que essa história parece um pouco louca / incrivelmente, mas alguém pode me ajudar a resolver esse quebra-cabeça.

// edit: estou adicionando dig output

; <<>> 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
    
por Maciek Sawicki 09.04.2012 / 23:00

3 respostas

14

Os dados em um registro CNAME sempre devem ser outro nome DNS - esse é o ponto inteiro de um CNAME .

Como dito de forma sucinta pelo RFC 1034, os dados em CNAME devem ser:

            CNAME           a domain name.

Enquanto estiver procurando um endereço IP, seu ticket é:

            A               For the IN class, a 32 bit IP address

CNAME é projetado e implementado para ser um alias de DNS; não tem noção de ter um endereço IP naquele campo de dados. Como tal, é interpretado como um alias para outro nome DNS, conforme projetado; afinal, um endereço IP se encaixa na sintaxe de um nome DNS.

Assim, por exemplo, digamos que seus dados de DNS sejam:

somesubdomain.somedomain.com.   60  IN  CNAME   192.0.2.1.

O servidor DNS recursivo que você está consultando vê que o registro é um CNAME e números que você desejará que os dados reais contenham. Nenhum registro diferente do CNAME foi encontrado, então não há resposta para dar ao cliente.

Ele tenta consultar um registro de um nome de host 192 , dentro do domínio 0.2.1 . Ele não tem nada armazenado em cache para esse nome, então ele pergunta aos servidores raiz. Eles atendem a solicitações de TLDs como .com e .net , mas essa solicitação é uma solicitação para .1 . Eles prontamente respondem que não existe tal coisa, e é isso que o recursor envia para você.

A resposta que você está vendo em dig é seu servidor de nomes recursivo dizendo, "bem, o nome que você procurou apontou para outro lugar, e que algum lugar não existia - pergunte ao servidor raiz se você não acredite em mim ".

Então, sim, colocar um endereço IP em um registro CNAME nunca é válido, e eu suspeito que os sistemas que estão funcionando estão funcionando corretamente através de algum outro mecanismo, como um arquivo hosts ou resolução de nome local - investigue seu nome comportamento de resolução.

    
por 10.04.2012 / 00:34
2

cname é canonical name, que é apenas um alias de outro nome, que geralmente é o registro A ou outro cname, etc. Se você configurar cname para apontar para um IP, então é apenas um alias desse IP. Eu não acho que seu servidor DNS verifica se o destino é legítimo ou não, porque o RFC padrão realmente não diz qual é o formato de dados / validação para o destino de cname é. Este não é um uso comum, mas se estiver funcionando para você, então está funcionando. O fato de que não está funcionando às vezes deve ser o suficiente para você usar o que é convencionalmente usado, eu acho.

    
por 09.04.2012 / 23:12
0

Você pode ter:

example IN CNAME 1.2.3.4.

em que 1.2.3.4 é um endereço IP de trabalho. Observe o ponto à direita no CNAME. O fato de algumas máquinas em seu escritório trabalharem com isso, enquanto outras não me levam a acreditar que aquelas que têm o subdomínio definido no arquivo lmhosts ou /etc/hosts .

    
por 09.04.2012 / 23:15