¿Cómo deshabilitar systemd-resolve y resolver DNS con dnsmasq?

Respuestas:

35

dnsmasq Los paquetes todavía están disponibles en 16.10 y 17.04.

  1. Instalar dnsmasqy dependencias (o al menos descargar sus paquetes) antes de deshabilitarsystemd-resolved :

    sudo apt-get install dnsmasq
    
  2. Deshabilitar systemd-resolvedy verificar se dnsmasqestá ejecutando:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Sazone dnsmasqal gusto. Después de aplicar su configuración, reinicie dnsmasq:

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq
    

Después del paso 2, puede estar sin un sistema de resolución de trabajo hasta que se complete el paso 3. Es posible que deba reiniciar el subsistema de red (o simplemente reiniciar) para dnsmasqfuncionar con las configuraciones predeterminadas. En mis pruebas, agregar un servidor DNS conocido /etc/dnsmasq.confy reiniciar dnsmasqfue suficiente para que funcione en un entorno liveCD.

quijotesco
fuente
¡Gran respuesta, y aparentemente la única solución cuando deshabilitar NetworkManager no es aceptable!
bogl
3
Para mí, esta fue una gran respuesta, pero también requirió los pasos adicionales de la respuesta de @ blabla, agregando dns=dnsmasqconfiguración a/etc/NetworkManager/NetworkManager.conf
Roberto Tyley
Igual que aquí. Después de luchar con el cambio resuelto y desvinculado de systemd a dnsmasq hizo el truco en ubuntu 17.10. Sin embargo, tuve que usar las adiciones de Blabla.
Alberto L. Bonfiglio
17

Además de la respuesta de @quixotic:

Asegúrese de tener en /etc/NetworkManager/NetworkManager.conf:

[main]
dns=dnsmasq

si necesita agregarlo, reinicie NetworkManager de esta manera:

sudo systemctl restart NetworkManager

y /etc/resolv.confnecesita ser un enlace simbólico para /var/run/NetworkManager/resolv.conf. podría hacerse así

sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
bla bla
fuente
En realidad, lo configuré como dns=defaulty funciona bien porque tengo los servidores de nombres definidos por NetworkManager en lugar de estar definidos en dnsmasq; esto funciona para mí: NM obtiene los servidores de nombres de la configuración realizada en la configuración NM de KDE a través de la bandeja del sistema. Utilizo IP fija en mi red doméstica FWIW.
pbhj
1
Este paso fue una adición necesaria a la respuesta de @ quixotic para mí (ubuntu 17.04, instalación completa, no LiveCD).
Roberto Tyley
0

De acuerdo con el manual de systemd-resolve , systemd-resolve proporciona servicios de resolución de nombres a través de tres interfaces diferentes:

  1. "Exposiciones resueltas API systemd con todas las funciones en el bus"
  2. "un oyente de código auxiliar DNS local en la dirección IP 127.0.0.53 en la interfaz de bucle invertido local"
  3. La API glibc getaddrinfo (3) según lo definido por RFC3493 y sus funciones de resolución relacionadas, incluido gethostbyname (3). Esta API es ampliamente compatible, incluso más allá de la plataforma Linux. Sin embargo, en su forma actual, no expone la información del estado de validación de DNSSEC y solo es síncrono. Esta API está respaldada por el conmutador de servicio de nombres glibc (nss (5)). Se requiere el uso del módulo glibc NSS nss-resolve (8) para permitir que las funciones de resolución NSS de glibc resuelvan los nombres de host mediante systemd-resolve.

Parece que las dos primeras interfaces no interferirán en la resolución DNS normal y para mí el problema probablemente resida en la tercera.

En el manual de nss-resolve :

Para activar el módulo NSS, agregue "resolver" a la línea que comienza con "hosts:" en /etc/nsswitch.conf. Específicamente, se recomienda colocar "resolver" temprano en la línea "hosts:" de /etc/nsswitch.conf (pero después de las entradas "archivos" o "mymachines"), justo antes de la entrada "dns" si existe, seguido de "[! UNAVAIL = return]", para garantizar que las consultas DNS siempre se enruten a través de systemd-resolve (8) si se está ejecutando, pero se enrutan a nss-dns si este servicio no está disponible

Entonces, lo que se necesita es hacer que "dns" preceda a "resolver" en "host:" línea de /etc/nsswitch.conf . Y luego getaddrinfosimplemente debe adherirse a /etc/resolv.conf .

Esta solución solo evita que systemd-resolve maneje todas las solicitudes de resolución DNS y no está restringida a un administrador de red específico. Y también se asegura de que el servicio LLMNR y mDNS estén funcionando normalmente.

(No estoy bastante familiarizado con cómo funciona la resolución de nombres en Linux y tampoco estoy seguro de lo que entendí de estos manuales. Por favor, señale si tengo algo mal. Thx :))

Tonto
fuente
0

Para (X) Ubuntu 18.04 (vea mi respuesta en stackexchange ).

Aquí hay una copia (¿debo hacer una copia?)

Aquí hay una solución para (X) Ubuntu 18.04 Bionic.

Instalar dnsmasq

sudo apt install dnsmasq

Deshabilite el escucha resuelto systemd en el puerto 53 (no toque /etc/systemd/resolved.conf, porque puede sobrescribirse en la actualización):

$ cat /etc/systemd/resolved.conf.d/noresolved.conf 
[Resolve]
DNSStubListener=no

y reiniciarlo

$ sudo systemctl restart systemd-resolved

(alternativamente deshabilítelo por completo $ sudo systemctl disable systemd-resolved.service)

Elimine /etc/resolv.conf y vuelva a crear. Esto es importante, porque resolv.conf es un enlace simbólico a /run/systemd/resolve/stub-resolv.conf de forma predeterminada. Si no va a eliminar el enlace simbólico, systemd sobrescribirá el archivo al reiniciarlo (¡aunque desactivemos systemd-resolve!). También NetworkManager (NM) verifica si se trata de un enlace simbólico para detectar la configuración resuelta por el sistema.

$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf

Deshabilite la sobrescritura de /etc/resolv.conf por parte de NM (también hay una opción rc-manager, pero no funciona, a pesar de que se describe en un manual):

$ cat /etc/NetworkManager/conf.d/disableresolv.conf 
[main]
dns=none

y reiniciarlo:

$ sudo systemctl restart NetworkManager

Dígale a dnsmasq que use resolv.conf de NM:

$ cat /etc/dnsmasq.d/nmresolv.conf 
resolv-file=/var/run/NetworkManager/resolv.conf

y reiniciarlo:

$ sudo systemctl restart dnsmasq

Use dnsmasq para resolver:

$ cat /etc/resolv.conf 
# Use local dnsmasq for resolving
nameserver 127.0.0.1
sena
fuente