¿Cómo evitar conflictos entre dnsmasq y systemd-resolution?

34

Recientemente instalé dnsmasq para actuar como Servidor DNS para mi red local. dnsmasq escucha en el puerto 53, que ya está en uso por el detector de stub de DNS local de systemd-resolution .

Simplemente deteniendo systemd-resolution y luego reinícielo después de que se esté ejecutando dnsmasq, se soluciona este problema. Pero vuelve después de un reinicio: systemd-resolution se inicia con preferencia y dnsmasq no se iniciará porque el puerto 53 ya está en uso.

La primera pregunta obvia, supongo, es ¿cómo puedo hacer que el sistema resuelva de la mejor manera que entiendo que no debe iniciar la escucha del código DNS local y así mantener el puerto 53 para que lo use dnsmasq?

Sin embargo, una pregunta más interesante es cómo se supone que los dos servicios trabajen juntos. ¿Están destinados a trabajar en paralelo o se resuelven del sistema de la misma manera si uno usa dnsmasq?

    
pregunta vic 17.08.2016 - 19:37

9 respuestas

24

A partir de systemd 232 (lanzado en 2017) puede editar /etc/systemd/resolved.conf y añadir esta línea:

DNSStubListener=no

Esto desactivará el enlace al puerto 53.

La opción se describe con más detalles en la página de manual de dpi.conf .

Puede encontrar la versión de systemd con la que se ejecuta su sistema:

systemctl --version
    
respondido por el Malvineous 12.04.2017 - 07:34
14

Puedes deshabilitar systemd-resolved para que no se cargue en el arranque usando sudo systemctl disable systemd-resolved .

Si desea ejecutar los dos juntos, puede redirigir systemd-resolved para usar el host local como el servidor de nombres principal. Esto asegurará que todas las consultas se dirijan a dnsmasq para su resolución antes de llegar al servidor DNS externo. Esto se puede hacer agregando la línea nameserver 127.0.0.1 en la parte superior de su archivo /etc/resolv.conf . Esto también deshabilitará el almacenamiento en caché local de systemd.

Puedes leer más en wiki de Arch Linux . Copié esto desde allí y lo cubre bastante bien.

Después de esto, si lo desea, puede crear un archivo /etc/dnsmasq-resolv.conf separado para los servidores de nombres ascendentes y pasarlo usando la opción -r o --resolv-file , o agregar los servidores de nombres ascendentes al archivo de configuración dnsmasq y usar el Opción -R o --no-resolv . De esta manera, solo tienes el host local en tu /etc/resolv.conf y todo pasa por dnsmasq.

    
respondido por el Munir 17.08.2016 - 21:31
6

A juzgar por las páginas de manual de systemd, no se pretende poder deshabilitar manualmente el servidor DNS de código auxiliar. Curiosamente, solo noté el problema descrito después de actualizar systemd de 230 a 231.

La desactivación de systemd-resolution no fue una opción para mí porque lo necesito para manejar los servidores DNS ascendentes recibidos a través de DHCP.

Mi solución fue hacer que dnsmasq detuviera systemd-resolution antes de iniciarlo y volver a iniciarlo nuevamente.

Creé una configuración de inserción en /etc/systemd/system/dnsmasq.service.d/resolved-fix.conf :

[Unit]
After=systemd-resolved.service

[Service]
ExecStartPre=/usr/bin/systemctl stop systemd-resolved.service
ExecStartPost=/usr/bin/systemctl start systemd-resolved.service

Esto parece ser una solución bastante difícil, pero funciona.

    
respondido por el freaker 21.08.2016 - 13:34
4

Habrá una opción en systemd version 232 para deshabilitar la escucha de apéndice. Consulte enlace .

    
respondido por el Christoph 19.10.2016 - 16:30
3

Acabo de habilitar la opción "bind-interfaces" eliminando '#' al comienzo de la línea en /etc/dnsmasq.conf.

Pude volver a iniciar dnsmasq:

  • puerto DNS de enlace dnsmasq en todas las interfaces (incluido 127.0.0.1) puerto 53,
  • systemd-resolv sigue escuchando el 127.0.0. 53 : 53

Esta discusión me indicó esta solución resuelto: agregar una opción para deshabilitar el resolvedor de apéndices

    
respondido por el tomtom 28.10.2016 - 09:44
1

Si está utilizando una configuración predeterminada de Ubuntu 18.04, este puede ser causado por un conflicto entre systemd-resolved (el servidor DNS predeterminado) y dnsmasq . Si instaló dnsmasq usted mismo deliberadamente porque lo deseaba explícitamente, entonces una de las otras respuestas a esta pregunta, que explica cómo deshabilitar systemd-resolved , probablemente sea buena para usted. Si no instaló explícitamente dnsmasq , entonces es probable que esté en su lugar porque está usando lxd . Esto podría deberse a que realmente usa lxd para administrar los contenedores, pero es más probable que sea porque snaps usa lxd para protegerlo cuando se instalan aplicaciones. Desde mi perspectiva, quiero mantener dnsmasq (porque lxd lo quiere) pero también quiero mantener a systemd-resolved como el servidor DNS (porque es lo que eligió el equipo de Ubuntu y confío en ellos más que a mí mismo). / p>

Por lo tanto, esto parece ser un problema lxd en el corazón. Si es así, la forma en que lo arreglé, según una publicación de la lista de correo de usuarios de lxd , es esto:

$ lxc network edit lxdbr0

Esto editará su configuración en un editor de terminal. Se verá algo como esto:

config:
  ipv4.address: 10.216.134.1/24
  ipv4.nat: "true"
  ipv6.address: none
  ipv6.nat: "true"
name: lxdbr0
type: bridge

Agregue tres líneas:

config:
  ipv4.address: 10.216.134.1/24
  ipv4.nat: "true"
  ipv6.address: none
  ipv6.nat: "true"
  raw.dnsmasq: |
    auth-zone=lxd
    dns-loop-detect
name: lxdbr0
type: bridge

y esto debería hacer que dnsmasq , que está siendo ejecutado por lxd , detecte bucles DNS. Esto, al menos para mí, resolvió el problema y detuvo a systemd-resolved y dnsmasq usando 100% de CPU.

    
respondido por el sil 04.09.2018 - 11:25
0

Lo resolví de esta manera:

Agregue o elimine el comentario de la siguiente línea en /etc/default/dnsmasq :

IGNORE_RESOLVCONF=yes

Cree su propio archivo de resolución (/etc/resolv.personal) para definir los servidores de nombres. Puedes usar cualquier servidor de nombres aquí. Tomé dos de enlace

nameserver 5.132.191.104
nameserver 103.236.162.119

En /etc/dnsmasq.conf agregue o descomente la siguiente línea:

resolv-file=/etc/resolv.personal

Luego reinicie dnsmasq y deshabilite la resolución predeterminada: systemd-resolvido.

sudo service dnsmasq restart

sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
    
respondido por el Daniel Pernold 22.08.2018 - 20:36
0

No estoy seguro de por qué ambos servicios intentan utilizar la misma dirección. Tal vez pueda organizarlos como en mi caso en Xubuntu 18.04.1, donde su configuración es la siguiente:

xy@zq:~$ sudo netstat -tulpn | grep 53
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      13549/systemd-resol 
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      9632/dnsmasq 

Para hacer que systemd-resolviera usando mi dnsmasq, acabo de configurar:

#/etc/systemd/resolved.conf 
[Resolve]
DNS=127.0.0.1

En mi configuración de dnsmasq configuro mis servidores de nombres externos:

#/etc/dnsmasq.conf
nameserver x.x.x.x
nameserver y.y.y.y

Después de reiniciar todo:

# sudo systemctl restart systemd-resolved.service
# sudo systemctl restart dnsmasq.service

systemd-resolution establecerá el servidor DNS predeterminado en dnsmasq en:

#/etc/resolv.conf
nameserver 127.0.0.1
    
respondido por el JonnyTischbein 17.09.2018 - 10:23
0

No pude hacer que dnsmasq comience a usar las soluciones que se encuentran en línea, es decir, deshabilitando el archivo resuelto, cambiando dnsmasq.conf para hacer "enlace dinámico" en lugar de "enlace de interfaces". Pude hacer que empezara en el arranque al tener dnsmasq start After network-online.service en lugar de network.service:

[Unit]
Description=dnsmasq - A lightweight DHCP and caching DNS server
Requires=network.target
Wants=nss-lookup.target
Before=nss-lookup.target
After=network-online.target #This line changed
    
respondido por el omegahelix 17.11.2018 - 15:59

Lea otras preguntas en las etiquetas