
unbound.conf
é usado para configurarNão consolidado, um resolvedor de DNS com cache. Odocumentaçãoda versão 1.6.8 diz:
Server Options
private-domain: <domain name>
Allow this domain, and all its subdomains to contain private
addresses. Give multiple times to allow multiple domain names
to contain private addresses. Default is none.
Executamos a versão 1.6.0 não vinculada com Debian Stretch (a página de manual e a documentação citada não diferem aqui).
Testamos as três variantes a seguir separadas por
- edição
/etc/unbound/unbound.conf
- verificando
unbound-checkconf
- reiniciando
systemctl restart unbound.service
- monitorando o arquivo de log não vinculado.
Variante 1 (terminando em ponto):
private-domain: domain.example.
Variante 2 (sem terminar em ponto):
private-domain: domain.example
Variante 3 (em determinada ordem):
private-domain: "domain.example. domain.example"
Para todas as três variantes unbound-checkconf
retorna:
unbound-checkconf: no errors in /etc/unbound/unbound.conf
Na variante 3 encontramos no arquivo de log:
debug: ignoring duplicate private-domain: domain.example.
Faz sentido, porque uma entrada para o mesmo nome de domínio tem que ser suficiente e parece verificar que unbound tem um tratamento idêntico para ambas as formas de escrever os nomes de domínio (com/sem ponto).
Ambas as formas estão funcionando, mas qual é a sintaxe correta para definir nomes de domínio privados não vinculados? Os nomes de domínio devem terminar em ponto ou não? O ponto no final é útil ou sem sentido? Que implicações um ponto desnecessário ou ausente poderia ter?
Responder1
Essa pergunta é antiga, mas ainda apareceu para mim como a primeira entrada em uma pesquisa, então vale a pena tentar responder, na IMO.
Resumindo: neste contexto, e na maioria dos outros, não há diferença prática entre domain.example
(with no trailing .
) e domain.example.
(with the training .
). Ambos estão, portanto, corretos.
Agora a resposta longa. :) Esta resposta – e o único outro comentário agora aqui, de 2018 – procede do que diz a especificação, como também faz o comentário de 2018 ao OP. Embora possa haver diferenças semânticas entre o RFC e a forma como o Unbound usa nomes de domínio, isso seria um desvio da especificação e provavelmente considerado um bug.
RFC 1034 Seção 3.1define a sintaxe central dos nomes de domínio da seguinte forma:
Quando um usuário precisa digitar um nome de domínio, o comprimento de cada rótulo é omitido e os rótulos são separados por pontos ("."). Como um nome de domínio completo termina com o rótulo raiz, isso leva a um formulário impresso que termina com um ponto. Usamos esta propriedade para distinguir entre:
uma sequência de caracteres que representa um nome de domínio completo (muitas vezes chamado de "absoluto"). Por exemplo, "poneria.ISI.EDU."
uma sequência de caracteres que representa os rótulos iniciais de um nome de domínio que está incompleto e deve ser preenchido por software local usando o conhecimento do domínio local(frequentemente chamado de "relativo"). Por exemplo, "poneria" usado no domínio ISI.EDU.
Nomes relativos são considerados em relação a uma origem bem conhecida ou a uma lista de domínios usada como lista de pesquisa.
Observe a última frase: A menos que seja definida uma "lista de domínios usados como lista de pesquisa", os nomes sem um ponto final são considerados relativos a uma "origem bem conhecida" - ou seja, a raiz da hierarquia de nomes. Para DNS público, a raiz do DNS corresponde aozona raiz; hierarquias de nomes privados raramente se desviam desta convenção.
Para fins práticos, isso significa que um nome de domínio totalmente qualificado (FQDN) sem final .
deve quase sempre ser considerado relativo à raiz da hierarquia de nomes, que é equivalente ao mesmo domínio "absoluto". Portanto, domain.example
== " domain.example
em relação à raiz" == domain.example.
.
Quando as diferentes representações poderão ter implicações? Quando você está lidando comfragmentosde um nome de domínio em vez de um FQDN. Nesse caso, você deve omitir o período e considerar usá-lo nos FQDNs. Se você executar example.com.
(observe o ponto final; o servidor raiz envia *.example.com
tráfego para você) e quiser configurar east.example.com.
como um subdomínio, east
é o subdomínio; east.
é o domínio de nível superior (TLD) .east
.
Novamente: isso é o que diz a especificação. Verifique a documentação da ferramenta que você está configurando, como sempre. Existem também outras áreas da especificação, principalmente a compactação de DNS, onde algumas semânticas adicionais são introduzidas. Você pode ignorá-los se não estiver literalmente analisando ou gerando mensagens no protocolo de transmissão DNS.
Esperamos que isso responda totalmente à pergunta. Espero que isso seja útil para alguém.