Comment désactiver DNS résolu par SystemD et résoudre DNS avec DNSN?


Réponses:


35

dnsmasq les packages sont toujours disponibles en 16.10 et 17.04.

  1. Installer dnsmasqet dépendances (ou au moins télécharger leurs packages) avant de désactiversystemd-resolved :

    sudo apt-get install dnsmasq
    
  2. Désactivez systemd-resolvedet vérifiez que dnsmasqs'exécute:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Assaisonner dnsmasqau 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, il se peut que vous ne disposiez pas d'un résolveur de système fonctionnel jusqu'à ce que l'étape 3 soit terminée. Vous devrez peut-être redémarrer le sous-système de mise en réseau (ou simplement redémarrer) pour dnsmasqfonctionner avec les configurations par défaut. Lors de mes tests, l'ajout d'un serveur DNS connu /etc/dnsmasq.confet le redémarrage ont dnsmasqsuffi à le faire fonctionner dans un environnement liveCD.


Excellente réponse, et apparemment la seule solution lors de la désactivation de NetworkManager n'est pas acceptable!
bogl

3
Pour moi, c'était une excellente réponse, mais cela nécessitait également les étapes supplémentaires de la réponse de @ blabla, en ajoutant dns=dnsmasqconfig to/etc/NetworkManager/NetworkManager.conf
Roberto Tyley

Pareil ici. Après avoir lutté avec le passage à dnsmasq résolu par Systemd et non lié, il a fait l'affaire sur Ubuntu 17.10. J'ai quand même dû utiliser les ajouts de blabla.
Alberto L. Bonfiglio

17

En plus de la réponse de @quixotic:

Assurez-vous que vous avez 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.confdoit ê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

En fait, je l'ai défini comme dns=defaultet cela fonctionne bien parce que j'ai les serveurs de noms définis ensuite par NetworkManager au lieu d'être définis dans dnsmasq; cela fonctionne pour moi - NM obtient les serveurs de noms à partir des paramètres définis dans la configuration NM de KDE via la barre d'état système. J'utilise l'IP fixe sur mon réseau domestique FWIW.
pbhj

1
Cette étape était un ajout nécessaire à la réponse de @ quixotic pour moi (Ubuntu 17.04, installation complète, pas LiveCD).
Roberto Tyley

0

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

  1. "API entièrement exposée et résolue par le système 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. API glibc getaddrinfo (3) telle que définie par RFC3493 et ​​ses fonctions de résolveur associées, y compris 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 cependant pas les informations d'état de validation DNSSEC et est uniquement synchrone. Cette API est soutenue par le glibc Name Service Switch (nss (5)). L'utilisation du module glibc NSS nss-resolver (8) est requise afin de permettre aux fonctions de résolution NSS de glibc de résoudre les noms d'hôte via systemd-resolution.

Il semble que les deux premières interfaces n'interfèrent 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-resolver :

Pour activer le module NSS, ajoutez "résoudre" à la ligne commençant par "hôtes:" dans /etc/nsswitch.conf. Plus précisément, il est recommandé de placer "résoudre" au début de 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 acheminées via systemd-resolution (8) s'il est en cours d'exécution, mais sont acheminées vers nss-dns si ce service n'est pas disponible

Donc, ce qui est nécessaire est de faire "dns" précéder "résoudre" dans la ligne "host:" de /etc/nsswitch.conf . Et puis getaddrinfodevrait simplement adhérer à /etc/resolv.conf .

Cette solution empêche uniquement systemd-resolution de gérer toutes les demandes de résolution DNS et n'est pas limitée à un gestionnaire de réseau spécifique. Et il s'assure également que le service LLMNR et mDNS fonctionnent normalement.

(Je ne suis pas assez familier avec 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. Les plaidoyers indiquent si je me suis trompé. Thx :))


0

Pour (X) Ubuntu 18.04 (voir ma réponse sur 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 l'écouteur résolu par systemd sur le port 53 (ne touchez pas /etc/systemd/resolved.conf, car il peut être remplacé lors de la mise à niveau):

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

et redémarrez-le

$ 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 au redémarrage (même si nous avons désactivé systemd-resolu!). NetworkManager (NM) vérifie également s'il s'agit d'un lien symbolique pour détecter la configuration résolue par le système.

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

Désactiver l'écrasement de /etc/resolv.conf par NM (il y a aussi une option rc-manager, mais cela ne fonctionne pas, bien qu'elle soit décrite dans un 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 depuis 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 résoudre:

$ cat /etc/resolv.conf 
# Use local dnsmasq for resolving
nameserver 127.0.0.1
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.