J'ai récemment installé Dnsmasq pour qu'il agisse en tant que serveur DNS pour mon réseau local. Dnsmasq écoute sur le port 53 déjà utilisé par l'écouteur de stub DNS local à partir de la résolution systemd .
Il suffit d’arrêter Systemd, puis de le redémarrer une fois Dnsmasq en cours d’exécution pour résoudre ce problème. Mais il revient après un redémarrage: systemd-resolution est démarré avec préférence et dnsmasq ne démarrera pas car le port 53 est déjà utilisé.
La première question évidente, je suppose, est de savoir comment mieux faire comprendre à systemd qu’il ne doit pas démarrer le programme d’écoute du stub DNS local et conserver ainsi le port 53 à l’utilisation de dnsmasq.
Une question plus intéressante, cependant, est de savoir comment les deux services sont généralement censés fonctionner ensemble. Sont-ils même censés travailler côte à côte ou est-ce que systemd est résolu uniquement si on utilise dnsmasq?
sudo systemctl disable systemd-resolved
? Dnsmasq si correctement configuré devrait gérer la résolution de domaine, je pense.sudo systemctl stop systemd-resolved
si il est en cours d'exécution. Utilisersudo systemctl status systemd-resolved
pour vérifierRéponses:
Depuis la version 232 de systemd (sortie en 2017), vous pouvez éditer
/etc/systemd/resolved.conf
et ajouter cette ligne:Cela désactivera la liaison au port 53.
L'option est décrite plus en détail dans la page de manuel resol.conf .
Vous pouvez trouver la version de systemd sur laquelle votre système tourne:
la source
Vous pouvez désactiver le
systemd-resolved
chargement au démarrage en utilisantsudo systemctl disable systemd-resolved
.Si vous voulez exécuter les deux ensemble, vous pouvez rediriger le
systemd-resolved
pour utiliser l'hôte local comme serveur de noms principal. Cela garantira que toutes les requêtes sont dirigées vers Dnsmasq pour la résolution avant de frapper le serveur DNS externe. Cela peut être fait en ajoutant la lignenameserver 127.0.0.1
en haut de votre/etc/resolv.conf
fichier. Cela désactivera également la mise en cache locale de systemd.Vous pouvez en lire plus sur le wiki Arch Linux . Je l'ai copié à partir de là et ça couvre assez bien.
Cependant, cela n'évite pas l'erreur au démarrage de manière fiable, c.-à-d. Que Dnsmasq échouera quand même si le problème résolu par systemd a commencé. Si votre version de
systemd
est suffisamment nouvelle, utilisez la réponse de Malvineous . Si votre version desystemd
est trop ancienne, vous pouvez contourner ce problème en modifiant l’unité Dnsmasq: dans la[Unit]
section, ajoutezBefore=systemd-resolved
.Après cela, si vous le souhaitez, vous pouvez créer un séparé
/etc/dnsmasq-resolv.conf
fichier pour les serveurs de noms en amont et de le transmettre en utilisant la-r
ou--resolv-file
option ou ajouter les serveurs de noms en amont dans le fichier de configuration de dnsmasq et utiliser la-R
ou--no-resolv
option. De cette façon, vous n’avez que l’hôte local dans votre/etc/resolv.conf
et tout passe par Dnsmasq.la source
Before=systemd-resolved
dans la[Unit]
section. De cette façon, Dnsmasq commencera toujours en premier.À en juger par les pages de manuel systemd, il n’est pas prévu de pouvoir désactiver manuellement le serveur DNS de stub. Fait intéressant, j'ai seulement remarqué le problème décrit après la mise à niveau de systemd de 230 à 231.
Désactiver la résolution de systemd n'était pas une option pour moi car j'en ai besoin pour gérer les serveurs DNS en amont reçus via DHCP.
Ma solution était de faire en sorte que dnsmasq arrête systemd-resolu avant de le redémarrer ensuite.
J'ai créé une config drop-in dans
/etc/systemd/system/dnsmasq.service.d/resolved-fix.conf
:Cela semble être une solution plutôt compliquée, mais cela fonctionne.
la source
DNSStubListener
texte du manuel resol.conf indique ce qui suit : "Notez que l'écouteur de stub DNS est désactivé de manière implicite lorsque son adresse d'écoute et son port sont déjà utilisés." C'est pourquoi cette méthode fonctionne bien, je pense.Je viens d'activer l'option "bind-interfaces" en supprimant '#' au début de la ligne dans /etc/dnsmasq.conf.
J'ai pu redémarrer Dnsmasq:
Cette discussion résolue m'a amené à cette solution : ajouter une option pour désactiver le résolveur de stub
la source
Il y aura une option dans la
systemd
version232
pour désactiver l'écouteur de stub. Voir https://github.com/systemd/systemd/pull/4061 .la source
Si vous utilisez une configuration par défaut d'Ubuntu 18.04, cela peut être dû à un conflit entre
systemd-resolved
(le serveur DNS par défaut) etdnsmasq
. Si vousdnsmasq
vous êtes installé délibérément parce que vous le vouliez explicitement, l'une des autres réponses à cette question, expliquant comment désactiversystemd-resolved
, sera probablement bénéfique pour vous. Si vous n'avez pas explicitement installédnsmasq
, alors il est probablement en place parce que vous utilisezlxd
. C'est peut-être parce que vous utilisez réellementlxd
pour gérer les conteneurs, mais c'est probablement parce que les instantanés s'utilisentlxd
pour vous protéger lorsque des applications sont installées. De mon point de vue, je veux garderdnsmasq
(parce que lelxd
veut) mais je veux aussi gardersystemd-resolved
en tant que serveur DNS (car c'est ce que l'équipe Ubuntu a choisi et je leur fais plus confiance que moi).Cela semble donc être un
lxd
problème de fond. Si tel est le cas, voici comment je l'ai corrigé, comme dans un message de la liste de diffusion lxd-users :$ lxc network edit lxdbr0
Cela modifiera votre configuration dans un éditeur de terminal. Cela ressemblera à ceci:
Ajoutez-y trois lignes:
et cela devrait causer
dnsmasq
, qui est en cours d'exécutionlxd
, de détecter les boucles DNS. Cela, au moins pour moi, a résolu le problème et a arrêtésystemd-resolved
et endnsmasq
utilisant 100% du CPU.la source
Voici la solution pour (X) Ubuntu 18.04 Bionic.
Installer 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):
et le redémarrer
(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 la configuration résolue par systemd.
Désactivez le remplacement de /etc/resolv.conf par NM (il existe également une option rc-manager, mais cela ne fonctionne pas, bien que cela soit décrit dans le manuel de NM):
et le redémarrer:
Dites à dnsmasq d'utiliser resolv.conf à partir de NM:
et le redémarrer:
Utilisez dnsmasq pour résoudre:
la source
Je l'ai résolu de cette façon:
Ajoutez ou décommentez la ligne suivante dans / etc / default / dnsmasq :
Créez votre propre fichier de résolution (/etc/resolv.personal) pour définir les serveurs de noms. Vous pouvez utiliser n'importe quel serveur de noms ici. J'en ai pris deux sur https://www.opennic.org
Dans /etc/dnsmasq.conf, ajoutez ou supprimez la mise en commentaire de la ligne suivante:
Puis redémarrez Dnsmasq et désactivez le résolveur par défaut: systemd-resol.
la source
Je ne sais pas pourquoi les deux services essaient d'utiliser la même adresse. Peut-être que vous pouvez les organiser comme dans mon cas sous Xubuntu 18.04.1, où leur configuration est la suivante:
Pour résoudre systemd en utilisant mon dnsmasq, je viens de définir:
Dans ma configuration Dnsmasq, j'ai défini mes serveurs de noms externes:
Après avoir tout redémarré:
systemd-resolu définira le serveur DNS par défaut sur dnsmasq dans:
la source
/etc/resolv.conf
un lien symbolique vers/run/systemd/resolve/resolv.conf
. Apparemment, il s’agit de l’un des quatre (!) Différents modes possibles de résolution de systemd. Je suppose que cela dépend de la configuration de votre distribution, c’est-à-dire vrai pour votre Xubuntu 18.04.1, mais cela pourrait être différent pour d’autres systèmes.Je ne parvenais pas à obtenir que dnsmasq commence à utiliser les solutions trouvées en ligne, c.-à-d. En désactivant systemd-resol, en changeant le fichier dnsmasq.conf pour "lier dynamique" au lieu de "lier interfaces". J'ai réussi à le faire démarrer au démarrage en lançant dnsmasq start après network-online.service plutôt que network.service:
la source
Wants=
. freedesktop.org/wiki/Software/systemd/NetworkTargetVoici ce qui a fonctionné pour moi (après des heures de douleur) dans Ubuntu 18.10 Cosmic Cuttlefish. Je l’ai fait pour tirer parti
dnsmasq
du mécanisme de mise en cache comparativement plus robuste et éviter les vulnérabilités du résolveur NGINX . Notez que j'utilise l'édition Ubuntu Server (noNetworkManager
/nmcli
, uniquementsystemd-networkd
) et qu'elle s'exécute sur AWS EC2. J'avais donc également besoin de faire en sorte que DNS et DHCP fonctionnent avec le domaine de recherche EC2 par défaut. Je ne voulais pas désactiversystemd-resolved
entièrement parce que je ne savais pas comment cela pourrait affecter les futures mises à jour. Tout ce qui s’exécute ici est exécuté en tant que root / sudo sauf indication contraire (cela se produit par défaut lorsqu’il est transmis en tant que données utilisateur EC2).Vérifiez qu’il
127.0.0.1#53
est utilisé pour la résolution et que DNSSEC fonctionne avec quelque chose comme:dig +trace facebook.com
la source
DNSStubListener=no
?