Ubuntu 16.10+ utilise systemd-resolved
comme résolveur DNS.
Je préfère que la configuration 16.04 utilise dnsmasq
comme résolveur.
Comment puis-je faire cela sur 16.10+, en particulier sur 17.04?
dnsmasq
Les packages sont toujours disponibles dans 16.10 et 17.04.
Installez dnsmasq
et dépendances (ou téléchargez au moins leurs packages) --- avant désactivez 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
Saison dnsmasq
to goûter. Après avoir appliqué vos paramètres, redémarrez dnsmasq
name__:
Sudo systemctl stop dnsmasq
Sudo systemctl start dnsmasq
Après l’étape 2, il se peut que vous n’ayez plus de résolveur de système opérationnel jusqu’à la fin de l’étape 3. Vous devrez peut-être redémarrer le sous-système réseau (ou simplement redémarrer) pour que dnsmasq
fonctionne avec les configurations par défaut. Lors de mes tests, l'ajout d'un serveur DNS connu à /etc/dnsmasq.conf
et le redémarrage de dnsmasq
suffisaient pour le faire fonctionner dans un environnement liveCD.
En plus de la réponse de @quixotic:
Assurez-vous que vous avez /etc/NetworkManager/NetworkManager.conf:
[main]
dns=dnsmasq
si vous avez besoin de 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 ça
Sudo rm /etc/resolv.conf; Sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
Pour (X) Ubuntu 18.04 (voir mon réponse à stackexchange ).
En voici une copie (dois-je en faire une copie?)
Voici la solution pour (X) Ubuntu 18.04 Bionic.
Installer Dnsmasq
Sudo apt install dnsmasq
Désactivez le programme d'écoute résolu par systemd sur le port 53 (ne touchez pas à /etc/systemd/resolved.conf car il pourrait être écrasé lors de la mise à niveau):
$ cat /etc/systemd/resolved.conf.d/noresolved.conf
[Resolve]
DNSStubListener=no
et le redémarrer
$ Sudo systemctl restart systemd-resolved
(sinon désactivez-le complètement par $ Sudo systemctl disable systemd-resolved.service
)
Supprimez /etc/resolv.conf et créez à nouveau. Ceci 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 lors du redémarrage (même si nous avons désactivé systemd-resol!). NetworkManager (NM) vérifie également s'il s'agit d'un lien symbolique permettant de détecter une configuration résolue par systemd.
$ Sudo rm /etc/resolv.conf
$ Sudo touch /etc/resolv.conf
Désactivez le remplacement de /etc/resolv.conf par NM (il existe également une option rc-manager, mais cela ne fonctionne pas, même si cela est décrit dans un manuel):
$ cat /etc/NetworkManager/conf.d/disableresolv.conf
[main]
dns=none
et le redémarrer:
$ Sudo systemctl restart NetworkManager
Dites à dnsmasq d'utiliser resolv.conf à partir de NM:
$ cat /etc/dnsmasq.d/nmresolv.conf
resolv-file=/var/run/NetworkManager/resolv.conf
et le redémarrer:
$ Sudo systemctl restart dnsmasq
Utilisez dnsmasq pour résoudre:
$ cat /etc/resolv.conf
# Use local dnsmasq for resolving
nameserver 127.0.0.1
Selon le manuel de systemd-resolution , systemd-resol fournit des services de résolution de noms via trois interfaces différentes:
L'API glibc getaddrinfo (3) tel que défini par la RFC3493 et ses fonctions de résolveur associées, notamment gethostbyname (3). Cette API est largement prise en charge, y compris au-delà de la plate-forme Linux. Dans sa forme actuelle, il n'expose toutefois pas les informations d'état de validation DNSSEC et est uniquement synchrone. Cette API est supportée par le glibc Name Service Switch (nss (5)). Utilisation du module NSS glibc nss-resol (8) est requise pour permettre aux fonctions de résolveur NSS de glibc de résoudre les noms d’hôte via systemd.
Il semble que les deux premières interfaces n'interféreront pas dans la résolution DNS normale et pour moi, le problème est susceptible de résider sur la troisième.
Dans le manuel de nss-resol :
Pour activer le module NSS, ajoutez "resolvez" à la ligne commençant par "hosts:" dans /etc/nsswitch.conf. Plus précisément, il est recommandé de placer la ligne "hosts:" de /etc/nsswitch.conf au début de la ligne "résoudre" (mais après les entrées "files" ou "mymachines"), juste avant l'entrée "dns" si elle existe, suivie de "[! UNAVAIL = return]", pour s'assurer que les requêtes DNS sont toujours acheminées via systemd-resol (8) si elles sont en cours d'exécution, mais sont acheminées vers nss-dns si ce service n'est pas disponible
Donc, il faut faire "dns" précéder "résoudre" dans la ligne "hôte:" de /etc/nsswitch.conf . Et getaddrinfo
devrait simplement adhérer à /etc/resolv.conf .
Cette solution empêche uniquement les problèmes résolus par systemd de traiter toutes les demandes de résolution DNS et n'est pas limitée à un gestionnaire de réseau spécifique. Et cela garantit également que le service LLMNR et le service mDNS fonctionnent normalement.
(Je ne connais pas très bien le fonctionnement de la résolution de noms sous Linux et je ne suis pas sûr de ce que j'ai compris de ces manuels. Pleaes indique si j'ai un problème. Thx :))