sábado, 10 de marzo de 2018

Quitando el dnsmasq de Ubuntu

Hola a todos, en la oficina tenemos un DNS interno (en el Active Directory) que resuelve ciertas rutas de nuestra intranet, y el dnsmask que tiene por defecto en las distribuciones de Linux se lleva fatal con eso. Además yo odio el dnsmask, estoy acostumbrado a editar mi fichero "/etc/resolv.conf" y me toca las narices el dnsmask.

La solución pasa por desactivarlo, para ello basta con editar el fichero /etc/NetworkManager/NetworkManager.conf, y comentar la siguiente línea:

#dns=dnsmasq

En cuanto reinicies debería pillarte los DNS que configure tu DHCP y agregártelos ordenadamente el fichero /etc/resolv.conf.

No obstante alguna vez me he encontrado con algo raro, que el DNS resolvía los nombres pero las aplicaciones no. Es decir, el comando "host" funcionaba, pero el "ping" o el "wget" no. Veámoslo con un ejemplo, el siguiente comando funcionaba y resolvía la IP:

host loquesea.midominio.local

Pero el siguiente comando fallaba y no resolvía la IP:

ping loquesea.midominio.local

Esto indica que básicamente está fallando la función "gethostbyname" de glibc. Para ello hay que revisar el fichero /etc/nsswitch.conf. En concreto la línea que empieza por "hosts" y quitar de enmedio el "[NOTFOUND=return]" y ya de paso el "mdsn4_minimal". De esta forma primero resolverá por "files" (es decir, lo que tengas en /etc/hosts) y luego por DNS.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

#hosts:          files mdns4_minimal [NOTFOUND=return] dns

hosts:          files dns 

networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis




Este fichero configura las bases de datos a utilizar para todas las llamadas de glibc que resuelven nombres mediante DNS. Para más información podéis hacer un:

man nsswitch.conf


¿Que cuál es la raíz del problema? Por lo visto el problema radica en que Linux utiliza por defecto el ".local" para indicar las resoluciones DNS por multicast (eso es lo que hace el "mdns4_minimal").

Podéis este blog en inglés que explica un poco más sobre este tema:
  http://www.lowlevelmanager.com/2011/09/fix-linux-dns-issues-with-local.html

Salu2 a to2