TL é válido em um registro CNAME
em ambos os lados, leia abaixo o motivo.
RFC 1034 e outros definem registros baseados em "nomes de domínio", que são rótulos com qualquer caractere, incluindo _
.
Mas alguns registros possuem regras mais rigorosas para o nome do proprietário e / ou os dados do recurso (RDATA). Apenas um nome de host será aceito e, de fato, as regras são agora (elas foram relaxadas no passado onde um nome de host não pôde ser iniciado com um dígito) que você pode usar qualquer letra ASCII (sem diferenciação de maiúsculas), qualquer dígito ASCII e hífens , além de algumas regras extras de posição: sem hífen no início ou no final e sem hífens duplos nas posições 3 e 4 (por causa de "reserva" para IDNs que estão no formato xn--
, o que é apenas um caso permitido).
Por exemplo, o nome do proprietário de um registro A
ou AAAA
é um nome de host, não um nome de domínio.
assim
test.example.com A 192.0.2.1
é válido porque todos estes não são:
_test.example.com A 192.0.2.1
-test.example.com A 192.0.2.1
test-.example.com A 192.0.2.1
É fácil testar coisas com o programa named-checkzone
(parte do software bind
nameserver, mas pode ser usado e instalado separadamente e outros servidores de nomes podem ter ferramentas de verificação semelhantes e provavelmente também existem interfaces online para isso) , basta colocar registros em um arquivo e executá-lo em:
$ cat z1.txt
test.example.com. 1 IN A 192.0.2.1
_test.example.com. 1 IN A 192.0.2.1
-test.example.com. 1 IN A 192.0.2.1
test-.example.com. 1 IN A 192.0.2.1
$ /usr/local/sbin/named-checkzone example.com z1.txt
z1.txt:2: _test.example.com: bad owner name (check-names)
z1.txt:3: -test.example.com: bad owner name (check-names)
z1.txt:4: test-.example.com: bad owner name (check-names)
(o número antes de o IN
ser o TTL, isso não está relacionado ao nosso problema aqui, mas necessário apenas para passar a validação da sintaxe de um registro).
Para outros registros, é o oposto: para NS
não há restrições sobre o proprietário, mas restrições no "destino" que são os dados. Os dados podem ser apenas um nome de host, não um nome de domínio, porque você precisa apontar para os servidores de nomes autoritativos que são hosts físicos que respondem às consultas DNS.
Agora, sobre CNAME
, aqui estão as citações relevantes da RFC 1034, na seção 3.6:
"owner: which is the domain name where the RR is found." which means by default any name, not just an hostname (as source of the CNAME record)
"RDATA: which is the type and sometimes class dependent data which describes the resource:"
"CNAME a domain name."
Portanto, o proprietário de um CNAME
(o que está à esquerda dele) e os dados de recurso anexados a ele, seu destino / destino (o que está à direita dele) são nomes de domínio e não nomes de host só. Basicamente, qualquer caractere, portanto, incluir _
é permitido em ambos os lados.
Mais uma vez, é fácil testar com named-checkzone
:
$ cat z2.txt
_foo 1 CNAME _bar
$ /usr/local/sbin/named-checkzone example.com z2.txt
zone example.com/IN: has 0 SOA records
zone example.com/IN: has no NS records
zone example.com/IN: not loaded due to errors.
Não há nenhum erro sobre o CNAME
(os outros erros são esperados, já que na minha zona falsa eu não coloquei nenhum registro SOA
ou NS
como uma zona verdadeira teria)