Comment ajouter dnsmasq et conserver la résolution de systemd (18.04)

10

Je veux obtenir une résolution DNS rapide avec dnsmasq et conserver la résolution système par défaut.

Vous cherchez une façon élégante de le faire

cmak.fr
la source
Vous vous rendez compte que la résolution de systemd met également en cache les recherches DNS? Vous n'avez pas besoin de dnsmasq sur un système avec la résolution de systemd. Vous devriez lire La résolution de systemd est-elle utile?
Aeyoun
Je sais - Mais il y a un 'détail' très important ... - dnsmasq comme un énorme cache DNS - Le cache DNS de systemd-resolution est très petit et ne peut pas être réglé - La vitesse de résolution DNS devient très améliorée à mesure que l'énorme cache de dnsmasq a été rempli par des requêtes.
cmak.fr
Le cache non configuré par défaut dans résolu par systemd est en réalité plus grand que dnsmasq.
Aeyoun
En fait, dnsmasq fait bien plus que résolu par systemd; Voir gist.github.com/jult/4eba88bdd34a57cc79d6#gistcomment-1706666 et gist.github.com/jult/4eba88bdd34a57cc79d6#file-hostsupdater-sh pour ne citer que quelques - uns ..
Julius
@Aeyoun: en lisant le code source résolu par systemd, vous pouvez voir que la limite de cache DNS de 4096 est en octets, pas en entrées. dnsmasq a une taille de cache DNS plus grande et configurable.
cmak.fr

Réponses:

10

Je voulais obtenir une résolution DNS rapide avec dnsmasq et garder la configuration par défaut résolue par le système / NetworkManager intacte pour une utilisation future. Oui, l'énorme mise en cache DNS de dnsmasq peut améliorer la vitesse de navigation. Oui, l'objectif était de conserver la configuration DNS par défaut de 18.04

  1. Installer dnmasq
  2. Configurez-le (écoutez l'adresse et les serveurs DNS)
  3. Configurer NetWorkManager pour l'adresse manuelle du serveur DNS
  4. Vérifier vérifier

1 - Avec sudo

apt-get -y install dnsmasq

2 - Avec 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 - Avec USER, configurez 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 - Vérifier vérifier

  • écoute résolue par systemd sur 127.0.0.53 comme il se doit par défaut
  • dnsmasq écouter sur 127.0.0.1 comme défini dans / etc / dnsmasq
  • résolu par systemd a pris 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
la source
1

J'ai essayé de trouver une solution raisonnable et semble qu'il existe différentes approches.

Je voulais rester au maximum dans le schéma de distribution tout en respectant toutes les exigences commerciales. C'est ce que j'ai rassemblé et testé pour travailler sur une version Ubuntu 18.04 et KDE Neon propre:

# 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

(veuillez noter que la seule différence générale avec les réponses ci-dessus est que le NetworkManager gère automatiquement les affectations du serveur DNS dnsmasq

Venca B Spam
la source
fonctionne mais que se passe-t-il lorsque networkmanager est mis à niveau avec apt-get --upgrade
cmak.fr
Pour être honnête, je ne sais pas. Cela dépend du choix du mainteneur d'Ubuntu 18.04. S'il conserve le service résolu par systemd désactivé et ne modifie pas NetworkManager.conf (qui est par défaut résolu de manière interactive en cas de conflit), il pourrait survivre jusqu'à Ubuntu 20.04 où il sera, espérons-le, corrigé.
Venca B Spam
0

Comme vous le savez, Docker copie le fichier hôte /etc/resolv.conf dans des conteneurs mais en supprimant tout serveur de noms local.

Ma solution à ce problème consiste à continuer à utiliser systemd-resolvd et NetworkManager mais à ajouter dnsmasq et à l'utiliser pour "transférer" les requêtes DNS des conteneurs Docker à systemd-resolvd .

Guide étape par étape:

  • Faire de /etc/resolv.conf un fichier "réel" sudo rm /etc/resolv.conf sudo touch /etc/resolv.conf
  • Créez le fichier /etc/NetworkManager/conf.d/systemd-resolved-for-docker.conf pour dire à NetworkManager d'informer systemd-resolvd mais de ne pas toucher /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
  • Installer dnsmasq sudo apt-get -y install dnsmasq
  • Configurer dnsmasq dans /etc/dnsmasq.conf pour écouter les requêtes DNS provenant de Docker et utiliser le serveur de noms 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
  • Modifiez /etc/resolv.conf pour utiliser le serveur de noms systemd-resolvd (127.0.0.53) et l' adresse IP hôte (172.17.0.1) dans le réseau Docker # systemd-resolvd name server nameserver 127.0.0.53 # docker host ip nameserver 172.17.0.1
  • Redémarrez les services sudo service network-manager restart sudo service dnsmasq restart sudo service docker restart

Pour plus d'informations, voir mon article (en espagnol) https://rubensa.wordpress.com/2020/02/07/docker-no-usa-los-mismos-dns-que-el-host/

rubensa
la source
-1

Ubuntu 18.10

À mon humble avis, si vous allez exécuter dnsmasq, vous devez attribuer statiquement votre adresse IP au lieu de l'obtenir à partir de DHCP. De cette façon, vous pouvez simplement désactiver tous ensemble la résolution de systemd.

  1. sudo apt-get install dnsmasq

  2. sudo systemctl désactiver la résolution de systemd

  3. sudo systemctl stop systemd-resolu

  4. Attribuez manuellement votre adresse IP, votre passerelle et attribuez l'adresse IP à votre machine en tant que DNS.

  5. configurez /etc/dnsmasq.conf (vraiment ... RTFM -> man dnsmasq.conf)

  6. sudo systemctl enable dnsmasq

  7. redémarrer
  8. sudo systemctl status dnsmasq

  9. pointer dhcp sur votre serveur dhcp vers votre nouveau serveur dnsmasq brillant (.. si yumpto)

Pâté de foie
la source
Je ne mettrai pas en œuvre ce que vous avez décrit. Je veux que la résolution par défaut de systemd reste intacte pour une utilisation future éventuelle de NetworkManager.
cmak.fr