¿Por qué necesito cambiar el orden de los hosts en nsswitch.conf?

¿Por qué necesito cambiar el orden de los hosts en nsswitch.conf?

En mi empresa, cuando instalo Ubuntu, no puedo hacer ping a ninguna máquina local:

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

Pero si lo pongo dnsal /etc/nsswitch.confprincipio de la lista, entonces funciona:

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

Me gustaría entender por qué.

Respuesta1

Su empresa utiliza un dominio DNS que termina en .local, que en realidad es un sufijo de propósito especial y está reservado por el IETF paraDNS de multidifusión. Entonces, debido a que tiene instalado un cliente mDNS (mdns4_minimal), se configura para el manejo prioritario de todos *.locallos nombres.

(Desafortunadamente, todavía es una práctica común en las intranets corporativas simplemente crear un nombre de dominio inexistente odirección IPrango y espero que permanezca inexistente para siempre...)


Revise sus módulos configurados uno por uno:

hosts: files mdns4_minimal [NOTFOUND=return] dns
  1. El módulo 'archivos' busca /etc/hosts y luego devuelve "no encontrado".
  2. El procesamiento continúa con el siguiente módulo.
  3. El módulo 'mdns4_minimal' busca la subred LAN local utilizando DNS de multidifusión (mDNS) y luego devuelve "no encontrado".
  4. [NOTFOUND=return]indica que el procesamiento no debe continuar después de este error; es decir, "no encontrado" debe devolverse inmediatamente al programa.
  5. Nunca se alcanza el módulo 'dns'.

¿Por qué el "[NOTFOUND=return]" adicional? Según diversas fuentes, está ahí para acelerar las consultas fallidas, evitar la fuga de información y reducir la carga en los servidores DNS públicos.

Digamos la red de alguien.realmente usadomDNS (que es común en Linux/macOS). Si el usuario intentaba resolver "MyLittleLaptop.local" y no lo encontraba, el sistema seguiría intentando con el siguiente módulo ("dns") y la consulta se enviaría al DNS público (por ejemplo, a los servidores DNS de la escuela). o al router de la cafetería).

Pero, según la reserva del IETF, *.locales imposible que los nombres existan en el DNS público, por lo que dicha consulta sería inútil, lo único que hace es revelar su información personal al administrador de la red. Entonces se agrega la etiqueta [NOTFOUND=return] para evitar que llegue al DNS por completo.


Si su red corporativa utiliza .localDNS interno y estábastante seguronunca usará mDNS, puedes eliminar todo el módulo, lo que dará como resultado:

hosts: files dns

Si desea priorizar DNS, pero mantener abierta la posibilidad de usar mDNS, muévalo al final:

hosts: files dns mdns_minimal

información relacionada