No Linux, como o /etc/hosts
DNS trabalha em conjunto para resolver nomes de host para endereços IP?
- se um nome de host puder ser resolvido
/etc/hosts
, o DNS será aplicado depois/etc/hosts
para resolver o nome do host ou tratar o endereço IP resolvido/etc/hosts
como um "nome do host" para resolver recursivamente? No meu navegador (firefox e google chrome), quando adiciono a
/etc/hosts
:127.0.0.1 google.com www.google.com
digitar www.google.com na barra de endereços dos navegadores e pressionar Enter não se conectará ao site. Depois de remover essa linha
/etc/hosts
, posso me conectar ao site. Isso significa que/etc/hosts
substitui o DNS para resolver nomes de host?Depois de adicionar novamente a linha
/etc/hosts
, ainda consigo conectar-me ao site, mesmo depois de atualizar a página. Por que não se/etc/hosts
aplica novamente, para que eu não consiga me conectar ao site?
Obrigado.
/etc/hosts
e os servidores de nomes definidos localmente. É bastante confuso testemunhar a primeira vez. (Olhando para você, navegadores baseados no Chromium!) #/etc/hosts
e os servidores DNS definidos pelo sistema: ( github.com/Eloston/ungoogled-chromium ). Instalação em MacOS com Homebrew:brew cask install eloston-chromium
.Respostas:
Isso é ditado pela configuração do NSS (Name Service Switch), ou seja,
/etc/nsswitch.conf
pelahosts
diretiva do arquivo . Por exemplo, no meu sistema:Aqui,
files
refere-se ao/etc/hosts
arquivo edns
refere-se ao sistema DNS. E como você pode imaginar, o que ocorrer primeiro .Além disso, veja
man 5 nsswitch.conf
para ter mais idéia sobre isso.Como um aparte, a seguir as ordenações resolução anfitrião NSS, o uso
getent
comhosts
a base de dados, por exemplo:fonte
systemd.resolver
afeta as resoluções? Onde o NIS e o LDAP se encaixam no sistema de resolução? Que ordem segue um sistema MacOS ou Windows ?.Para responder apenas à sua última pergunta:
/etc/hosts
não se aplica novamente imediatamente, porquefirefox
está armazenando em cache o último nome de host que recebeugoogle.com
; se você quer que ele sempre buscá-la novamente, você tem que definirnetwork.dnsCacheExpiration
a0
noabout:config
. Mais informações (embora um pouco desatualizadas) aqui . Desculpe se isso é offtopic.Como nota de rodapé, muitos programas não usam o resolvedor padrão (
getaddrinfo(3)
,getnameinfo(3)
[1]) porque é péssimo .Primeiro, a interface não é assíncrona; qualquer programa moderadamente complexo terá que gerar um encadeamento separado, fazendo exatamente o mesmo,
getaddrinfo()
e então inventar seu próprio protocolo para se comunicar com ele (e nem vamos entrargetaddrinfo_a()
, o que está enviando um sinal após a conclusão, por isso é ainda pior).Segundo, a implementação do resolvedor
glibc
(a biblioteca C padrão no linux) é horrível, esperando que você permita que ele puxe objetos dinâmicos aleatórios para o espaço de endereçodlopen()
nas suas costas e torne impossível contê-lo de qualquer forma ou usá-lo estaticamente executáveis vinculados.Uma vez que muitos programas não usam o resolvedor padrão diretamente, eles também não se preocupam em replicar seu comportamento exatamente, e ignorar algumas ou todas
/etc/resolv.conf
,/etc/hosts
,/etc/nsswitch.conf
ou/etc/gai.conf
.[1] e nem mencione o não-reentrante, somente ipv4
gethostbyname()
, que foi descontinuado desde as idades.fonte
google = GHBN("google.com"); facebook = GHBN("facebook.com")
pode acabar com os doisgoogle
efacebook
com o endereço defacebook.com
. Quando as duas chamadas são feitas em segmentos diferentes, é ainda mais engraçado: você pode terminar com um endereço que é metade do google e meio do facebook ou lixo completo.gethostbyname()
agora?getaddrinfo
é a função padrão para isso, mas é em si brokrn, como já expliquei, portanto não é usada como é por navegadores ou outros aplicativos da vida real.O arquivo
/etc/hosts
e o DNS não funcionam juntos. Eles fornecem resoluções independentes de nomes (nomes de rede).A cola que os liga está dentro
/etc/nsswitch.conf
dos sistemas Linux . Nos/etc/netsvc.conf
servidores AIX, no sistema para Windows e pode ser listado comlookupd -configuration
(procure LookupOrder, semelhante a:)Cache FF DNS NI DS
nos sistemas MacOS.A ordem real se torna complexa e geralmente complicada, pois cada serviço de resolução de nomes pode (e muitas vezes o faz) procurar dentro de outros níveis de resolução. Like
dnsmasq
(um servidor DNS leve geralmente em127.0.0.1:53
, ou::1:53
(ou ambos)) geralmente lê e inclui o/etc/hosts
conteúdo do arquivo. Ou likesystemd.resolver
(um resolvedor básico que só deve resolver nomes não pontilhados comomycomputer
) chama diretamente resoluções DNS para nomes pontilhados (mycomputer.here.dev.
) sob algumas condições.Em geral, os serviços são chamados em ordem e o primeiro que não falha ganha e é aceito como o endereço correto. A ordem básica geral é:
/etc/hosts
(arquivo), mDNS (nomes não pontilhados), DNS, NIS, NIS +, LDAP. Em alguns sistemas Linux, há uma resolução de último recurso para o computadorhostname
no serviçomyhostname
Por exemplo, neste sistema (de
cat /etc/nsswitch
):Note-se que os muito idosos (glibc 2.4 e anteriores)
order
entrada set em/etc/host.conf
como:Aplique apenas ao
/etc/hosts
serviço de nomes de arquivos (arquivo ).Os efeitos neste computador cliente (linux) relacionados ao NIS e LDAP são (geralmente) controlados pelo servidor DNS usado (ligação, não acoplada etc.).
tão:
Nenhum.
Se um nome de host puder ser resolvido
/etc/hosts
,DNS
ele não se aplicará (se os arquivos estiverem antes do DNS).nem o endereço IP resolvido é tratado como um "nome de host".
Simplesmente é: o endereço resolvido.
navegador
Um navegador pode usar qualquer método para resolver um nome (depois de verificar seu cache de nomes resolvidos). Somente se ele usar um método fornecido pelo sistema, a ordem fornecida acima será aplicada. O navegador, como qualquer programa, pode optar por entrar em contato diretamente com qualquer servidor DNS.
Se a ordem do sistema já tiver sido feita
/etc/hosts
anteriormenteDNS
, isso significa que uma entrada nesse arquivo terá precedência noDNS
serviço de resolução.Assim:
Sim (se o navegador usar o sistema fornecido com resolução).
Somente até o cache interno do navegador ser limpo (ou atingir o tempo limite) para esse nome específico, esse nome será pesquisado fora do navegador novamente.
Se o navegador tiver um nome resolvido em seu cache, ele o utilizará novamente.
Use isso para limpar o cache .
Ou simplesmente feche (espere um pouco) e reinicie o navegador.
fonte