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 receptor de resguardo DNS local desde systemd-resolve .
Simplemente detener systemd-resolve y luego reiniciarlo después de que dnsmasq se esté ejecutando resuelve este problema. Pero regresa después de un reinicio: systemd-resolve se inicia con preferencia y dnsmasq no se iniciará porque el puerto 53 ya está en uso.
Supongo que la primera pregunta obvia es: ¿cómo hago para que systemd resuelto comprenda que no debe iniciar el receptor de DNS local y, por lo tanto, mantener el puerto 53 para que lo use dnsmasq?
Sin embargo, una pregunta más interesante es cómo los dos servicios generalmente están destinados a trabajar juntos. ¿Están destinados a trabajar uno al lado del otro o están resueltos por el sistema de la misma manera si uno está usando dnsmasq?
sudo systemctl disable systemd-resolved
? dnsmasq si está configurado correctamente debería manejar la resolución de dominio, creo.sudo systemctl stop systemd-resolved
si se está ejecutando. Utilicesudo systemctl status systemd-resolved
para verificarRespuestas:
A partir de systemd 232 (lanzado en 2017), puede editar
/etc/systemd/resolved.conf
y agregar esta línea:Esto desactivará el enlace al puerto 53.
La opción se describe con más detalles en la página de manual de resolve.conf .
Puede encontrar la versión de systemd con la que se ejecuta su sistema:
fuente
Puede deshabilitar la
systemd-resolved
carga en el arranque usandosudo systemctl disable systemd-resolved
.Si desea ejecutar los dos juntos, puede redirigirlos
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íneanameserver 127.0.0.1
en la parte superior de su/etc/resolv.conf
archivo. Esto también deshabilitará el almacenamiento en caché local de systemd.Puedes leer más en la wiki de Arch Linux . Copié esto desde allí y lo cubre bastante bien.
Sin embargo, esto no evita de manera confiable el error en el momento del arranque, es decir, dnsmasq seguirá fallando si systemd-resolve se inicia primero. Si su versión de
systemd
es lo suficientemente nueva, use la respuesta de Malvineous . Si su versión desystemd
es demasiado antigua, puede solucionar este problema modificando la unidad dnsmasq: en la[Unit]
sección, agregueBefore=systemd-resolved
.Después de esto, si se quiere, se puede crear una separada
/etc/dnsmasq-resolv.conf
de archivo para los servidores DNS upstream y pasarlo con el-r
o la--resolv-file
opción, o añadir los servidores DNS upstream en el fichero de configuración de dnsmasq y utilizar el-R
o--no-resolv
opción. De esta manera solo tienes el localhost en tu/etc/resolv.conf
y todo pasa por dnsmasq.fuente
Before=systemd-resolved
en la[Unit]
sección. De esa manera, dnsmasq siempre comenzará primero.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.
Deshabilitar systemd-resolve no era 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 dejara de resolver systemd antes de comenzar e iniciarlo nuevamente nuevamente.
Creé una configuración desplegable en
/etc/systemd/system/dnsmasq.service.d/resolved-fix.conf
:Esto parece ser una solución bastante hack pero funciona.
fuente
DNSStubListener
el manual resuelto.conf se indica lo siguiente : "Tenga en cuenta que el oyente de código auxiliar DNS se desactiva implícitamente cuando su dirección de escucha y puerto ya están en uso". Es por eso que este método funciona bien, creo.Acabo de habilitar la opción "bind-interfaces" eliminando '#' al comienzo de la línea en /etc/dnsmasq.conf.
Pude iniciar dnsmasq nuevamente:
Esta discusión resolvió esta solución : agregué una opción para deshabilitar el stub resolver
fuente
Habrá una opción en la
systemd
versión232
para deshabilitar el oyente stub. Ver https://github.com/systemd/systemd/pull/4061 .fuente
Si está utilizando una configuración predeterminada de Ubuntu 18.04, esto puede deberse a un conflicto entre
systemd-resolved
(el servidor DNS predeterminado) ydnsmasq
. Si se instalódnsmasq
deliberadamente porque lo quería explícitamente, entonces una de las otras respuestas a esta pregunta, explicando cómo deshabilitarlasystemd-resolved
, probablemente será buena para usted. Si no lo instaló explícitamentednsmasq
, es probable que esté en su lugar porque lo está utilizandolxd
. Esto podría deberse a que realmente lo usalxd
para administrar contenedores, pero lo más probable es que las instantáneas lo usenlxd
para protegerlo cuando se instalan aplicaciones. Desde mi perspectiva, quiero mantenerdnsmasq
(porque lolxd
quiere) pero también quiero mantenersystemd-resolved
como el servidor DNS (porque es lo que eligió el equipo de Ubuntu y confío en ellos más que en mí).Entonces, esto parece ser un
lxd
problema en el fondo. Si es así, la forma en que lo arreglé, según una publicación de la lista de correo de lxd-users , es la siguiente:$ lxc network edit lxdbr0
Esto editará su configuración en un editor de terminal. Se verá algo como esto:
Agregue tres líneas:
y esto debería causar
dnsmasq
, que está siendo ejecutado porlxd
, detectar bucles DNS. Esto, al menos para mí, resolvió el problema y se detuvosystemd-resolved
ydnsmasq
usó el 100% de la CPU.fuente
Aquí hay una solución para (X) Ubuntu 18.04 Bionic.
Instalar dnsmasq
Deshabilite el oyente resuelto systemd en el puerto 53 (no toque /etc/systemd/resolved.conf, porque puede sobrescribirse en la actualización):
y reiniciarlo
(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 hayamos deshabilitado systemd-resolve!). También NetworkManager (NM) verifica si es un enlace simbólico para detectar la configuración resuelta por el sistema.
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 el manual de NM):
y reiniciarlo:
Dígale a dnsmasq que use resolv.conf de NM:
y reiniciarlo:
Use dnsmasq para resolver:
fuente
Lo resolví de esta manera:
Agregue o descomente la siguiente línea en / etc / default / dnsmasq :
Cree su propio archivo resolv (/etc/resolv.personal) para definir servidores de nombres. Puedes usar cualquier servidor de nombres aquí. Tomé dos de https://www.opennic.org
En /etc/dnsmasq.conf agregue o descomente la siguiente línea:
Luego reinicie dnsmasq y desactive la resolución predeterminada: systemd-resolve.
fuente
No estoy seguro de por qué ambos servicios intentan usar la misma dirección. Tal vez pueda organizarlos como en mi caso en Xubuntu 18.04.1, donde su configuración es la siguiente:
Para hacer que systemd resuelva usando mi dnsmasq simplemente configuré:
En mi configuración de dnsmasq configuro mis servidores de nombres externos:
Después de reiniciar todo:
systemd-resolve establecerá el servidor DNS predeterminado en dnsmasq en:
fuente
/etc/resolv.conf
es un enlace simbólico a/run/systemd/resolve/resolv.conf
. Aparentemente, este es uno de los cuatro (!) Modos diferentes posibles en los que systemd-resolve podría estar operando. Supongo que depende de cómo lo configure su distribución, es decir, es cierto para su Xubuntu 18.04.1, pero puede ser diferente en otros sistemas.No pude hacer que dnsmasq comenzara a usar las soluciones que se encuentran en línea, es decir, deshabilitar systemd-resolve, cambiar dnsmasq.conf para hacer "bind dynamic" en lugar de "bind interfaces". Pude hacer que se iniciara en el arranque haciendo que dnsmasq start After network-online.service en lugar de network.service:
fuente
Wants=
. freedesktop.org/wiki/Software/systemd/NetworkTargetEsto es lo que funcionó para mí (después de horas de dolor) en Ubuntu 18.10 Cosmic Cuttlefish. Hice esto para aprovechar
dnsmasq
el mecanismo de almacenamiento en caché comparativamente más robusto y para evitar vulnerabilidades de resolución de NGINX . Tenga en cuenta que estoy usando la edición Ubuntu Server (noNetworkManager
/nmcli
, solosystemd-networkd
) y esto se ejecuta en AWS EC2, por lo que también necesitaba mantener DNS y DHCP funcionando con el dominio de búsqueda EC2 predeterminado. No quería deshabilitarlo porsystemd-resolved
completo porque no tengo idea de cómo eso podría afectar futuras actualizaciones. Todo aquí se ejecuta como root / sudo a menos que se indique lo contrario (esto ocurre de manera predeterminada cuando se pasa como Datos de usuario EC2).Verifique que
127.0.0.1#53
se está utilizando para la resolución y DNSSEC está trabajando con algo comodig +trace facebook.com
fuente
DNSStubListener=no
?