Antworten:
dnsmasq
Pakete sind noch in 16.10 und 17.04 verfügbar.
Installieren Sie dnsmasq
und Abhängigkeiten (oder laden Sie zumindest ihre Pakete herunter), bevor Sie deaktivierensystemd-resolved
:
sudo apt-get install dnsmasq
Deaktivieren systemd-resolved
und überprüfen dnsmasq
läuft:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
systemctl status dnsmasq
Nach dnsmasq
Belieben 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 dnsmasq
mit den Standardkonfigurationen arbeiten zu können. In meinen Tests war es ausreichend , einen bekannten DNS-Server hinzuzufügen /etc/dnsmasq.conf
und neu zu starten dnsmasq
, damit er in einer Live-CD-Umgebung funktioniert.
dns=dnsmasq
Konfiguration zu/etc/NetworkManager/NetworkManager.conf
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 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
dns=default
und 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.
Gemäß dem Handbuch von systemd-resolved bietet systemd-resolved Namensauflösungsdienste über drei verschiedene Schnittstellen an:
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 getaddrinfo
sollte 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 :))
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