Esta é uma pergunta canônica sobre CNAMEs nos ápices (ou raízes) das zonas
É um conhecimento relativamente comum que CNAME
registros no ápice de um domínio são uma prática tabu.
Exemplo:
example.com. IN CNAME ithurts.example.net.
Na melhor das hipóteses, o software do servidor de nomes pode se recusar a carregar a configuração e, na pior das hipóteses, pode aceitar essa configuração e invalidar a configuração de exemplo.com.
Recentemente, uma empresa de hospedagem na web passou as instruções para uma unidade de negócios que precisávamos CNAME do ápice do nosso domínio para um novo registro. Sabendo que isso seria uma configuração suicida quando alimentado com o BIND, eu os avisei que não poderíamos cumprir e que esse era um conselho geral em geral. A empresa de hospedagem adotou a posição de que não é totalmente proibido pelas RFCs de definição padrão e que o software delas é compatível. Se não pudéssemos CNAME o ápice, o conselho deles era não ter nenhum registro do ápice e eles não forneceriam um servidor da web de redirecionamento. ...O que?
Muitos de nós sabemos que o RFC1912 insiste que A CNAME record is not allowed to coexist with any other data.
, mas sejamos honestos aqui, que o RFC é apenas informativo. O mais próximo que conheço de palavreado que proíbe a prática é o RFC1034 :
Se um RR CNAME estiver presente em um nó, nenhum outro dado deverá estar presente; isso garante que os dados para um nome canônico e seus aliases não possam ser diferentes.
Infelizmente, estou na indústria há tempo suficiente para saber que "não deveria" não é o mesmo que "não devo", e isso é corda suficiente para a maioria dos designers de software se envolver. Sabendo que qualquer coisa que não fosse um link conciso para um slam dunk seria um desperdício de tempo, acabei deixando a empresa escapar com uma bronca por recomendar configurações que poderiam quebrar o software usado sem a devida divulgação.
Isso nos leva às perguntas e respostas. Pela primeira vez, gostaria que fôssemos realmente técnicos sobre a loucura dos CNAMEs de ponta, e não contornássemos a questão como costumamos fazer quando alguém posta sobre o assunto. O RFC1912 está fora dos limites, assim como qualquer outro RFC informativo aplicável aqui que eu não tenha pensado. Vamos desligar esse bebê.
fonte
Respostas:
CNAME
os registros foram criados originalmente para permitir que vários nomes que fornecem o mesmo recurso sejam aliasados a um único "nome canônico" do recurso. Com o advento da hospedagem virtual baseada em nome, tornou-se comum usá-los como uma forma genérica de alias de endereço IP. Infelizmente, a maioria das pessoas que tem experiência em hospedagem na web espera que osCNAME
registros indiquem equivalência no DNS , o que nunca foi o objetivo. O ápice contém tipos de registro que claramente não são usados na identificação de um recurso de host canônico (NS
,SOA
), que não pode ser alternativo sem quebrar o padrão em um nível fundamental. (particularmente em relação a cortes de zona )Infelizmente, o padrão DNS original foi escrito antes que os órgãos que governam os padrões percebessem que era necessária uma linguagem explícita para definir um comportamento consistente ( RFC 2119 ). Foi necessário criar o RFC 2181 para esclarecer vários casos de canto devido a termos vagos, e a palavreada atualizada deixa mais claro que um
CNAME
não pode ser usado para obter um alias de ápice sem quebrar o padrão.Isso estabelece que
SOA
e osNS
registros são obrigatórios, mas não diz nada sobreA
ou outros tipos que aparecem aqui. Pode parecer supérfluo que cite isso, mas se tornará mais relevante em um momento.O RFC 1034 era um tanto vago sobre os problemas que podem surgir quando
CNAME
existe um ao lado de outros tipos de registro. O RFC 2181 remove a ambiguidade e declara explicitamente os tipos de registro que podem existir ao lado deles:"nome alternativo", neste contexto, refere-se ao lado esquerdo do
CNAME
registro. A lista com marcadores torna explicitamente claro que umSOA
,NS
eA
os registros não podem ser vistos em um nó onde umCNAME
também aparece. Quando combinamos isso com a seção 6.1, é impossível queCNAME
a exista no ápice, pois teria que viver ao lado de registrosSOA
e obrigatóriosNS
.(Isso parece fazer o trabalho, mas se alguém tiver um caminho mais curto para a prova, dê uma olhada nele.)
Atualizar:
Parece que a confusão mais recente vem da recente decisão da Cloudflare de permitir que um registro CNAME ilegal seja definido no ápice dos domínios, para o qual eles sintetizarão os registros A. "Compatível com RFC", conforme descrito no artigo vinculado, refere-se ao fato de que os registros sintetizados pelo Cloudflare serão compatíveis com o DNS. Isso não altera o fato de que é um comportamento completamente personalizado.
Na minha opinião, isso é um desserviço para a comunidade DNS maior: na verdade, não é um registro CNAME e leva as pessoas a acreditar que outro software é deficiente por não permitir. (como minha pergunta demonstra)
fonte
SOA
+NS
registos, 2. OsCNAME
registos não são permitidos para coexistir com outros dados)CNAME
realmente significa um registro, pois esse é provavelmente o tipo de registro mais incompreendido. Mesmo que isso esteja além do ponto, acho que esse FAQ é um resultado direto de muitos (a maioria?) Não terem um entendimento adequadoCNAME
.SRV
, o que também tornaria isso um problema. O problema não se limita ao que é discutido aqui;CNAME
é contrário à crença popular, não é uma boa combinação para o que é necessário. No final, comoCNAME
não funciona como as pessoas esperam (!) E não pode ser redesenhado retroativamente e como as implementações HTTP não usamSRV
, parece mais provável que a funcionalidade de estilo "alias" se torne mais prevalente para atender ao HTTP (tipo específico de registro aliasing implementada nos bastidores, em vez de como um tipo de registro visível)O Internet Systems Consortium publicou recentemente um artigo no CNAME no ápice de uma zona , por que essa restrição existe e várias alternativas. É provável que isso não mude tão cedo, infelizmente:
Mas há esperança:
fonte
Se você estiver redirecionando uma zona inteira, use DNAME. De acordo com a RFC 6672 ,
fonte