Ich habe kürzlich dnsmasq installiert , um als DNS-Server für mein lokales Netzwerk zu fungieren. dnsmasq lauscht auf Port 53, der bereits vom lokalen DNS-Stub-Listener von systemd-resolved verwendet wird .
Beheben Sie dieses Problem, indem Sie systemd-resolved stoppen und nach der Ausführung von dnsmasq neu starten. Es wird jedoch nach einem Neustart zurückgegeben: systemd-resolved wird mit Voreinstellung gestartet und dnsmasq wird nicht gestartet, da Port 53 bereits belegt ist.
Die erste naheliegende Frage ist wohl, wie ich systemd-aufgelösten Benutzern am besten verständlich machen kann, dass der lokale DNS-Stub-Listener nicht gestartet werden soll und Port 53 für die Verwendung durch dnsmasq beibehalten wird.
Interessanter ist jedoch die Frage, wie die beiden Dienste im Allgemeinen zusammenarbeiten sollen. Sollen sie überhaupt Seite an Seite arbeiten, oder wird das System nur auf die gleiche Weise aufgelöst, wenn man dnsmasq verwendet?
sudo systemctl disable systemd-resolved
? dnsmasq sollte, wenn es richtig konfiguriert ist, die Domainauflösung handhaben, denke ich.sudo systemctl stop systemd-resolved
wenn es ausgeführt wird. Verwenden Siesudo systemctl status systemd-resolved
zu überprüfenAntworten:
Ab systemd 232 (veröffentlicht in 2017) können
/etc/systemd/resolved.conf
Sie diese Zeile bearbeiten und hinzufügen:Dadurch wird die Bindung an Port 53 deaktiviert.
Weitere Informationen zu dieser Option finden Sie in der Hilfeseite zu resolved.conf .
Sie können die systemd-Version finden, mit der Ihr System ausgeführt wird:
quelle
Sie können das
systemd-resolved
Laden beim Booten mit deaktivierensudo systemctl disable systemd-resolved
.Wenn Sie die beiden zusammen ausführen möchten, können Sie die umleiten
systemd-resolved
, um den localhost als primären Nameserver zu verwenden. Dadurch wird sichergestellt, dass alle Abfragen zur Lösung an dnsmasq geleitet werden, bevor der externe DNS-Server aufgerufen wird. Fügen Sie dazu die Zeilenameserver 127.0.0.1
oben in Ihre/etc/resolv.conf
Datei ein. Dadurch wird auch das lokale Caching von systemd deaktiviert.Weitere Informationen finden Sie im Arch Linux-Wiki . Ich habe das von dort kopiert und es deckt es ziemlich gut ab.
Dies verhindert jedoch nicht zuverlässig den Fehler beim Booten, dh dnsmasq schlägt immer noch fehl, wenn systemd-resolved zuerst gestartet wird. Wenn Ihre Version von
systemd
neu genug ist, verwenden Sie die Antwort von Malvineous . Wenn Ihre Version vonsystemd
zu alt ist, können Sie dieses Problem umgehen, indem Sie die Einheit dnsmasq ändern: Fügen Sie im[Unit]
Abschnitt hinzuBefore=systemd-resolved
.Wenn Sie nach diesem, möchten, können Sie eine separate erstellen
/etc/dnsmasq-resolv.conf
Datei für den Upstream - Name - Server und übergeben sie die Verwendung-r
oder--resolv-file
Option, oder die Upstream - Name - Server - Datei in der dnsmasq Konfiguration hinzuzufügen und die Verwendung-R
oder--no-resolv
Option. Auf diese Weise haben Sie nur den localhost in Ihrem/etc/resolv.conf
System und alles durchläuft dnsmasq.quelle
Before=systemd-resolved
in den[Unit]
Abschnitt ein. Auf diese Weise wird dnsmasq immer zuerst gestartet.Den systemd-Manpages zufolge ist es nicht beabsichtigt, den Stub-DNS-Server manuell zu deaktivieren. Interessanterweise habe ich das beschriebene Problem erst nach einem Upgrade von systemd von 230 auf 231 bemerkt.
Das Deaktivieren von systemd-resolved war für mich keine Option, da ich es benötige, um empfangene Upstream-DNS-Server über DHCP zu verwalten.
Meine Lösung bestand darin, dnsmasq vor dem Start zu stoppen und danach wieder zu starten.
Ich habe eine Drop-In-Konfiguration erstellt in
/etc/systemd/system/dnsmasq.service.d/resolved-fix.conf
:Dies scheint eine ziemlich hackige Lösung zu sein, aber es funktioniert.
quelle
DNSStubListener
resolved.conf-Handbuch wird Folgendes angegeben : "Beachten Sie, dass der DNS-Stub-Listener implizit ausgeschaltet wird, wenn seine Empfangsadresse und sein Port bereits verwendet werden." Deshalb funktioniert diese Methode meiner Meinung nach gut.Ich habe gerade die Option "bind-interfaces" aktiviert, indem ich '#' am Anfang der Zeile in /etc/dnsmasq.conf entfernt habe.
Ich konnte dnsmasq erneut starten:
Ich wurde durch diese Diskussion auf diese Lösung hingewiesen. Gelöst: Option zum Deaktivieren des Stub-Resolvers hinzufügen
quelle
In der
systemd
Version gibt es eine Option232
zum Deaktivieren des Stub-Listeners. Siehe https://github.com/systemd/systemd/pull/4061 .quelle
Wenn Sie ein Ubuntu 18.04-Standardsetup verwenden, kann dies durch einen Konflikt zwischen
systemd-resolved
(dem Standard-DNS-Server) und verursacht werdendnsmasq
. Wenn Siednsmasq
sich absichtlich installiert haben, weil Sie es ausdrücklich wollten, ist eine der anderen Antworten auf diese Frage, in der erklärt wird, wie Sie es deaktivierensystemd-resolved
, wahrscheinlich gut für Sie. Wenn Sie es nicht explizit installiert habendnsmasq
, ist es wahrscheinlich vorhanden, weil Sie es verwendenlxd
. Dies kann daran liegen, dass Sielxd
Container tatsächlich verwalten. Am wahrscheinlichsten ist es jedoch, dass Snaps verwendet werdenlxd
, um Sie bei der Installation von Apps zu schützen. Aus meiner Sicht möchte ich behaltendnsmasq
(weillxd
ich es will), aber ich möchte auch behaltensystemd-resolved
als DNS-Server (weil es das Ubuntu-Team gewählt hat und ich ihnen mehr vertraue als mir selbst).Das scheint also ein
lxd
Problem zu sein. Wenn ja, ist die Art und Weise, wie ich sie gemäß einem Post einer Mailingliste für LXD-Benutzer repariert habe , folgende:$ lxc network edit lxdbr0
Dadurch wird Ihre Konfiguration in einem Terminal-Editor bearbeitet. Es wird ungefähr so aussehen:
Fügen Sie drei Zeilen hinzu:
und dies sollte dazu führen
dnsmasq
, dass , was von ausgeführt wirdlxd
, DNS-Schleifen erkannt werden. Dies löste, zumindest für mich, das Problem und stopptesystemd-resolved
unddnsmasq
verwendete 100% CPU.quelle
Hier ist die Lösung für (X) Ubuntu 18.04 Bionic.
Installieren Sie dnsmasq
Deaktivieren Sie den systemaufgelösten Listener an Port 53 (berühren Sie nicht /etc/systemd/resolved.conf, da er beim Upgrade möglicherweise überschrieben wird):
und neu starten
(Alternativ deaktivieren Sie es vollständig durch
$ sudo systemctl disable systemd-resolved.service
)Löschen Sie die Datei /etc/resolv.conf und erstellen Sie sie erneut. Dies ist wichtig, da resolv.conf standardmäßig eine symbolische Verknüpfung zu /run/systemd/resolve/stub-resolv.conf ist. Wenn Sie den symbolischen Link nicht löschen, wird die Datei beim Neustart von systemd überschrieben (obwohl wir systemd-resolved deaktiviert haben!). Außerdem überprüft NetworkManager (NM), ob es sich um eine symbolische Verknüpfung handelt, um eine vom System aufgelöste Konfiguration zu erkennen.
Deaktivieren Sie das Überschreiben von /etc/resolv.conf durch NM (es gibt auch eine Option rc-manager, die jedoch nicht funktioniert, obwohl dies im NM-Handbuch beschrieben ist):
und starte es neu:
Weisen Sie dnsmasq an, resolv.conf von NM zu verwenden:
und starte es neu:
Verwenden Sie dnsmasq zum Auflösen von:
quelle
Ich habe es so gelöst:
Fügen Sie die folgende Zeile in / etc / default / dnsmasq hinzu oder kommentieren Sie sie aus :
Erstellen Sie Ihre eigene Resolv-Datei (/etc/resolv.personal), um Nameserver zu definieren. Sie können hier einen beliebigen Nameserver verwenden. Ich habe zwei von https://www.opennic.org genommen
Fügen Sie in /etc/dnsmasq.conf die folgende Zeile hinzu oder kommentieren Sie sie aus:
Starten Sie dann dnsmasq neu und deaktivieren Sie den Standard-Resolver: systemd-resolved.
quelle
Ich bin nicht sicher, warum beide Dienste versuchen, dieselbe Adresse zu verwenden. Vielleicht können Sie sie wie in meinem Fall auf Xubuntu 18.04.1 anordnen, wobei ihre Konfiguration wie folgt lautet:
Um das System mit meinem dnsmasq aufzulösen, setze ich einfach:
In meiner dnsmasq Konfiguration habe ich meine externen Nameserver eingestellt:
Nach dem Neustart alles:
systemd-resolved setzt den Standard-DNS-Server auf dnsmasq in:
quelle
/etc/resolv.conf
ist ein Symlink zu/run/systemd/resolve/resolv.conf
. Anscheinend ist dies einer von vier (!) Möglichen unterschiedlichen Modi , in denen systemaufgelöste Systeme arbeiten könnten. Ich denke, es hängt davon ab, wie Ihre Distribution es eingerichtet hat, dh es gilt für Ihr Xubuntu 18.04.1, aber es kann auch für andere Modi anders sein systeme.Ich konnte dnsmasq nicht dazu bringen, die online gefundenen Lösungen zu verwenden, dh systemd-resolved zu deaktivieren und dnsmasq.conf so zu ändern, dass "bind dynamic" statt "bind interfaces" ausgeführt wird. Ich konnte es beim Booten starten, indem ich dnsmasq start After network-online.service anstatt network.service hatte:
quelle
Wants=
. freedesktop.org/wiki/Software/systemd/NetworkTargetHier ist, was bei mir (nach stundenlangen Schmerzen) in Ubuntu 18.10 Cosmic Cuttlefish funktioniert hat. Ich habe dies getan, um
dnsmasq
den vergleichsweise robusteren Caching-Mechanismus zu nutzen und um NGINX Resolver-Schwachstellen zu vermeiden . Beachten Sie, dass ich die Ubuntu Server Edition verwende (neinNetworkManager
/nmcli
nursystemd-networkd
) und diese unter AWS EC2 ausgeführt wird. Daher musste ich auch DNS und DHCP mit der Standard-EC2-Suchdomäne arbeiten lassen. Ich wollte nichtsystemd-resolved
vollständig deaktivieren, da ich keine Ahnung habe, wie sich dies auf zukünftige Updates auswirken könnte. Sofern nicht anders angegeben, wird alles hier als root / sudo ausgeführt (dies geschieht standardmäßig, wenn es als EC2-Benutzerdaten übergeben wird).Stellen Sie sicher,
127.0.0.1#53
dass für die Auflösung verwendet wird und DNSSEC mit so etwas wie zusammenarbeitetdig +trace facebook.com
quelle
DNSStubListener=no
?