Por que preciso alterar a ordem dos hosts no nsswitch.conf?

Por que preciso alterar a ordem dos hosts no nsswitch.conf?

Na minha empresa, quando instalo um Ubuntu, não consigo executar ping em nenhuma máquina local:

$ ping foobar.mycompany.local
ping foobar.mycompany.local: Name or service not known

Mas se eu colocar dnsno /etc/nsswitch.confinício da lista, funciona:

# hosts:          files mdns4_minimal [NOTFOUND=return] dns
hosts:          dns files mdns4_minimal [NOTFOUND=return]

Eu gostaria de entender o porquê.

Responder1

Sua empresa usa um domínio DNS que termina com .local, que na verdade é um sufixo para fins especiais e é reservado pela IETF paraDNS multicast. Então, como você tem um cliente mDNS instalado (mdns4_minimal), ele é configurado para tratamento prioritário de todos *.localos nomes.

(Infelizmente ainda é prática comum em intranets corporativas criar apenas um nome de domínio inexistente ouendereço de IPalcance e espero que permaneça inexistente para sempre...)


Percorra seus módulos configurados um por um:

hosts: files mdns4_minimal [NOTFOUND=return] dns
  1. O módulo 'arquivos' pesquisa /etc/hosts e retorna "não encontrado".
  2. O processamento continua no próximo módulo.
  3. O módulo 'mdns4_minimal' pesquisa a sub-rede LAN local usando Multicast DNS (mDNS) e retorna "não encontrado".
  4. [NOTFOUND=return]indica que o processamento não deve continuar após esse erro; ou seja, "não encontrado" deve ser imediatamente retornado ao programa.
  5. O módulo 'dns' nunca é alcançado.

Por que o "[NOTFOUND=return]" extra? De acordo com várias fontes, ele existe para acelerar consultas malsucedidas, evitar vazamento de informações e reduzir a carga em servidores DNS públicos.

Digamos que a rede de alguémrealmente usadomDNS (que é comum em Linux/macOS). Se o usuário tentasse resolver "MyLittleLaptop.local" e não fosse encontrado, o sistema continuaria tentando o próximo módulo ('dns'), e a consulta seria enviada para o DNS público (por exemplo, para os servidores DNS da escola, ou ao roteador da cafeteria).

Mas – de acordo com a reserva da IETF – *.localos nomes não podem existir no DNS público, portanto tal consulta seria inútil, tudo o que faz é revelar as suas informações pessoais ao administrador da rede. Portanto, a tag [NOTFOUND=return] é adicionada para impedir que ele alcance o DNS completamente.


Se sua rede corporativa usa .localDNS interno e você estábastante certoele nunca usará mDNS, você pode remover o módulo inteiro – resultando em:

hosts: files dns

Se você deseja priorizar o DNS, mas manter aberta a possibilidade de usar o mDNS, mova-o para o final:

hosts: files dns mdns_minimal

informação relacionada