Por que minha resolução de nome atinge o DNS mesmo com uma entrada de arquivo de hosts?

15

Estou executando o Ubuntu 10.04.2 LTS Desktop. Sendo um desenvolvedor web, naturalmente criei um "me.com" no meu /etc/hostsarquivo. Infelizmente, minha resolução de nome está saindo para o DNS antes de verificar primeiro a entrada dos hosts locais e não consigo descobrir o porquê.

O resultado final é que, se o meu /etc/resolv.conf contiver nameserver 127.0.0.1primeiro, recebo uma resposta no meu navegador da web me.com (local) em menos de um segundo. Mas se eu não tiver essa entrada, minha resposta levará algumas vezes até 5 segundos se meu ISP estiver um pouco lento.

O problema era tão problemático que eu realmente tive que fazer uma pergunta aqui (e alguém a resolveu) sobre como inserir automaticamente essa entrada /etc/resolv.conf. Mas um dos usuários (@shellholic) aqui altamente recomendado (e comentou comigo sobre isso) que eu deveria registrar esta pergunta.

Você sabe por que a resolução de nomes da minha estação de trabalho precisa atingir o servidor DNS primeiro antes de acessar minha /etc/hostsentrada de arquivo? Por enquanto, estou usando o truque resolv.conf .

Volomike
fonte
1
Você pode tentar olhar /etc/nsswitch.conf. As entradas no meu sistema são um pouco óbvias, mas você pode testar as pesquisas apenas filescomo uma opção e ver se isso fez alguma diferença.
Belacqua
Sim, você poderia nos dar a saída de cat /etc/nsswitch.confe cat /etc/host.conf? Além disso: como você está testando isso (através de ping, navegador, farejamento de pacotes etc.)?
organize
Para completar a versão do @arrange, você pode anexar o resultado de time getent hosts me.com; hostname --fqdn; grep 'me.com' /etc/hosts; grep hosts /etc/nsswitch.conf; netstat -uln | grep ':53'; cat /etc/host.conf; wc -l /etc/hosts. Não hesite em ofuscar a racionalidade.
shellholic
@shellholic ^ racionalidade ^ racionalmente? heh
Belacqua
@jgbelacqua: Indeed
shellholic

Respostas:

14

O arquivo /etc/nsswitch.confpermitirá que você reconfigure a ordem da resolução de nomes. Por padrão, o arquivo host é o primeiro e, em seguida, o DNS configurado. Poderia haver mais opções.

O arquivo /etc/hostslista apenas endereços IP e nomes de host (vários nomes para um IP, se você desejar)

O arquivo /etc/resolv.conflistará os domínios de pesquisa padrão e também listará em seqüência os servidores de nomes a serem usados.

jfmessier
fonte
4
Lembre-se também de que, uma vez que um nome seja resolvido por um aplicativo ou serviço na sua caixa Linux, ele permanecerá no cache por um período conhecido como TTL (tempo de vida). Portanto, se você alternar a sequência de resolução, é melhor reiniciar o sistema ou limpar qualquer cache.
jfmessier
como você limpa o 'cache'?
Eric Johnson
Não tenho certeza, mas reiniciar uma conexão de rede com os comandos ifup e ifdown poderia fazer isso. Claro, a reinicialização deve limpar o cache, mas estamos usando Linux, certo?
Jfmessier
nscdpode armazenar em cache consultas de resolução de nomes, mas não respeita ttl (e, portanto, o cache de hosts está desativado por padrão). systemd-resolvedtambém armazenará em cache as entradas. Se nenhum deles estiver configurado, os hosts Linux não armazenarão em cache as respostas DNS . (Navegadores provável fazer na camada de aplicação embora)
Gert van den Berg,