Cómo agregar dnsmasq y mantener systemd resuelto (18.04)

10

Quiero obtener una resolución dns rápida con dnsmasq y mantener el sistema predeterminado resuelto.

Buscando una forma elegante de hacer esto

cmak.fr
fuente
¿Te das cuenta de que systemd-resolve también almacena en caché las búsquedas de DNS? No necesita dnsmasq en un sistema con systemd-resolve. Debería leer ¿Es útil systemd-resolve?
Aeyoun
Lo sé, pero hay un 'detalle' muy significativo ... - dnsmasq como un gran caché de dns - El caché de dns de systemd-resolve es muy pequeño y no se puede ajustar - La velocidad de resolución de dns se mejora mucho a medida que el gran caché de dnsmasq ha sido llenado por solicitudes.
cmak.fr
El caché predeterminado no configurado en systemd-resolve es más grande que dnsmasq.
Aeyoun
En realidad, dnsmasq hace mucho más que systemd-resolve; Ver gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 y gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh por nombrar algunos ...
Julio
@Aeyoun: al leer el código fuente resuelto por systemd, puede ver que el límite de caché dns de 4096 es bytes, no entradas. dnsmasq tiene un tamaño de caché dns más grande y configurable.
cmak.fr

Respuestas:

10

Quería obtener una resolución rápida de dns con dnsmasq y mantener intacta la configuración predeterminada de systemd / NetworkManager para uso futuro. Sí, el enorme almacenamiento en caché dns de dnsmasq puede mejorar la velocidad de navegación. Sí, el objetivo era mantener la configuración dns destacada predeterminada de 18.04

  1. Instalar dnmasq
  2. Configurarlo (escuchar dirección y servidores dns)
  3. Configure NetWorkManager para la dirección manual del servidor dns
  4. Verificar verificar

1 - Con sudo

apt-get -y install dnsmasq

2 - Con sudo

tee -a /etc/dnsmasq.conf << ENDdm
interface=lo
bind-interfaces
listen-address=127.0.0.1
# DNS server from OpenDns. Use yours...
server=208.67.222.222
server=208.67.220.220
ENDdm

systemctl restart dnsmasq
systemctl enable dnsmasq

3 - Con el USUARIO, configure NetworkManager

# Get NM first active profile name
NetManProfile=$(nmcli -t  connection show --active | cut -f 01 -d ':')
# remove, if exists, current dns servers
nmcli con mod "$NetManProfile" ipv4.dns ""
# set 'manual' dns server
nmcli con mod "$NetManProfile" ipv4.ignore-auto-dns yes
# set dnsmasq as manually set dns server
nmcli con mod "$NetManProfile" ipv4.dns 127.0.0.1
# i also disabled ip6, do what u want
nmcli con mod "$NetManProfile" ipv6.method ignore
# reconnect to take effect
nmcli connection down "$NetManProfile"
nmcli connection up "$NetManProfile"

4 - Verificar verificar

  • escucha resuelta por systemd en 127.0.0.53 como debería por defecto
  • dnsmasq escucha en 127.0.0.1 como se establece en / etc / dnsmasq
  • systemd-resolve tomó 127.0.0.1 de NetworkManager
netstat -antup
Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat       PID/Program name    
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1036/dnsmasq        
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      766/systemd-resolve
cat /run/systemd/resolve/resolv.conf 
nameserver 127.0.0.1
cmak.fr
fuente
1

Traté de encontrar una solución razonable y parece que hay diferentes enfoques.

Quería permanecer como máximo dentro del diseño de distribución mientras cumplía con todos los requisitos comerciales. Esto es lo que recopilé y probé para trabajar en Ubuntu 18.04 limpio y sabor KDE Neon:

# Install required package and reconfigure service plans (i.e. disablesystemd-resolved, enable dnsmasq
sudo apt-get install dnsmasq
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved
sudo systemctl enable dnsmasq

# These two lines should work on most environments, but .. :-) - so I kept them commented out for less experienced users
# Just add or change 'dns=dnsmasq' to your NetworkManager.conf to the section [main]
# and yes, the sed expression can be better :-)

#sudo cp /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/NetworkManager.conf.backup
#sudo bash -c 'cat /etc/NetworkManager/NetworkManager.conf.backup |sed -e "s/^dns=.*//"| sed -e "s/\[main\]/\[main\]\ndns=dnsmasq/" >/etc/NetworkManager/NetworkManager.conf'

# Restart NetworkManager to make the change above applied
sudo systemctl restart NetworkManager

# This removes the systemd resolv.conf link only if it has NetworkManager replacement :-)
ls /var/run/NetworkManager/resolv.conf && sudo rm /etc/resolv.conf

# And add NetworkManager's resolv.conf available for the system resolver
sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

(tenga en cuenta que la única diferencia general con las respuestas anteriores es que NetworkManager maneja las asignaciones del servidor DNS dnsmasq automáticamente

Venca B Spam
fuente
funciona, pero ¿qué sucede cuando networkmanager se actualiza con apt-get --upgrade
cmak.fr el
Para ser sincero, no lo sé. Depende de lo que decida el responsable del mantenimiento de Ubuntu 18.04. Si mantiene deshabilitado el servicio resuelto por systemd y no modifica NetworkManager.conf (que por defecto se resuelve de manera interactiva en caso de conflicto), podría sobrevivir hasta Ubuntu 20.04, donde se solucionará.
Venca B Spam
0

Como sabe, Docker copia el archivo host /etc/resolv.conf en contenedores pero elimina cualquier servidor de nombres local.

Mi solución a este problema es seguir usando systemd-resolvd y NetworkManager pero agregar dnsmasq y usarlo para "reenviar" consultas DNS de contenedores Docker a systemd-resolvd .

Guía paso por paso:

  • Convierta /etc/resolv.conf en un archivo "real" sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Cree el archivo /etc/NetworkManager/conf.d/systemd-resolved-for-docker.conf para indicarle a NetworkManager que informe a systemd-resolvd pero que no toque /etc/resolv.conf [main] # NetworkManager will push the DNS configuration to systemd-resolved dns=systemd-resolved # NetworkManager won’t ever write anything to /etc/resolv.conf rc-manager=unmanaged
  • Instalar dnsmasq sudo apt-get -y install dnsmasq
  • Configure dnsmasq en /etc/dnsmasq.conf para escuchar las consultas DNS que vienen de Docker y usar el servidor de nombres systemd-resolvd # Use interface docker0 interface=docker0 # Explicitly specify the address to listen on listen-address=172.17.0.1 # Looks like docker0 interface is not available when dnsmasq service starts so it fails. This option makes dynamically created interfaces work in the same way as the default. bind-dynamic # Set systemd-resolved DNS server server=127.0.0.53
  • Edite /etc/resolv.conf para usar el servidor de nombres systemd-resolvd (127.0.0.53) y la IP del host (172.17.0.1) en la red Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Reiniciar servicios sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Para obtener más información, consulte mi publicación https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/

rubensa
fuente
-1

Ubuntu 18.10

En mi humilde opinión, si va a ejecutar dnsmasq, debe asignar estáticamente su dirección IP en lugar de obtenerla de dhcp. De esta manera, puede deshabilitar systemd-resolve todo junto.

  1. sudo apt-get install dnsmasq

  2. sudo systemctl deshabilitar systemd-resolve

  3. sudo systemctl stop systemd-resolve

  4. Asigne manualmente su dirección IP, puerta de enlace y asigne la dirección IP a su máquina como DNS.

  5. configure /etc/dnsmasq.conf (realmente ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl enable dnsmasq

  7. reiniciar
  8. sudo systemctl status dnsmasq

  9. apunte dhcp en su servidor dhcp a su nuevo y brillante servidor dnsmasq (..if yumpto)

Embutido de hígado
fuente
No implementaré lo que describiste. Quiero que el sistema predeterminado resuelto por systemd permanezca intacto para el uso futuro de NetworkManager.
cmak.fr