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 dns
no /etc/nsswitch.conf
iní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 *.local
os 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
- O módulo 'arquivos' pesquisa /etc/hosts e retorna "não encontrado".
- O processamento continua no próximo módulo.
- O módulo 'mdns4_minimal' pesquisa a sub-rede LAN local usando Multicast DNS (mDNS) e retorna "não encontrado".
[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.- 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 – *.local
os 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 .local
DNS 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