it-swarm.com.de

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

Ubuntu 16.10+ verwendet systemd-resolved als DNS-Resolver.

Ich bevorzuge das Setup 16.04, das dnsmasq als Resolver verwendet.

Wie kann ich das am 16.10+ machen, besonders am 17.04?

27
Artyom

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

  1. dnsmasq und Abhängigkeiten installieren (oder zumindest deren Pakete herunterladen) vor dem Deaktivieren von systemd-resolved:

    Sudo apt-get install dnsmasq
    
  2. Deaktivieren Sie systemd-resolved und vergewissern Sie sich, dass dnsmasq ausgeführt wird:

    Sudo systemctl stop systemd-resolved
    Sudo systemctl disable systemd-resolved
    
    systemctl status dnsmasq
    
  3. Saison dnsmasq nach Geschmack. Starten Sie dnsmasq neu, nachdem Sie Ihre Einstellungen übernommen haben:

    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), damit dnsmasq mit den Standardkonfigurationen funktioniert. In meinen Tests war es ausreichend, einen bekannten DNS-Server zu /etc/dnsmasq.conf hinzuzufügen und dnsmasq neu zu starten, damit er in einer Live-CD-Umgebung funktioniert.

32
quixotic

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.conf muss ein Symlink zu /var/run/NetworkManager/resolv.conf sein. könnte so gemacht werden

Sudo rm /etc/resolv.conf; Sudo ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
16
blabla

Für (X) Ubuntu 18.04 (siehe mein 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 können Sie es auch mit $ Sudo systemctl disable systemd-resolved.service vollständig deaktivieren.)

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

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, "dns" in der Zeile "Host:" von /etc/nsswitch.conf vor "resolve" zu setzen. Und dann sollte getaddrinfo einfach /etc/resolv.conf einhalten.

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
Dummmy