
Es war bekannt, dass NetworkManager nicht gut funktioniert mit dnsmasq
(ref:Hier). Ich habe den langen Text überflogenDiskussion hieraber ich bin immer noch nicht sicher, was die empfohlene Vorgehensweise zum Umgang mit der Situation ist.
Alles, was ich tun möchte, ist zu verwenden, dnsmasq
umDNS und DHCP für mein lokales Netzwerk bereitstellen. Was wäre in diesem Fall der empfehlenswerte Weg?
Es scheint, dass das Problem auch für Ubuntu 14.04 besteht, selbst dieInsektsoll behoben sein.
Als Workaround deaktivieren Benutzer den NM-Enslaved dnsmasq-base
aus den folgenden Gründen:
Der NM-Enslaved dnsmasq
verwendet fest codierte Optionen (in C), die eine äußerst eingeschränkte Funktionalität bieten.
- Es hört nicht auf ethX (
--listen-address=127.0.0.1
). Daher können wir unsere Server nicht als DNS-Server für unsere lokalen Netzwerk-PCs verwenden, d. h. es ist für LANs völlig nutzlos. - Es speichert keine Anfragen zwischen (
--cache-size=0
). Kein Caching ==> keine Beschleunigung von DNS-Abfragen. Dies ist wiederum sehr wichtig für LANs, da es viele gleichzeitige Benutzer gibt. - Schließlich benötigen wir auch die DHCP- und TFTP-Funktionalität von dnsmasq. Selbst wenn NM+dnsmasq einen echten DNS-Server enthalten würde, müssten wir also einen weiteren dnsmasq ausführen.
Aber ich bin mir nicht sicher, ob sie noch gültig sind und/oder wie der Fix das/die Problem(e) gelöst hat. Außerdem ist bei keinem von ihnen ganz klar, was sie genau getan haben und wie sie das Problem gelöst haben. D. h. der Lösungsteil fehlt in derlange Diskussion. Kann jemand bitte die Lücken ausfüllen? D.h.
Die dnsmasq
von Ubuntu bereitgestellte Out-of-Box funktioniert aus den oben genannten Gründen auf der Serverseite nicht. Und auch auf der Clientseite„Das auf diesen Ubuntu-Laptops installierte DNSMASQ kann keine LAN-DNS-Abfragen von meinem DNS-Server aus durchführen.“, Weil„Der NetworkManager (der Ubuntu-Laptops) führt dazu, dass sie eine seltsame 127.0.1.1-Nameserver-Einstellung haben.“(Referenz:DNS-Lösung für LAN oder lokales Heimnetzwerk)
Wie kann ich dafür sorgen, dass dnsmasq reibungslos mit NetworkManager zusammenarbeitet, um meinem lokalen Netzwerk sowohl auf der Server- als auch auf der Clientseite DNS und DHCP (und TFTP) bereitzustellen?
Kurz zusammengefasst
für diejenigen, die die Antwort suchen. Von allen Antworten unten fand ich die einfachste Lösung ist @brads, für dieServerseite(immer noch keine gute Antwort für die Clientseite):
Die einzige Lösung des Problems besteht darin, das NM-Laufwerk dnsmasq zu deaktivieren, das „Standard“-dnsmasq zu installieren und es dann über seine Standardkonfigurationsdatei zu konfigurieren
/etc/dnsmasq.conf
.
Antwort1
Ich habe auch deine Probleme.
Im Prinzip nachwiki.archlinux, es scheint, dass es zum Aktivieren des Caching ausreichen sollte, eine Datei zu erstellen, /etc/NetworkManager/dnsmasq.d/cache
die einfach enthält
$ cat /etc/NetworkManager/dnsmasq.d/cache
cache-size=1000
Ich habe dies versucht, aber nach dem Neustart von NM habe ich immer noch keinen Cache:
# ps ax | grep dns
11724 ? S 0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
Beachten Sie, dass die zitierte Konfigurationsdatei immer leer ist: Ich konnte mit diesem Verfahren keine Option konfigurieren.
Alles in allem scheint es, dass die NM-unterstützte DNS-Maske in 14.04 (die vom DNS-Masq-Base-Paket bereitgestellt wird) vollständig gesperrt ist, sodass es nicht möglich ist, das Caching oder irgendetwas anderes (DHCP, TFTP) zu aktivieren.
Wenn das richtig ist, denke ich, dass, wie Sie sagen, die einzige Lösung des Problems darin besteht, das NM-Laufwerk dnsmasq zu deaktivieren, indem Sie die Zeile auskommentieren
dns=dnsmasq
in der Datei /etc/NetworkManager/NetworkManager.conf
und installieren Sie das „Standard“-Dnsmasq und konfigurieren Sie es dann über seine Standardkonfigurationsdatei /etc/dnsmasq.conf
.
Antwort2
Es ist möglich, Einstellungen zu überschreiben, indem man sie in eingibt /etc/NetworkManager/dnsmasq.d/*.conf
. Einstellungen in Konfigurationsdateien haben Vorrang vor Befehlszeilenflags. Sie werden angewendet, wenn NetworkManager dnsmasq startet. Führen Sie es aus, sudo service network-manager restart
um es erneut anzuwenden. (Bei Zweifeln: Brads Antwort hat die Tatsache übersehen, dass ps ax | grep dns
ein --conf-dir
Argument angezeigt wird.)
Zum Beispiel:
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf
Soweit ich mich erinnere, deaktiviert NetworkManager standardmäßig das DNSMASQ-Caching, da Bedenken wegen Cache-Poisoning bestehen. Bei einem Rechner, auf dem alle Benutzer als vertrauenswürdig gelten, ist dies möglicherweise kein Problem.
NetworkManager lässt sich nicht in integrieren resolvconf
und der Server von NM 127.0.1.1
wird nicht lokal verwendet, wenn das Paket „resolvconf“ installiert ist. „resolvconf“ ist Teil der Ubuntu-Minimal- und Standard-Debian-Installationen. NetworkManager implementiert diese Funktionalität auf eine integriertere, weniger skriptbasierte Weise neu.
NetworkManager stellt sicher, dass es nicht mit einer globalen DNSMASQ-Instanz interferiert (Bindung an eine sekundäre Loopback-IP und Einstellung bind-interfaces
über /etc/dnsmasq.d/network-manager
). Wenn Sie eine globale DNSMASQ-Instanz installieren und die Instanz von NM behalten, überprüfen Sie noch einmal, /etc/resolv.conf
welche der Host standardmäßig verwendet.
Sie können die dnsmasq-Instanz von NetworkManager zwar wie oben gezeigt anpassen, wenn Sie jedoch einen DNS-Server wünschen, der an öffentliche Schnittstellen gebunden ist, sollten Sie das dnsmasq
Paket installieren (NetworkManager verwendet nur dnsmasq-base
, wodurch keine globale Instanz konfiguriert wird) und Ihre Konfiguration in eingeben /etc/dnsmasq.d/*.conf
. Die Slave-Instanz von NetworkManager ist nur für die Bindung an die Loopback-Schnittstelle vorgesehen, und eine Konfiguration über diesen Rahmen hinaus würde zu einer Beschädigung führen.
Zusammengefasst für jemanden, der nur lokales DNS-Caching möchte:
sudo apt-get remove dnsmasq resolvconf dhcpcd5 rdnssd
echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf
Für ein einfaches LAN sollte die Verbindungsfreigabe von NetworkManager immer noch ausreichen. Aber für ein benutzerdefiniert konfiguriertes LAN mit TFTP usw.:
sudo apt-get install resolvconf dnsmasq
echo 192.168.0.50,192.168.0.150,12h |sudo tee -a /etc/dnsmasq.d/lan.conf
echo enable-tftp |sudo tee -a /etc/dnsmasq.d/lan.conf
sudo service dnsmasq restart
Antwort3
Zusätzlich zu den vorherigen Antworten auf diesen Beitrag möchte ich hinzufügen, dass die Instanz des Netzwerkmanagers dnsmasq-base
ebenfalls der Anweisung folgt addn-hosts
(die in einer Konfigurationsdatei unter /etc/NetworkManager/dnsmasq-shared.d/ abgelegt ist) und dnmasq-base zwingt, die lokale /etc/hosts
Datei zu lesen, obwohl dnsmasq mit der --no-hosts
Option vom Netzwerkmanager aufgerufen wird.
Auf diese Weise ist es mir gelungen, einen lokalen DNS-Server auf meinem Mint 20.1-Laptop einzurichten. Ich muss nicht mit IP-Adressen herumfummeln (sofern richtig eingerichtet /etc/hosts
...)
Unten finden Sie ein funktionierendes Beispiel …
# /etc/NetworkManager/dnsmasq-shared.d/local-DNS.conf
domain=local.wifi // specify the (local) DNS-domain
addn-hosts=/etc/hosts // force dnmasq to read /etc/hosts despite --no-host
bogus-priv // do not forward private reverse lookups to upstream server (not needed if there is none...)
dhcp-option=6,[IP-OF-WIFI_IF] // tell client to use [IP-OF-WIFI_IF] as DNS-Server
Antwort4
Ich wollte einer bestimmten IP-Adresse eine bestimmte MAC zuweisen und aus Stabilitätsgründen so weit wie möglich beim Standard-Netzwerkmanager/dnsmasq bleiben.
https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.chat den Kommentar über die Verwendung von --conf-file zum Ignorieren von Konfigurationen, aber weiter unten in der Datei haben wir
/* dnsmasq exits if the conf dir is not present */
if (g_file_test (CONFDIR, G_FILE_TEST_IS_DIR))
nm_cmd_line_add_string (cmd, "--conf-dir=" CONFDIR);
Unter Ubuntu 16.04 LTS wird nach dem Einrichten eines WLAN-Hotspots und dem Teilen einer weiteren Verbindung ps auxgww | grep dnsmasq
angezeigt, dass das letzte Befehlszeilenargument jedes der dnsmasq-Prozesse lautet:
--conf-dir=/etc/NetworkManager/dnsmasq-shared.d
Daher ist es möglich, in diesem Verzeichnis Konfigurationsdateien zu erstellen, die von allen vom Network Manager gestarteten Aufrufen von dnsmasq gemeinsam genutzt werden.
Ich habe /etc/NetworkManager/dnsmasq-shared.d/Hue erstellt
dhcp-host=0c:4d:e9:a0:ce:cf,192.168.1.221
und neu gestartet, obwohl läuft
sudo service network-manager restart
hätte funktioniert.
Dies führte dazu, dass mein Gerät die entsprechende IP-Adresse erhielt.
Ja, das ist falsch, weil es bedeutet, dass alle Aufrufe von dnsmasq durch NetworkManager diese Deklaration erhalten, aber in diesem Fall ist es harmlos, weil es nur wichtig ist, ob die MAC im betreffenden Netzwerk angezeigt wird. Wenn das Netzwerk nicht 192.168.1 ist, gibt es Probleme.
Dies ist robuster als das Ersetzen von /usr/sbin/dnsmasq durch ein Skript, wie es unterhttps://gist.github.com/magnetikonline/6236150
Die richtige Lösung wäre, die Art und Weise zu ändern, wie dnsmasq aufgerufen wird, um die Konfigurationsdateien von dnsmasq richtig zu verwenden. Ich verstehe den Wunsch, dass Network Manager „einfach funktioniert“, aber wenn man die Tools idiotensicher macht, bedeutet das, dass nur Idioten sie verwenden können.