CNAME
registros foram originalmente criados para permitir que vários nomes forneçam o mesmo recurso ser alias para um único "nome canônico" para o recurso. Com o advento da hospedagem virtual baseada em nome, tornou-se comum usá-los como uma forma genérica de alias de endereços IP. Infelizmente, a maioria das pessoas que vêm de um histórico de hospedagem na Web espera que CNAME
registros indiquem equivalência no DNS , o que nunca foi a intenção. O ápice contém tipos de registro que são claramente não usados na identificação de um recurso de host canônico ( NS
, SOA
), que não pode ter um alias sem quebrar o padrão em um nível fundamental. (particularmente em relação aos cortes de zonas )
Infelizmente, o padrão DNS original foi escrito antes de os órgãos de governança perceberem que o palavreado explícito era necessário para definir um comportamento consistente ( RFC 2119 ). Foi necessário criar o RFC 2181 para esclarecer vários casos pontuais devido à formulação vaga, e o palavreado atualizado torna mais claro que um CNAME
não pode ser usado para obter o alias do apex sem quebrar o padrão.
6.1. Zone authority
The authoritative servers for a zone are enumerated in the NS records for the origin of the zone, which, along with a Start of Authority (SOA) record are the mandatory records in every zone. Such a server is authoritative for all resource records in a zone that are not in another zone. The NS records that indicate a zone cut are the property of the child zone created, as are any other records for the origin of that child zone, or any sub-domains of it. A server for a zone should not return authoritative answers for queries related to names in another zone, which includes the NS, and perhaps A, records at a zone cut, unless it also happens to be a server for the other zone.
Isso estabelece que os registros SOA
e NS
são obrigatórios, mas não diz nada sobre A
ou outros tipos que aparecem aqui. Pode parecer supérfluo citar isso então, mas se tornará mais relevante em um momento.
RFC 1034 foi um pouco vago sobre os problemas que podem surgir quando um CNAME
existe ao lado de outros tipos de registro. A RFC 2181 elimina a ambiguidade e declara explicitamente os tipos de registro que podem existir ao lado deles:
10.1. CNAME resource records
The DNS CNAME ("canonical name") record exists to provide the canonical name associated with an alias name. There may be only one such canonical name for any one alias. That name should generally be a name that exists elsewhere in the DNS, though there are some rare applications for aliases with the accompanying canonical name undefined in the DNS. An alias name (label of a CNAME record) may, if DNSSEC is in use, have SIG, NXT, and KEY RRs, but may have no other data. That is, for any label in the DNS (any domain name) exactly one of the following is true:
+ one CNAME record exists, optionally accompanied by SIG, NXT, and KEY RRs, + one or more records exist, none being CNAME records, + the name exists, but has no associated RRs of any type, + the name does not exist at all.
"nome do alias" neste contexto refere-se ao lado esquerdo do registro CNAME
. A lista com marcadores deixa claro que os registros SOA
, NS
e A
não podem ser vistos em um nó onde também aparece CNAME
. Quando combinamos isso com a seção 6.1, é impossível que exista um CNAME
no ápice, já que ele teria que conviver com os registros SOA
e NS
obrigatórios.
(Isto parece fazer o trabalho, mas se alguém tiver um caminho mais curto para a prova, por favor, dê uma chance a isso.)
Atualização:
Parece que a confusão mais recente está ocorrendo em recente decisão da Cloudflare para permitir que um registro CNAME ilegal seja definido no ápice dos domínios, para o qual eles irão sintetizar os registros A. "Compatível com RFC", conforme descrito pelo artigo vinculado, refere-se ao fato de que os registros sintetizados pelo Cloudflare funcionarão bem com o DNS. Isso não altera o fato de que é um comportamento completamente personalizado.
Na minha opinião, isso é um desserviço à comunidade DNS maior: não é, de fato, um registro CNAME, e engana as pessoas, acreditando que outro software é deficiente por não permitir isso. (como minha pergunta demonstra)