Se eu tenho os hosts example.com
e leaf.intermediate.example.com
nos registros DNS de example.com
, mas não tenho registros intermediate.example.com
próprios, isso causa um problema em algumas situações ou é um estilo ou etiqueta inadequados por algum motivo? Eu tenho servidores da Web configurados assim e tudo parece funcionar bem, mas só queria verificar se há algo que está faltando.
domain-name-system
subdomain
Lassi
fonte
fonte
Respostas:
TL; DR: sim, subdomínios intermediários precisam existir, pelo menos quando consultados, por definição do DNS; eles podem não existir no arquivo de zona embora.
Uma possível confusão para eliminar primeiro; Definição de "Não Terminal Não Vazio"
Você pode estar confundindo duas coisas, como outras respostas também parecem fazer. A saber, o que acontece ao consultar nomes versus como você configura seu servidor de nomes e o conteúdo do arquivo de zona.
O DNS é hierárquico. Para que qualquer nó folha exista, todos os componentes que o conduzem DEVEM existir, no sentido de que, se forem consultados, o servidor de nomes autoritativo responsável deve responder por eles sem erro.
Conforme explicado na RFC 8020 (que é apenas uma repetição do que sempre foi a regra, mas apenas alguns provedores de DNS precisavam de um lembrete), para qualquer consulta, uma resposta oficial do servidor de nomes NXDOMAIN (ou seja: esse registro de recurso não existe), significa que qualquer etiqueta "abaixo" deste recurso também não existe.
No seu exemplo, se uma consulta de
intermediate.example.com
retornoNXDOMAIN
, então qualquer servidor de nomes recursiva adequada irá imediatamente responderNXDOMAIN
porleaf.intermediate.example.com
porque este registro não pode existir se todas as etiquetas em que não existem como registros.Isso já foi afirmado no passado na RFC 4592 sobre caracteres curinga (que não são relacionados aqui):
Um exemplo prático com nomes de domínio .US
Vamos dar um exemplo de trabalho de um TLD com muitos rótulos historicamente, isto é
.US
. Escolhendo qualquer exemplo online, vamos usarwww.teh.k12.ca.us
.Obviamente, se você consultar esse nome, ou mesmo
teh.k12.ca.us
recuperar osA
registros. Nada conclusivo aqui para o nosso propósito (existe até um CNAME no meio dele, mas não nos importamos com isso):Vamos pesquisar agora
k12.ca.us
(não estou consultando o servidor de nomes autoritativo, mas isso não altera o resultado):O que aprendemos dessa resposta?
Primeiro, é um sucesso porque o status é
NOERROR
. Se tivesse sido qualquer outra coisa e especificamenteNXDOMAIN
entãoteh.k12.ca.us
, nemwww.teh.k12.ca.us
poderia existir.Segundo, a seção RESPOSTA está vazia. Não há
A
registros parak12.ca.us
. Isso não é um erro, esse tipo (A
) não existe para este registro, mas talvez existam outros tipos de registro para esse registro ou esse registro é um ENT, também conhecido como "Empty Non Terminal": está vazio, mas não é uma folha, existem coisas "abaixo" (veja a definição na RFC 7719 ), como já sabemos (mas normalmente a resolução é de cima para baixo, portanto, alcançaremos essa etapa antes de descer um nível abaixo e não o contrário, como estamos fazendo aqui para demonstração finalidade).É por isso que, na verdade, como atalho, dizemos que o código de status é
NODATA
: este não é um código de status real, apenas significaNOERROR
+ seção ANSWER vazia, o que significa que não há dados para esse tipo de registro específico, mas pode haver para outros.Você pode repetir a mesma experiência para o mesmo resultado se consultar com o próximo rótulo "up", que é o nome
ca.us
.Resultados das consultas versus conteúdo do arquivo de zona
Agora, de onde a confusão pode vir? Acredito que possa resultar de alguma idéia falsa que qualquer ponto em um nome DNS significa que há uma delegação. Isto é falso. Dito de forma diferente, seu
example.com
arquivo de zona pode ser assim, e é totalmente válido e funcionando:Com esse arquivo de zona, ao consultar este servidor de nomes, você obterá exatamente o comportamento observado acima: uma consulta para
intermediate.example.com
retornaráNOERROR
com uma resposta vazia. Você não precisa criá-lo especificamente no arquivo de zona (se você não precisar dele por outros motivos), o servidor de nomes autoritário cuidará de sintetizar as respostas "intermediárias", porque ele precisa desse terminal não terminal vazio (e qualquer outros "no meio", se houvesse outros rótulos) como ele vê o nome da folhaleaf.intermediate.example.com
.Observe que esse é um caso amplamente difundido em algumas áreas, mas você pode não vê-lo porque tem como alvo mais registros de "infraestrutura" aos quais as pessoas não estão expostas:
in-addr.arp
ouip6.arpa
, e especificamente a última. Você terá registros como1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.a.1.d.e.1.6.8.0.0.0.0.0.0.2.6.2.ip6.arpa. 1h IN PTR text-lb.eqiad.wikimedia.org.
e obviamente não há uma delegação em cada ponto, nem registros de recursos anexados em cada rótuloSRV
registros, como_nicname._tcp.fr. 12h IN SRV 0 0 43 whois.nic.fr.
, um domínio pode ter muitos_proto._tcp.example.com
e_proto._udp.example.com
SRV
registros, porque pelo projeto que deve ter esta forma, mas, ao mesmo tempo_tcp.example.com
e_udp.example.com
vai permanecer vazio Não-terminais, porque nunca usei como registroswhatever._domainkey.example.com
, mas obviamente_domainkey.example.com
nunca será usado por si só, portanto continuará sendo um não terminal vazio. Esta é a mesma paraTLSA
registos em DANE (ex:_25._tcp.somehost.example.com. TLSA 3 1 1 BASE64==
), ouURI
registos (ex:_ftp._tcp IN URI 10 1 "ftp://ftp1.example.com/public"
)Comportamento do servidor de nomes e geração de respostas intermediárias
Por que o servidor de nomes sintetiza automaticamente essas respostas intermediárias? O algoritmo de resolução principal para o DNS, conforme detalhado na seção 4.3.2 da RFC 1034, é a razão disso, vamos tomá-lo e resumir em nosso caso ao consultar o servidor de nomes autoritativo acima para o nome
intermediate.example.com
(este é oQNAME
protocolo abaixo):O servidor de nomes encontra a zona
example.com
como o ancestral mais próximo de QNAME, para que possamos ir para a etapa 3.Temos agora isso:
Podemos eliminar os casos bec, porque nosso arquivo de zona não tem delegação (portanto, nunca haverá uma referência a outros servidores de nomes, nenhum caso b), nem curingas (portanto, nenhum caso c).
Nós só temos que lidar aqui com o caso a.
Começamos a corresponder, etiqueta por etiqueta, na zona. Portanto, mesmo se tivéssemos um
sub.sub.sub.sub.sub.sub.sub.sub.example.com
nome longo , em algum momento chegamos ao caso a: não encontramos uma referência nem um curinga, mas acabamos no nome final para o qual desejávamos um resultado.Em seguida, aplicamos o restante do conteúdo do caso a:
Não é o nosso caso, ignoramos isso.
Seja qual for QTYPE nós escolhemos (
A
,AAAA
,NS
, etc.) não temos RRS paraintermediate.example.com
que ele não aparece na zonefile. Portanto, a cópia aqui está vazia. Agora terminamos na etapa 6:Não é relevante para nós aqui, por isso terminamos com sucesso.
Isso explica exatamente o comportamento observado: essas consultas retornarão,
NOERROR
mas também nenhum dado.Agora, você pode se perguntar: "mas se eu usar qualquer nome, como
another.example.com
no algoritmo acima, eu deveria receber a mesma resposta (sem erro)", mas as observações serão relatadasNXDOMAIN
nesse caso.Por quê?
Como todo o algoritmo, conforme explicado, começa com isso:
Isso significa que o arquivo de zona acima é transformado nessa árvore:
Portanto, ao seguir o algoritmo, de cima, você pode realmente encontrar um caminho:
com > example > intermediate
(porque o caminhocom > example > intermediate > leaf
existe). Masanother.example.com
, depois decom > example
não encontrar oanother
rótulo na árvore, como nó filho deexample
. Portanto, caímos na parte da escolha c de cima:O rótulo
*
não existe e não seguimos aCNAME
, portanto, estamos no casoset an authoritative name error in the response and exit
:, akaNXDOMAIN
.Observe que todas as opções acima criaram confusão no passado. Isso é coletado em alguns RFCs. Veja, por exemplo, este lugar inesperado (a alegria das especificações de DNS serem tão impenetráveis) definindo caracteres curinga: RFC 4592 "O papel dos caracteres curinga no sistema de nomes de domínio" e notavelmente sua seção 2.2 "Regras de existência", também citada em parte no início de minha resposta, mas aqui está mais completa:
E então a definição na próxima seção é o parágrafo que citei no começo.
Note-se que RFC 8020 (na
NXDOMAIN
verdade significaNXDOMAIN
, isto é, se você responderNXDOMAIN
paraintermediate.example.com
, em seguida,leaf.intermediate.example.com
não pode existir) foi mandatada em parte porque vários provedores de DNS não seguiu esta interpretação e que o caos criado, ou eles eram apenas erros, ver, por exemplo um presente corrigido em 2013 em um código de servidor de nomes autoritário de código aberto: https://github.com/PowerDNS/pdns/issues/127As pessoas precisavam, então, colocar contra-medidas específicas apenas para elas: isso não é um cache agressivo,
NXDOMAIN
porque para esses provedores, se você chegarNXDOMAIN
a algum nó, ainda pode significar que você obtém algo mais do queNXDOMAIN
em outro nó abaixo dele.E isso estava impossibilitando a minimização do QNAME (RFC 7816) (consulte https://indico.dns-oarc.net/event/21/contributions/298/attachments/267/487/qname-min.pdf para obter mais detalhes) , enquanto se queria aumentar a privacidade. A existência de não terminais vazios no caso do DNSSEC também criou problemas no passado, em torno do manuseio da inexistência (consulte https://indico.dns-oarc.net/event/25/contributions/403/attachments/378/647 /AFNIC_OARC_Dallas.pdf, se estiver interessado, mas você realmente precisa de um bom entendimento do DNSSEC antes).
As duas mensagens a seguir dão um exemplo de problemas que um provedor precisava para aplicar adequadamente essa regra em Terminais Não Terminais Vazios, fornece uma perspectiva dos problemas e por que estamos lá:
fonte
É possível que eu não entenda a resposta de Khaled, mas a falta de registros intermediários não deve, de modo algum, ser um problema com a resolução do nome da subzona. Observe que essa saída de dig não é nem é direcionada a um servidor DNS autoritativo para
teaparty.net
ou qualquer subzona:De fato, você deve conseguir fazer isso
dig
sozinho e obter essa resposta -teaparty.net
é um domínio real, sob meu controle, e realmente contém esseA
registro. Você pode verificar se não há registros para nenhuma dessas zonas entrevery
eteaparty.net
e que isso não afeta a resolução do nome do host acima.fonte
teaparty.net
os registros em um único arquivo de zona, para que os registros vazios sejam sintetizados para os domínios intermediários. Alguém pode explicar o que aconteceria separents.teaparty.net
fosse uma delegação every.deep.host.with.no.immediate
tivesse apenas um registro no arquivo de zona de delegação?teaparty.net
é um subdomínio delegado denet
; se o único registro A em seu arquivo de zonavery.deep...
não importasse.Se você estiver consultando diretamente o servidor DNS autoritativo, obterá respostas sem problemas.
No entanto, você não receberá uma resposta válida se estiver consultando por outro servidor DNS que não possui um cache válido. A consulta
intermediate.example.com
resultará emNXDOMAIN
erro.fonte
NXDOMAIN
, deve resultar em umNOERROR
código e uma seção de resposta vazia.intermediate.example.com
se não está sendo usado para nada. Portanto, mesmo que retorne um erro (não retorna), que diferença faz?NXDOMAIN
, você consegueNOERROR
. Essa é a resposta para um nó que existe na hierarquia DNS, mas não possui nenhum registro do tipo solicitado.NS
registros, mas você solicitarA
registros, receberáNOERROR
uma resposta vazia.NXDOMAIN
paraintermediate.example.com
então isso significa que não há nada de "abaixo" e, em seguida,leaf.intermediate.example.com
não pode existir. Alguns resolvedores recursivos agressivos podem até armazenar em cache isso e deduzir as coisas sozinhos.Para responder diretamente à pergunta, não, você não precisa adicionar registros para nomes intermediários que você não está realmente usando, no entanto, isso não significa que esses nomes não existem.
Quanto a esses nomes existirem ou não, essa é realmente uma questão totalmente separada, para a qual espero fornecer uma resposta breve e bastante intuitiva.
Tudo se resume a que o DNS é uma estrutura em árvore, onde cada rótulo em um nome de domínio é um nó em árvore. Por exemplo,
www.example.com.
tem as etiquetaswww
,example
,com
e `` (nó raiz), que são os nós da árvore que formam o caminho todo o caminho até a raiz.O que talvez torne essa natureza fundamental do DNS não óbvia é que quase sempre ao gerenciar dados DNS, não há árvore a ser vista e geralmente não trabalhamos diretamente com os nós da árvore, em vez disso, geralmente temos uma lista achatada de qual registro dados que devem existir em diferentes nomes de domínio (efetivamente caminhos de árvore, conforme acima).
O que acontece quando essa lista nivelada é usada é que o software do servidor DNS constrói a árvore com base nos registros existentes e, se houver lacunas entre os nós que possuem registros (por exemplo, existem registros para
foo.bar.example.com.
eexample.com.
nãobar.example.com.
), eles são simplesmente considerados uma árvore vazia nós. Ou seja, esses são nomes de domínio / nós que de fato existem, a árvore não está quebrada, esses nós simplesmente não têm dados associados a eles.Conseqüentemente, se você consultar um desses nós vazios, receberá uma
NODATA
resposta ( seçãoNOERROR
status +SOA
na autoridade), dizendo que o tipo de registro solicitado não existia nesse nó. Se, em vez disso, você consultar um nome que realmente não existe, você receberá umaNXDOMAIN
resposta, dizendo que o nome de domínio solicitado não existe na árvore.Agora, se você quiser os detalhes minuciosos, leia a resposta muito completa de Patrick Mevzek.
fonte