Era bien sabido que NetworkManager no funciona bien con dnsmasq
(ref: aquí ). He examinado la larga discusión aquí, pero todavía no estoy seguro de cuál es la forma recomendada de lidiar con la situación.
Todo lo que quiero hacer es usar dnsmasq
para proporcionar 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 se dice que el error está solucionado.
A medida que se trabaja, las personas están deshabilitando a los esclavos de Nuevo México dnsmasq-base
debido a las siguientes razones:
El esclavo de 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 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 significativo para las LAN, ya que hay muchos usuarios concurrentes. - 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 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, la parte de la solución falta en la larga discusión . ¿Alguien puede llenar los espacios en blanco por favor? Es decir,
El dnsmasq
paquete de Ubuntu provisto de fábrica no funciona, por el lado del servidor, por las razones anteriores. Y también, en el lado del cliente, "el dnsmasq instalado en esas computadoras portátiles Ubuntu no puede hacer una consulta DNS de LAN desde mi servidor DNS" , porque "el NetworkManager (computadoras portátiles Ubuntu) está causando que tengan una configuración extraña del servidor de nombres 127.0.1.1" ( ref: 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 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, para el lado del servidor (todavía no hay una buena respuesta para el lado del cliente):
la única solución al problema es deshabilitar el dnsmasq de la unidad NM ... e instalar el dnsmasq "estándar" y luego configurarlo a través de su
/etc/dnsmasq.conf
archivo de configuración estándar .
Respuestas:
También tengo tus problemas.
En principio, después de wiki.archlinux , parece que habilitar el almacenamiento en caché debería ser suficiente para crear un archivo que
/etc/NetworkManager/dnsmasq.d/cache
contenga simplementeIntenté esto pero, después de reiniciar NM, todavía no tengo caché:
Tenga en cuenta que el archivo conf citado siempre está vacío: no he podido configurar ninguna opción con este procedimiento.
En general, parece que la máscara dnsmasla esclavizada por NM en 14.04 (que es proporcionada por el paquete dnsmasq-base) está completamente bloqueada, 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 al comentar la línea.
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 .fuente
--conf-dir=/etc/NetworkManager/dnsmasq.d
,cache-size
se utiliza el especificado en el archivo que creó. Puedes ver la diferencia usandodig
Es posible anular la configuración poniéndola en
/etc/NetworkManager/dnsmasq.d/*.conf
. La configuración del archivo de configuración tiene prioridad sobre los indicadores de línea de comandos. Se aplican cuando NetworkManager inicia dnsmasq. Ejecutarsudo service network-manager restart
para volver a aplicar. (Si hay alguna duda: la respuesta de Brad perdió el hecho de queps ax | grep dns
muestra un--conf-dir
argumento)Por ejemplo:
Según recuerdo, NetworkManager deshabilita el almacenamiento en caché de dnsmasq de forma predeterminada debido a las preocupaciones sobre el envenenamiento de la memoria caché. Para una máquina donde todos los usuarios son de confianza, puede no ser un problema.
NetworkManager no se integra con
resolvconf
, y el servidor de NM en127.0.1.1
no se usará localmente si el paquete resolvconf está instalado. resolvconf es parte de ubuntu-minimal y las instalaciones estándar de Debian; NetworkManager vuelve a implementar esa funcionalidad de una manera más integrada y menos basada en scripts.NetworkManager hace asegúrese de no interferir con una instancia de dnsmasq mundial (unión a un bucle de retorno secundario IP y la configuración
bind-interfaces
a través/etc/dnsmasq.d/network-manager
). Si instala una instancia global de dnsmasq y mantiene la instancia de NM,/etc/resolv.conf
vuelva a verificar cuál utilizará 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 una a las interfaces públicas, debe instalar el
dnsmasq
paquete (NetworkManager solo usadnsmasq-base
, que no configura una instancia global) y poner su configuración/etc/dnsmasq.d/*.conf
. La instancia esclava de NetworkManager solo está destinada a enlazarse con la interfaz de bucle invertido y configurarla más allá de ese alcance correría el riesgo de romperla.En resumen, para alguien que solo quiere almacenamiento en caché de DNS local:
Para una LAN simple, la conexión compartida de NetworkManager debería ser suficiente. Pero para una LAN configurada a medida, con TFTP y así sucesivamente:
fuente
dnsmasq
paquete. entonces, ¿para quéecho
sirve el siguiente comando? ya que ladnsmasq
voluntad se habrá ido.dnsmasq
, pero aún debería haberlodnsmasq-base
instalado debido a NM.Quería asignar un MAC particular a una dirección IP particular y, para fines de estabilidad, mantener el Administrador de red / dnsmasq predeterminado tanto como sea posible.
https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c tiene el comentario sobre el uso de --conf-file para ignorar las configuraciones, pero más adelante en el archivo tenemos
Bajo Ubuntu 16.04 LTS, después de configurar un punto caliente de Wi-Fi y compartir otra conexión,
ps auxgww | grep dnsmasq
muestra que el último argumento de línea de comando de cada uno de los procesos de dnsmasq es:Por lo tanto, es posible crear archivos de configuración en ese directorio que se comparten entre todas las invocaciones de dnsmasq que inicia Network Manager.
Creé /etc/NetworkManager/dnsmasq-shared.d/Hue
y reiniciado, aunque ejecutándose
Habría funcionado.
Esto dio como resultado que mi dispositivo obtuviera la dirección IP adecuada.
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 solo importa si el MAC aparece en la red en cuestión. Si la red no es 192.168.1, entonces habrá problemas.
Esto es más robusto que reemplazar / usr / sbin / dnsmasq con un script como se propone en https://gist.github.com/magnetikonline/6236150
La solución correcta sería modificar cómo se invoca dnsmasq para usar adecuadamente 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 solo los idiotas pueden usarlas.
fuente
Mi solución podría romper Network Manager y mantener todo en una forma simple de hacer las cosas. Con la forma rota de NM de tratar con dnsmasq, simplemente lo anulo con mi método a continuación.
Una solución al problema era simplemente hacer lo siguiente:
Edite el
~/dnsmasq.conf
archivo en su directorio de usuario como desee y guárdelo.Hice un simple alias bash y lo puse al final de mi archivo ~ / .bash_aliases para facilitar la edición del archivo dnsmasq.conf. Aquí está el alias:
Por supuesto, puede elegir cualquier editor a su gusto para el segundo comando sudo en el alias, pero usé nano allí para facilitar a todos. Guarde el archivo, cierre y vuelva a abrir la pestaña / ventana del terminal de comandos. Eso debería permitir que el alias esté disponible para las pestañas / ventanas de terminal recién abiertas.
Simplemente ejecute
eddmc
desde su cuenta de usuario y le pedirá su contraseña para ejecutar los comandos elevados.Tenga en cuenta que siempre
chattr +i
el archivo. Esto es para que Network Manager no sobrescriba su configuración con la suya.En las conexiones por cable de Ethernet no debería haber ningún problema. Desde que uso dnsmasq para el almacenamiento en caché dns en computadoras portátiles con conexión inalámbrica, descubrí que tengo que reiniciar manualmente el servicio dnsmasq.service después de conectarme a un punto de acceso. Creo que Network Manager puede realizar tareas como reiniciar los servicios al conectarse, pero aún no lo he investigado.
fuente
A pesar de las afirmaciones de lo contrario, NetworkManager ignora por completo todos y cada uno de los archivos de configuración de dmsmasq, incluso aquellos en su propio directorio
/etc/NetworkManager/dnsmasq-shared.d
. La prueba está en el código fuente de NetworkManager ... Aquí está el comentario relevante:Aquí hay un enlace al código fuente relevante (líneas 139-144).
fuente