Qual é a ordem em que o Linux resolve DNS
? Eu leio /etc/nsswitch.conf
, depois leio hosts
, depois vou para /etc/resolv.conf
o DNS e depois para a conexão de rede DNS
?
Eu sei muito pouco sobre DNS
e ficaria grato por qualquer resposta que pudesse me ajudar a entender
A ordem na qual o Linux resolve o DNS é bastante configurável .
Primeiro leia a
hosts:
linha em/etc/nsswitch.conf
. As palavras-chave nessa linha especificam a ordem em que várias fontes são usadas.O conjunto de palavras-chave disponíveis depende da sua distribuição do Linux. Os clássicos são:
files
diz ao sistema para ler/etc/hosts
dns
diz ao sistema para usar os servidores DNS especificados em/etc/resolv.conf
. (Novos sistemas usandosystemd-resolved
podem estar trabalhando para eventualmente tornar isso obsoleto.)nis
ounisplus
referir-se-ia à tabela de hosts gerenciados centralmente do sistema NIS/NIS+ (praticamente obsoleta)compat
é comofiles
, mas também permite a antiga sintaxe de extensão NIS que era usada antes de/etc/nsswitch.conf
existir. (praticamente obsoleto)Os sistemas modernos podem ter novas palavras-chave adicionadas, como:
resolve
diz ao sistema para usarsystemd-resolved
. Se esta palavra-chave estiver presente, use oresolvectl
comando para visualizar as configurações reais do servidor DNS. Se adns
palavra-chave também não estiver presente, o/etc/resolv.conf
arquivo pode ser completamente ignorado .mdns4_minimal
,mdns6_minimal
oumdns_minimal
diga ao sistema para tentar resolver nomes de host curtos ou nomes longos do formulárioshortname.local
enviando um pacote mDNS para o endereço multicast apropriado, usando IPv4, IPv6 ou ambos, respectivamente. O endereço multicast é 224.0.0.251 para IPv4 e ff02::fb para IPv6, e a porta de destino é 5353/UDP em ambos os casos. Se outros sistemas na mesma rede tiveremavahi-daemon
ou outro respondedor mDNS configurado, isso pode permitir que você use nomes de host em seu segmento de rede local sem configurar um servidor DNS real ou manter/etc/hosts
arquivos em todos os sistemas.myhostname
permite que o sistema sempre resolva com sucesso seu próprio nome de host, mesmo se nenhum/etc/hosts
servidor DNS estiver configurado e nenhuma conexão de rede estiver presente.mymachines
permite que o sistema resolva automaticamente os nomes de host de máquinas virtuais que foram configuradas usandosystemd-machined.service
Pode haver outras palavras-chave, pois o
/etc/nsswitch.conf
sistema pode ser estendido fornecendo bibliotecas compartilhadas que implementam a API Name Service Switch, denominada comolibnss_<keyword>.so*
.Se você vir a linha
nameserver 127.0.0.53
em/etc/resolv.conf
, isso também é um sinal de quesystemd-resolved
está em uso e você deve usarresolvectl
para verificar as configurações de DNS reais.A maioria dos programas usa as funções de resolução de nome de host da biblioteca padrão C (geralmente
glibc
), mas alguns programas muito antigos ou projetados para diagnósticos de DNS serão lidos/etc/resolv.conf
diretamente.Usando a palavra-chave
resolve
in/etc/nsswitch.conf
, as funções de resolução de nome de host da biblioteca padrão C são roteadas diretamente parasystemd-resolved
, e tendonameserver 127.0.0.53
in/etc/resolv.conf
também redireciona quaisquer programas antigos/diagnósticos para usar o localsystemd-resolved
.A
dns
palavra-chave e/etc/resolv.conf
está sendo considerada para substituição porque eles realmente não suportam o conceito de servidores DNS específicos de conexão: eles têm uma suposição interna de que todos os servidores DNS sabem todas as mesmas coisas, portanto, se um servidor DNS disser algo, não existem, eles assumem que não há razão para pedir uma segunda opinião de um servidor DNS diferente.systemd-resolved
permite que servidores DNS específicos de conexão sejam configurados e também permite direcionar consultas sobre domínios específicos para servidores DNS específicos de conexão.(Tecnicamente, se um servidor DNS responder "o registro que você pediu não existe", é uma resposta válida, não um erro - embora possa não ser o tipo de resposta que você queria. Somente respostas como "Não consigo responder essa pergunta" ou "Não tenho permissão para lhe dizer" seriam erros.)