Resolvendo um CNAME - quem procura um resolvedor de registro ou servidor subseqüente?

7

Quando um resolvedor procura um CNAME, o resolvedor aparentemente envia primeiro um pedido de registro A para o servidor DNS. O servidor DNS deve descobrir que a solicitação é realmente para um CNAME ou o resolvedor deve tentar novamente a solicitação, mas para um tipo CNAME? Eu pergunto porque - e aqui está a reviravolta - temos um domínio de nível superior "interno" que usamos em nossa LAN interna, vamos chamá-lo de "domínio1", e o servidor DNS que estou consultando é o servidor autoritativo para "domínio1" (e é recursivo para todo o resto.) O que meu host (Centos 6.8) realmente envia é um pedido para um registro A:

16:15:45.837525 IP (tos 0x0, ttl 64, id 36911, offset 0, flags [none], proto UDP (17), length 62)
myhost.domain1.40684 > dnsserver.domain1.domain: 15355+ A? cfengine.domain1. (34)
Reply - a servfail:
16:15:45.837762 IP (tos 0x0, ttl 64, id 49982, offset 0, flags [DF], proto UDP (17), length 62)
dnsserver.domain1.domain > myhost.domain1.40684: 15355 ServFail 0/0/0 (34)

Se eu fizer uma busca por um tipo CNAME, recebo o registro CNAME correto (embora o A rec não seja retornado como dados ADICIONAIS):

cfengine.domain1.   3600    IN  CNAME   helm02.domain2.

Sim, sei que é uma prática ruim combinar funções autoritativas e recursivas em um único servidor DNS, mas não tenho controle sobre essa configuração de DNS.

Primeiro, se as funções autoritativa e recursiva forem combinadas em um único servidor, e você enviar uma consulta desejada de recursão ao servidor para um CNAME, o servidor é autoritativo para - é mesmo supostamente que funciona?

Assumindo que isso deve funcionar, quem é responsável por descobrir minha solicitação é, na verdade, por um registro CNAME e não por um registro A? O servidor DNS ou meu resolvedor?

    
por wsanders 16.02.2017 / 01:28

2 respostas

3

Se um servidor for autoritativo para um determinado nome, tiver um registro CNAME para esse nome, ele deverá responder com esse registro às consultas de todos os tipos de registro.

Se um servidor estiver fazendo uma recursão, solicita um tipo de registro que não é CNAME , mas recebe uma resposta CNAME , então deve reiniciar a consulta com o nome do registro CNAME , mesclar a resposta da consulta reiniciada com a resposta CNAME e retornar a resposta combinada para quem estava fazendo a recursão para.

De forma diferente, o servidor autoritativo é responsável por saber que um nome tem CNAME e responder com isso a todas as consultas, e o recursor é responsável por perceber que recuperou CNAME ao solicitar outra coisa e por agir de acordo. Se você especificamente pedir um registro CNAME , você ignora essa mágica extra e o recursor só lhe dará a resposta CNAME sem tentar seguir o nome.

    
por 16.02.2017 / 17:44
2

O SERVFAIL deve desaparecer se você tentar essa consulta novamente com +norecurse . dig considera que a recursão é desejada por padrão e SERVFAIL é a resposta correta para retornar se a recursão foi solicitada e não foi possível resolver o destino de um alias.

Os servidores recursivos que consultam seu servidor autoritativo não devem fazer a solicitação com o sinalizador de recursão desejado ( RD=1 ) definido. Em resumo, você só deve ver esse problema nos dois cenários a seguir:

  1. Você está executando esta transação manualmente e esquecendo de desativar a recursão.
  2. Alguém escreveu uma implementação (ruim) de um servidor de nomes recursivo e o autor não definiu o sinalizador de recursão desejado ao executar pesquisas autoritativas. Um servidor de nomes recursivo não deve solicitar aos servidores autoritativos que executem a recursão em seu nome.
por 16.02.2017 / 23:09