Wie deaktiviere ich systemd-resolved und löse DNS mit dnsmasq auf?


Antworten:


35

dnsmasq Pakete sind noch in 16.10 und 17.04 verfügbar.

  1. Installieren Sie dnsmasqund Abhängigkeiten (oder laden Sie zumindest ihre Pakete herunter), bevor Sie deaktivierensystemd-resolved :

    sudo apt-get install dnsmasq
    
  2. Deaktivieren systemd-resolvedund überprüfen dnsmasqläuft:

    sudo systemctl stop systemd-resolved
    sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Nach dnsmasqBelieben würzen. Starten Sie nach dem Übernehmen Ihrer Einstellungen Folgendes neu dnsmasq:

    sudo systemctl stop dnsmasq
    sudo systemctl start dnsmasq
    

Nach Schritt 2 ist möglicherweise kein funktionierender System-Resolver mehr vorhanden, bis Schritt 3 abgeschlossen ist. Möglicherweise müssen Sie das Netzwerk-Subsystem neu starten (oder einfach neu starten), um dnsmasqmit den Standardkonfigurationen arbeiten zu können. In meinen Tests war es ausreichend , einen bekannten DNS-Server hinzuzufügen /etc/dnsmasq.confund neu zu starten dnsmasq, damit er in einer Live-CD-Umgebung funktioniert.


Eine gute Antwort und anscheinend die einzige Lösung, wenn NetworkManager deaktiviert wird, ist nicht akzeptabel!
bogl

3
Für mich war dies eine großartige Antwort, erforderte aber auch die zusätzlichen Schritte von @ blablas Antwort und das Hinzufügen der dns=dnsmasqKonfiguration zu/etc/NetworkManager/NetworkManager.conf
Roberto Tyley

Hier gilt das gleiche. Nachdem man mit systemd-aufgelösten und ungebundenen Problemen zu kämpfen hatte, gelang es Ubuntu 17.10, auf dnsmasq umzusteigen. Ich musste allerdings Blablas Zusätze verwenden.
Alberto L. Bonfiglio

17

Zusätzlich zur Antwort von @quixotic:

Stellen Sie sicher, dass Sie in /etc/NetworkManager/NetworkManager.conf Folgendes haben:

[main]
dns=dnsmasq

Wenn Sie es hinzufügen müssen, starten Sie NetworkManager folgendermaßen neu:

sudo systemctl restart NetworkManager

und /etc/resolv.confmuss ein Symlink zu sein /var/run/NetworkManager/resolv.conf. könnte so gemacht werden

sudo rm /etc/resolv.conf; sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf

Eigentlich habe ich es als gesetzt dns=defaultund es funktioniert gut, weil ich die Nameserver dann von NetworkManager definiert habe, anstatt in dnsmasq definiert zu werden; Das funktioniert bei mir - NM ruft die Nameserver aus den Einstellungen ab, die in der NM-Konfiguration von KDE über die Taskleiste vorgenommen wurden. Ich verwende feste IP in meinem Heimnetzwerk FWIW.
pbhj

1
Dieser Schritt war eine notwendige Ergänzung zu @ quixotics Antwort für mich (Ubuntu 17.04, Vollinstallation, nicht LiveCD).
Roberto Tyley

0

Gemäß dem Handbuch von systemd-resolved bietet systemd-resolved Namensauflösungsdienste über drei verschiedene Schnittstellen an:

  1. "API mit vollem Funktionsumfang, systemd-aufgelöst, macht auf dem Bus verfügbar"
  2. "Ein lokaler DNS-Stub-Listener für die IP-Adresse 127.0.0.53 auf der lokalen Loopback-Schnittstelle"
  3. Die API glibc getaddrinfo (3) gemäß RFC3493 und den zugehörigen Resolverfunktionen, einschließlich gethostbyname (3). Diese API wird weithin unterstützt, auch über die Linux-Plattform hinaus. In der aktuellen Form werden jedoch keine Informationen zum DNSSEC-Überprüfungsstatus angezeigt, und die Informationen sind nur synchron. Diese API wird vom glibc Name Service Switch (nss (5)) unterstützt. Die Verwendung des glibc NSS-Moduls nss-resolve (8) ist erforderlich, damit die NSS-Resolver-Funktionen von glibc Hostnamen über systemd-resolved auflösen können.

Es scheint, dass die ersten beiden Schnittstellen die normale DNS-Auflösung nicht beeinträchtigen und für mich liegt das Problem wahrscheinlich bei der dritten.

Im Handbuch von nss-resolve :

Um das NSS-Modul zu aktivieren, fügen Sie "resolve" in die Zeile ein, die mit "hosts:" in /etc/nsswitch.conf beginnt. Insbesondere wird empfohlen, "resolve" in der Zeile "hosts:" von /etc/nsswitch.conf (jedoch nach den Einträgen "files" oder "mymachines") vor dem Eintrag "dns" (sofern vorhanden) zu platzieren, gefolgt von "[! UNAVAIL = return]", um sicherzustellen, dass DNS-Abfragen immer über systemd-resolved (8) weitergeleitet werden, falls dieser Dienst nicht verfügbar ist

Es ist also erforderlich, dass "dns" in der Zeile "host:" von /etc/nsswitch.conf vor "resolve" steht . Und getaddrinfosollte dann einfach bei /etc/resolv.conf bleiben .

Diese Lösung verhindert nur, dass systemd-resolved alle DNS-Auflösungsanforderungen verarbeitet, und ist nicht auf einen bestimmten Netzwerkmanager beschränkt. Außerdem wird sichergestellt, dass der LLMNR- und der mDNS-Dienst normal funktionieren.

(Ich bin nicht mit der Funktionsweise der Namensauflösung unter Linux vertraut und bin mir auch nicht sicher, was ich aus diesen Handbüchern verstanden habe. Ich möchte darauf hinweisen, wenn ich etwas falsch gemacht habe. Thx :))


0

Für (X) Ubuntu 18.04 (siehe meine Antwort bei stackexchange ).

Hier ist eine Kopie davon (soll ich eine Kopie machen?)

Hier ist die Lösung für (X) Ubuntu 18.04 Bionic.

Installieren Sie dnsmasq

sudo apt install 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):

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

und neu starten

$ sudo systemctl restart systemd-resolved

(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.

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

Deaktivieren Sie das Überschreiben von /etc/resolv.conf durch NM (es gibt auch eine Option rc-manager, die jedoch nicht funktioniert, obwohl dies in einem Handbuch beschrieben ist):

$ cat /etc/NetworkManager/conf.d/disableresolv.conf 
[main]
dns=none

und starte es neu:

$ sudo systemctl restart NetworkManager

Weisen Sie dnsmasq an, resolv.conf von NM zu verwenden:

$ cat /etc/dnsmasq.d/nmresolv.conf 
resolv-file=/var/run/NetworkManager/resolv.conf

und starte es neu:

$ sudo systemctl restart dnsmasq

Verwenden Sie dnsmasq zum Auflösen von:

$ cat /etc/resolv.conf 
# Use local dnsmasq for resolving
nameserver 127.0.0.1
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.