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,


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)


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.