42 votes

Comment désactiver systemd-resolved et résoudre les DNS avec dnsmasq ?

Ubuntu 16.10+ utilise systemd-resolved comme résolveur DNS.

Je préfère la configuration utilisée par 16.04, dnsmasq comme résolveur.

Comment puis-je faire cela sur 16.10+, en particulier sur 17.04?

50voto

quixotic Points 1082

Le paquet dnsmasq est toujours disponible dans 16.10 et 17.04.

  1. Installez dnsmasq et ses dépendances (ou au moins téléchargez leurs paquets) avant de désactiver systemd-resolved:

    sudo apt-get install dnsmasq
  2. Désactivez systemd-resolved et vérifiez que dnsmasq est en cours d'exécution:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
  3. Assaisonnez dnsmasq selon votre goût. Après avoir appliqué vos paramètres, redémarrez dnsmasq:

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq

Après l'étape 2, vous pourriez vous retrouver sans résolveur système fonctionnel jusqu'à ce que l'étape 3 soit terminée. Vous devrez peut-être redémarrer le sous-système de réseau (ou simplement redémarrer) pour que dnsmasq fonctionne avec les configurations par défaut. Dans mes tests, l'ajout d'un serveur DNS connu à /etc/dnsmasq.conf et le redémarrage de dnsmasq ont été suffisants pour le faire fonctionner dans un environnement liveCD.

20voto

blabla Points 201

En plus de la réponse de @quixotic:

Assurez-vous d'avoir dans /etc/NetworkManager/NetworkManager.conf :

[main]
dns=dnsmasq

si vous devez l'ajouter, redémarrez NetworkManager comme ceci:

sudo systemctl restart NetworkManager

et /etc/resolv.conf doit être un lien symbolique vers /var/run/NetworkManager/resolv.conf . pourrait être fait comme ceci

sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

3voto

sena Points 31

Pour (X)Ubuntu 18.04 (voir ma réponse sur stackexchange).

Voici une copie (devrais-je en faire une copie?)

Voici la solution pour (X)Ubuntu 18.04 Bionic.

Installer dnsmasq

sudo apt install dnsmasq

Désactiver l'écouteur systemd-resolved sur le port 53 (ne touchez pas à /etc/systemd/resolved.conf, car il pourrait être écrasé lors d'une mise à jour) :

$ cat /etc/systemd/resolved.conf.d/noresolved.conf 
[Resolve]
DNSStubListener=no

et redémarrez-le

$ sudo systemctl restart systemd-resolved

(alternativement, désactivez-le complètement avec $ sudo systemctl disable systemd-resolved.service)

Supprimez /etc/resolv.conf et recréez-le. C'est important, car resolv.conf est un lien symbolique vers /run/systemd/resolve/stub-resolv.conf par défaut. Si vous ne supprimez pas le lien symbolique, le fichier sera écrasé par systemd au redémarrage (même si nous avons désactivé systemd-resolved!). De plus, NetworkManager (NM) vérifie s'il s'agit bien d'un lien symbolique pour détecter la configuration de systemd-resolved.

$ sudo rm /etc/resolv.conf
$ sudo touch /etc/resolv.conf

Désactivez l'écrasement de /etc/resolv.conf par NM (il y a également une option rc-manager, mais elle ne fonctionne pas, malgré ce qui est décrit dans le manuel) :

$ cat /etc/NetworkManager/conf.d/disableresolv.conf 
[main]
dns=none

et redémarrez-le :

$ sudo systemctl restart NetworkManager

Dites à dnsmasq d'utiliser resolv.conf de NM :

$ cat /etc/dnsmasq.d/nmresolv.conf 
resolv-file=/var/run/NetworkManager/resolv.conf

et redémarrez-le :

$ sudo systemctl restart dnsmasq

Utilisez dnsmasq pour la résolution :

$ cat /etc/resolv.conf 
# Utilisez dnsmasq local pour la résolution
nameserver 127.0.0.1

1voto

Dummmy Points 111

Selon le manuel de systemd-resolved, systemd-resolved fournit des services de résolution de noms via trois interfaces différentes :

  1. "API entièrement fonctionnelle exposée par systemd-resolved sur le bus"
  2. "un écouteur DNS local sur l'adresse IP 127.0.0.53 sur l'interface de bouclage locale"
  3. L'API getaddrinfo(3) de glibc telle que définie par la RFC3493 et ses fonctions de résolution associées, y compris gethostbyname(3). Cette API est largement prise en charge, y compris au-delà de la plate-forme Linux. Sous sa forme actuelle, elle n'expose cependant pas d'informations sur l'état de validation DNSSEC et est seulement synchrone. Cette API est appuyée par le commutateur de service de noms de glibc (nss(5)). L'utilisation du module NSS de glibc nss-resolve(8) est requise pour permettre aux fonctions de résolution de noms NSS de glibc de résoudre les noms d'hôtes via systemd-resolved.

Il semble que les deux premières interfaces n'interféreront pas avec la résolution DNS normale et pour moi le problème est probablement lié à la troisième.

Dans le manuel de nss-resolve:

Pour activer le module NSS, ajoutez "resolve" à la ligne commençant par "hosts :" dans /etc/nsswitch.conf. Il est particulièrement recommandé de placer "resolve" tôt dans la ligne "hosts :" de /etc/nsswitch.conf (mais après les entrées "files" ou "mymachines"), juste avant l'entrée "dns" si elle existe, suivie de "[!UNAVAIL=return]", pour garantir que les requêtes DNS sont toujours routées via systemd-resolved(8) s'il est en cours d'exécution, mais sont routées vers nss-dns si ce service n'est pas disponible.

La solution consiste à faire en sorte que "dns" précède "resolve" dans la ligne "host :" de /etc/nsswitch.conf. Ensuite, getaddrinfo devrait simplement se conformer à /etc/resolv.conf.

Cette solution empêche seulement systemd-resolved de gérer toutes les requêtes de résolution DNS et n'est pas limitée à un gestionnaire réseau spécifique. Et elle garantit également que les services LLMNR et mDNS fonctionnent normalement.

(Je ne suis pas très familier avec le fonctionnement de la résolution de nom sous Linux et je ne suis pas sûr de ce que j'ai compris de ces manuels. Veuillez me corriger si j'ai fait une erreur. Merci :) )

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X