web-dev-qa-db-fra.com

Comment désactiver DNS et résoudre le système avec dnsmasq?

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?

22
Artyom

dnsmasqLes packages sont toujours disponibles dans 16.10 et 17.04.

  1. Installez dnsmasqet dépendances (ou téléchargez au moins leurs packages) --- avant désactivez systemd-resolved:

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

    Sudo systemctl stop systemd-resolved
    Sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Saison dnsmasqto goûter. Après avoir appliqué vos paramètres, redémarrez dnsmasqname__:

    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 dnsmasqfonctionne 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 dnsmasqsuffisaient pour le faire fonctionner dans un environnement liveCD.

28
quixotic

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
14
blabla

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
0
sena

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

  1. "API complète dotée de la solution systemd exposée sur le bus"
  2. "un écouteur de stub DNS local sur l'adresse IP 127.0.0.53 sur l'interface de bouclage locale"
  3. 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 :))

0
Dummmy