
Era bien sabido que NetworkManager no funciona bien con dnsmasq
(ref:aquí). He hojeado el extensodiscusión aquípero todavía no estoy seguro de cuál es la forma recomendada de afrontar la situación.
Todo lo que quiero hacer es dnsmasq
usarproporcionar DNS y DHCP a mi red local. ¿Cuál sería la forma recomendada en este caso?
Parece que el problema persiste incluso para Ubuntu 14.04, incluso elbichose dice que está arreglado.
Como solución alternativa, las personas están desactivando los esclavos NM dnsmasq-base
por las siguientes razones:
El esclavo NM dnsmasq
utiliza opciones codificadas (en C) que proporcionan una funcionalidad extremadamente limitada.
- No escucha en ethX (
--listen-address=127.0.0.1
). Por lo tanto, no podemos usar nuestros servidores como servidores DNS para nuestras PC de la red local, es decir, es completamente inútil para las LAN. - No almacena en caché las solicitudes (
--cache-size=0
). Sin almacenamiento en caché ==> sin aceleración de consultas DNS. De nuevo, esto es muy importante para las LAN, ya que hay muchos usuarios simultáneos. - Finalmente, también necesitamos la funcionalidad DHCP y TFTP de dnsmasq, por lo que incluso si NM+dnsmasq incluyera un servidor DNS real, tendríamos que ejecutar otro dnsmasq.
Pero no estoy seguro de si todavía se mantienen y/o de cómo la solución ha resuelto los problemas. Además, ninguno de ellos tiene muy claro exactamente qué hicieron y cómo lo hicieron para resolver su problema. Es decir, falta la parte de la solución en ellarga discusión. ¿Alguien puede completar los espacios en blanco por favor? Es decir,
El dnsmasq
paquete listo para usar de Ubuntu no funciona en el lado del servidor por las razones anteriores. Y también, del lado del cliente,"el dnsmasq instalado en esas computadoras portátiles con Ubuntu no puede realizar consultas de DNS de LAN desde mi servidor DNS", porque"El NetworkManager (de las computadoras portátiles Ubuntu) está provocando que tengan una configuración extraña de servidor de nombres 127.0.1.1"(árbitro:Solución DNS para LAN o red doméstica local)
¿Cómo hacer que dnsmasq funcione sin problemas con NetworkManager, para proporcionar DNS y DHCP (y TFTP) a mi red local, tanto en el lado del servidor como en el del cliente?
TL'dr
para aquellos que buscan la respuesta. De todas las respuestas a continuación, encontré que la solución más simple es la de @brad, paralado del servidor(todavía no hay una buena respuesta para el lado del cliente):
la única solución al problema es desactivar el dnsmasq de la unidad NM..., instalar el dnsmasq "estándar" y luego configurarlo mediante su
/etc/dnsmasq.conf
archivo de configuración estándar.
Respuesta1
Yo también tengo tus problemas.
En principio, despuéswiki.archlinux, parece que para habilitar el almacenamiento en caché debería ser suficiente crear un archivo /etc/NetworkManager/dnsmasq.d/cache
que contenga simplemente
$ cat /etc/NetworkManager/dnsmasq.d/cache
cache-size=1000
Intenté esto pero, después de reiniciar NM, todavía no tengo caché:
# ps ax | grep dns
11724 ? S 0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
Tenga en cuenta que el archivo de configuración citado siempre está vacío: no he podido configurar ninguna opción mediante este procedimiento.
Con todo, parece que el dnsmask esclavo de NM en 14.04 (que proporciona el paquete dnsmasq-base) está completamente bloqueado, por lo que no es posible habilitar el almacenamiento en caché, ni nada más (dhcp, tftp).
Si esto es correcto, creo que, como usted dice, la única solución al problema es desactivar el dnsmasq de la unidad NM comentando la línea
dns=dnsmasq
en el archivo /etc/NetworkManager/NetworkManager.conf
e instale el dnsmasq "estándar" y luego configúrelo a través de su /etc/dnsmasq.conf
archivo de configuración estándar.
Respuesta2
Es posible anular la configuración colocándola en /etc/NetworkManager/dnsmasq.d/*.conf
. Los ajustes del archivo de configuración tienen prioridad sobre los indicadores de la línea de comandos. Se aplican cuando NetworkManager inicia dnsmasq. Corre sudo service network-manager restart
para volver a aplicar. (Si hay alguna duda: la respuesta de Brad omitió el hecho que ps ax | grep dns
muestra un --conf-dir
argumento)
Por ejemplo:
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf
Según recuerdo, NetworkManager desactiva el almacenamiento en caché dnsmasq de forma predeterminada debido a preocupaciones sobre el envenenamiento de la caché. Para una máquina en la que se confía en todos los usuarios, puede que no sea un problema.
NetworkManager no se integra con resolvconf
y el servidor de NM en 127.0.1.1
no se usará localmente si el paquete resolvconf está instalado. resolvconf es parte de las instalaciones de Debian estándar y mínimas de ubuntu; NetworkManager vuelve a implementar esa funcionalidad de una manera más integrada y menos basada en scripts.
NetworkManager se asegura de no interferir con una instancia global de dnsmasq (vinculándose a una IP de loopback secundaria y configurando bind-interfaces
a través de /etc/dnsmasq.d/network-manager
). Si instala una instancia global de dnsmasq y conserva la instancia de NM, vuelva a verificar /etc/resolv.conf
para ver cuál usará el host de forma predeterminada.
Si bien puede personalizar la instancia dnsmasq de NetworkManager como se muestra arriba, si desea un servidor DNS que se vincule a interfaces públicas, debe instalar el dnsmasq
paquete (NetworkManager solo usa dnsmasq-base
, que no configura una instancia global) y poner su configuración en /etc/dnsmasq.d/*.conf
. La instancia esclava de NetworkManager solo está destinada a vincularse a la interfaz loopback y configurarla más allá de ese alcance correría el riesgo de romperla.
En resumen, para alguien que sólo quiere almacenamiento en caché de DNS local:
sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf
Para una LAN simple, la conexión compartida de NetworkManager debería ser suficiente. Pero para una LAN configurada de forma personalizada, con TFTP, etc.:
sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |sudo tee -a /etc/dnsmasq.d/lan.conf
sudo service dnsmasq restart
Respuesta3
Además de las respuestas anteriores a esta publicación, me gustaría agregar que la dnsmasq-base
instancia de Network-manager también seguirá la addn-hosts
directiva (colocada en un archivo de configuración creado debajo de /etc/NetworkManager/dnsmasq-shared.d/), forzando a dnmasq -base para leer el archivo local , a pesar de que Network-Manager /etc/hosts
llama a dnsmasq con la opción--no-hosts
De esa manera, logré configurar con éxito un servidor DNS local en mi computadora portátil Mint 20.1. No es necesario jugar con las direcciones IP ( /etc/hosts
se proporciona una configuración adecuada...)
Encuentre una muestra funcional a continuación...
# /etc/NetworkManager/dnsmasq-shared.d/local-DNS.conf
domain=local.wifi // specify the (local) DNS-domain
addn-hosts=/etc/hosts // force dnmasq to read /etc/hosts despite --no-host
bogus-priv // do not forward private reverse lookups to upstream server (not needed if there is none...)
dhcp-option=6,[IP-OF-WIFI_IF] // tell client to use [IP-OF-WIFI_IF] as DNS-Server
Respuesta4
Quería asignar una MAC particular a una dirección IP particular y, por razones de estabilidad, seguir con el Administrador de red/dnsmasq predeterminado tanto como sea posible.
https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.ctiene el comentario sobre el uso de --conf-file para ignorar las configuraciones, pero más adelante en el archivo tenemos
/* dnsmasq exits if the conf dir is not present */
if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);
En Ubuntu 16.04 LTS, después de configurar un punto de acceso Wi-Fi y compartir otra conexión, ps auxgww | grep dnsmasq
se muestra que el último argumento de la línea de comando de cada uno de los procesos dnsmasq es:
--conf-dir=/etc/NetworkManager/dnsmasq-shared.d
Por lo tanto, es posible crear archivos de configuración en ese directorio que se comparten entre todas las invocaciones de dnsmasq iniciadas por Network Manager.
Creé /etc/NetworkManager/dnsmasq-shared.d/Hue
dhcp-host=0c:4d:e9:a0:ce:cf,192.168.1.221
y reiniciado, aunque ejecutándose
sudo service network-manager restart
hubiera funcionado.
Esto resultó en que mi dispositivo obtuviera la dirección IP apropiada.
Sí, esto está mal porque significa que todas las invocaciones de dnsmasq por parte de NetworkManager obtendrán esta declaración, pero en este caso, es inofensivo porque sólo importa si la MAC aparece en la red en cuestión. Si la red no es 192.168.1, habrá problemas.
Esto es más sólido que reemplazar /usr/sbin/dnsmasq con un script como se propone enhttps://gist.github.com/magnetikonline/6236150
La solución correcta sería modificar cómo se invoca dnsmasq para utilizar correctamente los archivos de configuración de dnsmasq. Entiendo el deseo de que Network Manager "simplemente funcione", pero hacer que las herramientas sean a prueba de idiotas significa que sólo los idiotas pueden usarlas.