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?
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?
Le paquet dnsmasq
est toujours disponible dans 16.10 et 17.04.
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
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
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.
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
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
Selon le manuel de systemd-resolved, systemd-resolved fournit des services de résolution de noms via trois interfaces différentes :
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 :) )
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.