Dies ist eine alte Version des Dokuments!
Systemd-resolved durch DNSmasq ersetzen
Ab Ubuntu 18.04 Seit Ubuntu 18.04 ist die Benutzung von DNSMASQ nur mehr sehr schwer möglich. Verantwortlich hierfür ist der Dienst „systemd-resolved“. Dieser ist ein Teil von Systemd und kann nicht entfernt werden. Um DNSMASQ dennoch benutzen zu können sind ein paar Konfigurationsänderungen notwendig.
Methode 1 --> vollautomatisch mit NetworkManger und DNSmasq-Base
Hierfür darf das Paket dnsmasq
nicht installiert. Achtung bei Upgrade von Ubuntu 16.04 auf Ubuntu 18.04. Vergesst nicht das Paket resolvconf
zum deinstallieren. Dieses Paket wird ab 18.04 nicht mehr unterstützt und ist somit auch kein Default mehr.
Konfiguration
Zuerst bringt man Networkmanager bei DNSMASQ zu benutzen anstatt von „systemd-resolved“. Hierfür müssen wir einen Eintrag in der Networkmanagerkonfiguration vornehmen.
nano /etc/NetworkManager/NetworkManager.conf
Hier unter „main“ den Dnsmasqeintrag hinzufügen.
[main] dns=dnsmasq
Weiters ist ein Teil der Konfguration die beim vollen DNSMASQ ja unter /etc/dnsmasq
liegt, nach /etc/NetworkManager/dnsmasq.d/dnsmasq.conf
zu speichern. Nicht die ganze Konfig, nur die Domänenteile:
... server=/tux.local/172.17.11.60 server=/11.17.172.in-addr.arpa/172.17.11.60 ...
In dieser Konfiguration dürfen keine DNSserver Fix in der Datei dnsmasq.conf
wie unter „Methode 2“ mit übergeben werden, da automatisch diese genutzt werden, die Networkmanager bekommt. Zu guter letzt ist noch auf die DNSkonfiguration des Networkmanagers zu verlinken.
rm /etc/resolv.conf ln -s /var/run/NetworkManager/resolv.conf /etc/resolv.conf
Und den Networkmanager neu starten:
systemctl restart NetworkManager
Ab nun wird die DNSmasq bei jedem Verbindungsprofil des Networkmangers berücksichtigt. Fügt man neue Domänen zur Datei dnsmasq.conf
hinzu oder löscht welche, ist lediglich ein Reload der Konfiguration notwendig. VPNs, Routen usw. bleiben dabei bestehen.
systemctl reload NetworkManager
Nutzt man Plasma/KDE können diese Befehle bequem über den Krunner abgesetzt werden. Polkit erledigt den Rest. Möchte man hier keine Passwortabrage haben, trägt man das Service ganz einfach in die /etc/sudoers
mit der ensprechende Admingruppe ein. Beispiel:
%wheel ALL=(ALL) NOPASSWD: /bin/systemctl reload NetworkManager
In Krunner kann dann der Befehl sudo systemctl reload NetworkManager
einfach abgesetzt werden. Auch für das File /etc/NetworkManager/dnsmasq.d/dnsmasq.conf
können entsprechende Gruppenrechte und Verknüpfung in Dolphin zur einfacheren Handhabung übergeben werden.
Methode 2 --> direkt mit DNSmasq
DNSMASQ wird meist verwendet um DNSserver Domänen zuzuweisen. Z.B.
server=/tux.local/172.17.11.60 server=/11.17.172.in-addr.arpa/172.17.11.60
Problem ist das die Datei /etc/resolv.conf
mit einem Wert beschieben wird wobei DNSMASQ nicht verwendet werden kann. Es ist möglich Networkmanager in der Datei /etc/NetworkManager/NetworkManager.conf
zu sagen das dieser DNSMASQ als DNSforwarder verwende soll. Leider kann DNSMASQ nicht auf dieser Adress 127.0.1.1
fungieren. Also ist auch das keine Lösung. Wie soll man also vorgeheh?
Als erstes stellt man im Networkmanager als DNSserver Localhost ein. ::1 127.0.0.1
. Wichtig ist das man beim Networkmanager angibt statt „Automatisch“, „nur Adressen“, da sonst auch die DNSserver vom DHCP mitübergeben werden. Nun gibt es zwei Dateien die für DNS Zuständig sind:
/run/systemd/resolve/stub-resolv.conf
Dies ist die Defaultdatei und Linkt nach/etc/resolv.conf
hier schreibt Systemd.- Zum Zweiten gibt es die Datei
/run/systemd/resolve/resolv.conf
diese wird direkt von Networkmanager beschrieben. Diese müssen wir für DNSmasq verwenden.
rm /etc/resolv.conf ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
Um nun auch öffentliche Adressen auflösen zu können müssen forwarder in der nano /etc/dnsmasq.conf
eingetragen werden:
server=IPV4dnsserver server=IPV6dnsserver ...
Die /etc/nsswitch.conf
sollte so aussehen:
... - hosts: files mdns4_minimal [NOTFOUND=return] dns ++ hosts: files dns mdns ...
Man kann hier natürlich auch nach belieben anders strukturieren. Hier hilft die Manpage. Z.B. statt mdns
kann man auch nur mdns4
oder mdns6
verwenden.
Zum Schluss noch die Dienste neu Starten:
systemctl restart NetworkManager systemctl restart dnsmasq.service
Methode 3 --> die Radikale (nicht zum emfehlen)
Seltsamer weise kommen dnsmasq und sytemdresolver bei machen Systemen nicht miteinander aus. Warum wurde noch nicht heraus gefunden. Ist das der Fall und können beide Dienste nicht zur gleichen Zeit laufen. Löscht man die resolv.conf
und deaktiviert den Systemdresolver.
systemctl stop systemd-resolved.service systemctl disable systemd-resolved.service rm /etc/resolv.conf touch /etc/resolv.conf systemctl restart dnsmasq.service