Respuestas:
dnsmasq
Los paquetes todavía están disponibles en 16.10 y 17.04.
Instalar dnsmasq
y dependencias (o al menos descargar sus paquetes) antes de deshabilitarsystemd-resolved
:
sudo apt-get install dnsmasq
Deshabilitar systemd-resolved
y verificar se dnsmasq
está ejecutando:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
Sazone dnsmasq
al 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 dnsmasq
funcionar con las configuraciones predeterminadas. En mis pruebas, agregar un servidor DNS conocido /etc/dnsmasq.conf
y reiniciar dnsmasq
fue suficiente para que funcione en un entorno liveCD.
dns=dnsmasq
configuración a/etc/NetworkManager/NetworkManager.conf
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.conf
necesita 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
dns=default
y 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.
De acuerdo con el manual de systemd-resolve , systemd-resolve proporciona servicios de resolución de nombres a través de tres interfaces diferentes:
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 getaddrinfo
simplemente 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 :))
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