Os caracteres curinga DNS, um registro têm prioridade sobre CNAMEs mais específicos?

18

Temos um curinga configurado para lidar com todos os subdomínios de "example.com"

A RECORD: * .example.com aponta para 10.10.10.10

Temos um registro A mais específico para lidar com um subdomínio especial (isso funciona bem):

Um registro: staging.example.com pontos 10.10.10.9

O problema que estamos enfrentando é que estamos migrando a preparação para um novo ambiente de hospedagem e fomos instruídos a usar um CNAME:

CNAME: new-staging.example.com aponta para proxy.heroku.com

Nós pensamos que isso iria funcionar. No entanto, new-staging.example.com resolve para o curinga de nível superior 10.10.10.10 e não aponta para proxy.heroku.com.

o que estou perdendo? Isso não é possível? Ou isso é uma prática ruim? Obrigado,

zdennis
fonte
11
Você está configurando isso ao vivo por meio da interface da web de um ISP ou está executando BIND ou djbdns, por exemplo?
Jonathan Ross
Quando você diz "resolve para o curinga de nível superior", como está fazendo essa resolução? dig -t ANY new-staging.example.com?
31411 nickgrim
@ Jonathan, atualmente estamos usando o Slicehost para gerenciar o DNS, por isso é através de uma interface da web.
precisa saber é o seguinte
@nickgrim ao executar dig -t QUALQUER new-staging.example.com, obtemos: new-staging.example.com. 82880 NO CNAME proxy.heroku.com.example.com. proxy.heroku.com.example.com. 86400 EM UM 10.10.10.10
zdennis

Respostas:

15

A resposta geralmente é "Não" - o registro mais específico deve vencer, portanto, deve funcionar como você descreveu / esperava. Meu palpite é que você tem o registro curinga A armazenado em cache em algum lugar e precisa aguardar a expiração do cache.

um teste rápido com o BIND 9.6.2-P2 / FreeBSD 8.1:
Uma zona contendo os registros:

example.net.                IN      A      127.0.0.2
*.test.example.net.         IN      A      127.0.0.1
specific.test.example.net.  IN      CNAME  example.net.

Resolve da seguinte maneira:

% dig specific.test.example.net

; <<>> DiG 9.6.2-P2 <<>> specific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17222
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;specific.test.example.net. IN  A

;; ANSWER SECTION:
specific.test.example.net. 3600 IN  CNAME   example.net.
example.net.               3600 IN  A   127.0.0.2

;; AUTHORITY SECTION:
example.net.        3600    IN  NS  ns1.example.net.

;; ADDITIONAL SECTION:
ns1.example.net.    3600    IN  A   127.0.0.1

(Retorna o CNAME)
e

% dig nonspecific.test.example.net

; <<>> DiG 9.6.2-P2 <<>> nonspecific.test.example.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26980
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; QUESTION SECTION:
;nonspecific.test.example.net.  IN  A

;; ANSWER SECTION:
nonspecific.test.example.net. 3600 IN   A   127.0.0.1

;; AUTHORITY SECTION:
example.net.        3600    IN  NS  ns1.example.net.


;; ADDITIONAL SECTION:
ns1.example.net.    3600    IN  A   127.0.0.1

(Retorna o registro curinga A)

voretaq7
fonte
Isso está nos padrões de DNS ou é específico da implementação?
Bigbio2002
@ Bigbio2002 Eu acredito que faz parte do padrão - a RFC 4592 é o lugar relevante para se olhar - meu cérebro está meio confuso de escrever documentação durante todo o dia até ler o RFC com estômago, então se estiver errado, por favor me dê um tapa na seção relevante :-)
voretaq7 26/03
7

De acordo com o seu comentário sobre a questão:

ao executar dig -t QUALQUER new-staging.example.com, obtemos: new-staging.example.com. 82880 NO CNAME proxy.heroku.com.example.com. proxy.heroku.com.example.com. 86400 IN A 10.10.10.10

... você configurou incorretamente o DNS. Você precisa definir a meta do CNAME para proxy.heroku.com.- o período final é importante! Sem ele, seu servidor DNS está assumindo que você está se referindo a um host dentro da sua example.comzona - proxy.heroku.com.example.com- e que está sendo capturado pelo registro curinga.

nickgrim
fonte
Temos o registro CNAME definido como "proxy.heroku.com". Quando cavamos diretamente o servidor de nomes do slicehost (dig @ ns1.slicehost.com), a única resposta fornecida aponta para o CNAME para proxy.heroku.com. Quando cavamos sem especificar, as duas respostas são as que eu postei acima e que sua resposta aqui reflete. Isso me faz pensar que talvez @ voretaq7 possa estar pensando que há um problema de cache? Isso está alinhado com o que estou vendo ao cavar?
Zdennis 29/03
Sim, isso parece implicar que um cache DNS a montante de você tenha armazenado em cache a versão incorreta (sem período). Você precisará aguardar o TTL expirar e / ou configurar um nome diferente nesse meio tempo ( new-new-staging?).
31411 nickgrim
O ponto que faltava é o que também me tropeçou.
loevborg
0

Me deparei com este post pesquisando como isso é feito em um servidor Plesk Linux compartilhado. No exemplo deles, eles se referem a uma solução DNS / vhost.conf combinada, na qual é necessário adicionar o vhost.conf e atualizar o DNS.

Citação: "Ele deve ser o último na lista de subdomínios, que é ordenada alfabeticamente. Portanto, inicie seu nome com" zz ". Http://kb.parallels.com/2239

Meu palpite é que isso difere da teoria DNS 'normal', na qual o registro mais específico seria retornado.

Eugene van der Merwe
fonte