Verwenden von dnsmasq mit NetworkManager

Es war bekannt, dass NetworkManager nicht gut mit dnsmasq (ref: hier). Ich habe die lange Diskussion hier aber immer noch nicht sicher, wie ich mit der Situation umgehen soll.

Ich möchte nur dnsmasq verwenden, um DNS und DHCP für mein lokales Netzwerk bereitzustellen. Was wäre in diesem Fall der empfohlene Weg?

Es scheint, dass das Problem auch für Ubuntu 14.04 bestehen bleibt, selbst der Fehler ist angeblich behoben.

Als work arounds, Menschen deaktivieren die NM-versklavt dnsmasq-base, weil die folgenden Gründe:

Das 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). Also können wir nicht verwenden Sie unsere Server als DNS-Server für unsere lokalen Netzwerk-PCs, dh es ist völlig nutzlos für LANs.
  • Es werden keine Anforderungen zwischengespeichert (--cache-size=0). Kein Caching ==> keine DNS-Abfragen beschleunigen. Dies wieder ist für LANs sehr wichtig, da es viele gleichzeitige Benutzer gibt.
  • Schließlich brauchen wir auch die DHCP-und TFTP-Funktionalität von dnsmasq, also selbst wenn NM+dnsmasq einen echten DNS-Server enthalten würde, müssten wir einen anderen dnsmasq ausführen

Aber ich bin mir nicht sicher, ob sie noch halten und / oder wie der Fix das Problem(die Probleme) gelöst hat. Außerdem ist keiner von ihnen genau klar, was sie getan haben und wie sie ihr Problem gelöst haben. Dh, der Lösungsteil fehlt in der langwierigen Diskussion. Kann jemand bitte die Lücken ausfüllen? D. h.,

Das von Ubuntu standardmäßig bereitgestellte dnsmasq funktioniert aus den oben genannten Gründen auf der Serverseite nicht. Und auch auf der Client-Seite, "die dnsmasq auf diesen Ubuntu Laptops installiert kann LAN DNS-Abfrage von meinem DNS-Server nicht tun" , weil "die (Ubuntu Laptops') NetworkManager verursacht sie eine seltsame 127.0.1.1 Nameserver-Einstellung haben " (ref: DNS-Lösung für LAN oder lokale Heimnetzwerke Netzwerk)

Wie kann dnsmasq mit NetworkManager reibungslos funktionieren, um DNS und DHCP (und TFTP) für mein lokales Netzwerk sowohl auf der Server-als auch auf der Clientseite bereitzustellen?

TL'dr

Für diejenigen, die die Antwort suchen. Von allen Antworten unten fand ich, dass die einfachste Lösung @brads ist, für die Serverseite (immer noch keine gute Antwort für die Clientseite):

Die einzige Lösung für das Problem besteht darin, den NM-Drive dnsmasq zu deaktivieren..., und installieren die "standard" dnsmasq und konfigurieren Sie es dann über seine Standard-Konfigurationsdatei /etc/dnsmasq.conf.

Author: xpt, 2013-11-29

6 answers

Ich habe auch deine Probleme.

Im Prinzip nach wiki.archlinux, es scheint, dass es ausreichen sollte, um das Caching zu aktivieren, um eine Datei /etc/NetworkManager/dnsmasq.d/cache zu erstellen, die einfach

$ cat /etc/NetworkManager/dnsmasq.d/cache 
cache-size=1000

Ich habe das versucht, aber nach dem Neustart 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 conf-Datei immer leer ist: Ich konnte mit dieser Prozedur keine Option konfigurieren.

Alles in allem scheint die NM-versklavte dnsmask in 14.04 (die von der dnsmasq-base package) vollständig gesperrt ist, so ist es nicht möglich, Caching zu aktivieren, noch etwas anderes (dhcp, tftp).

Wenn dies richtig ist, denke ich, dass, wie Sie sagen, die einzige Lösung für das Problem darin besteht, den NM-Drive dnsmasq zu deaktivieren, indem Sie die Zeile

dns=dnsmasq

In der Datei /etc/NetworkManager/NetworkManager.conf installieren Sie den" Standard " dnsmasq und konfigurieren ihn dann über die Standard-Konfigurationsdatei /etc/dnsmasq.conf.

 4
Author: brad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-01-15 21:31:08

Es ist möglich, Einstellungen zu überschreiben, indem man sie in /etc/NetworkManager/dnsmasq.d/*.conf. Konfigurationsdateieinstellungen haben Vorrang vor Befehlszeilen-Flags. Sie werden angewendet, wenn NetworkManager dnsmasq startet. Führen Sie sudo service network-manager restart aus, um sich erneut anzuwenden. (Wenn es Zweifel gibt: Brads Antwort verpasste die Tatsache, dass ps ax | grep dns ein --conf-dir Argument zeigt)

Zum Beispiel:

echo cache-size=1000 |sudo tee -a /etc/NetworkManager/dnsmasq.d/cache.conf

Wie ich mich erinnere, deaktiviert NetworkManager das dnsmasq-Caching aufgrund von Bedenken hinsichtlich einer Cache-Vergiftung standardmäßig. Für eine Maschine, der alle Benutzer vertrauen kann kein Problem sein.

NetworkManager lässt sich nicht in resolvconf integrieren, und der Server von NM bei 127.0.1.1 wird nicht lokal verwendet, wenn das resolvconf-Paket installiert ist. resolvconf ist Teil von Ubuntu-Minimal-und Standard-Debian-Installationen; NetworkManager implementiert diese Funktionalität auf eine stärker integrierte, weniger skriptbasierte Weise neu.

NetworkManager stellt sicher, dass eine globale dnsmasq-Instanz nicht beeinträchtigt wird (Bindung an eine sekundäre Loopback-IP und Festlegen von bind-interfaces über /etc/dnsmasq.d/network-manager). Wenn Sie installieren Sie eine globale dnsmasq-Instanz und behalten Sie die Instanz von NM bei, überprüfen Sie /etc/resolv.conf, um zu sehen, welche der Host standardmäßig verwendet.

Wenn Sie die dnsmasq-Instanz von NetworkManager wie oben gezeigt anpassen können, sollten Sie, wenn Sie einen DNS-Server wünschen, der an öffentliche Schnittstellen bindet, das Paket dnsmasq installieren (NetworkManager verwendet nur dnsmasq-base, das keine globale Instanz konfiguriert) und Ihre Konfiguration in /etc/dnsmasq.d/*.conf. Die Slave-Instanz von NetworkManager soll nur an das Loopback gebunden werden schnittstelle und Konfiguration über diesen Rahmen hinaus würde es riskieren, es zu brechen.


Zusammenfassend 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 weiterhin ausreichen. Aber für ein benutzerdefiniertes LAN mit TFTP und so weiter:

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
 6
Author: Tobu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2014-12-01 19:14:56

Trotz gegenteiliger Behauptungen ignoriert NetworkManager alle dmsmasq – Konfigurationsdateien vollständig-auch die in seinem eigenen Verzeichnis /etc/NetworkManager/dnsmasq-shared.d. Der Beweis ist im Quellcode für NetworkManager... Hier ist der relevante Kommentar:

/ * dnsmasq kann von seinem Standardkonfigurationsdateispeicherort lesen, der, wenn dieser Speicherort eine gültige Konfigurationsdatei ist, mit den Optionen hier kombiniert wird und unerwünschte Nebenwirkungen verursacht. Wie das Senden gefälschter IP-Adressen als die gateway oder was auch immer. Sagen Sie dnsmasq also, keine Konfigurationsdatei zu verwenden. */

Hier ist ein Link zum relevanten Quellcode (Zeilen 139-144).

 1
Author: bsalnick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-01-21 20:49:04

Ich wollte einen bestimmten MAC einer bestimmten IP-Adresse zuweisen und aus Gründen der Stabilität so weit wie möglich beim Standardnetzwerkmanager/dnsmasq bleiben.

Https://cgit.freedesktop.org/NetworkManager/NetworkManager/tree/src/dnsmasq/nm-dnsmasq-manager.c hat den Kommentar zur Verwendung von --conf-file, um Konfigurationen zu ignorieren, aber später 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, nachdem Sie einen WLAN-Hotspot eingerichtet und einen anderen geteilt haben connection, ps auxgww | grep dnsmasq zeigt, dass das letzte Befehlszeilenargument jedes dnsmasq-Prozesses lautet:

--conf-dir=/etc/NetworkManager/dnsmasq-shared.d

Daher ist es möglich, Konfigurationsdateien in diesem Verzeichnis zu erstellen, die für alle Aufrufe von dnsmasq freigegeben sind, die vom Netzwerkmanager gestartet werden.

Ich habe /etc/NetworkManager/dnsmasq-shared erstellt.d/Hue -

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 erhielt Anschrift.

Ja, das ist falsch, weil es bedeutet, dass alle Aufrufe von dnsmasq von NetworkManager diese Deklaration erhalten, aber in diesem Fall ist es harmlos, weil es nur wichtig ist, wenn der MAC im betreffenden Netzwerk angezeigt wird. Wenn das Netzwerk nicht 192.168.1 ist, wird es Probleme geben.

Dies ist robuster als das Ersetzen von /usr/sbin / dnsmasq durch ein Skript, wie unter vorgeschlagen https://gist.github.com/magnetikonline/6236150

Die richtige Lösung wäre ändern Sie, wie dnsmasq aufgerufen wird, um dnsmasq-Konfigurationsdateien ordnungsgemäß zu verwenden. Ich verstehe den Wunsch, Netzwerkmanager "nur arbeiten" zu lassen, aber Werkzeuge idiotensicher zu machen, bedeutet, dass nur Idioten sie verwenden können.

 0
Author: Christopher Brooks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-01-21 18:03:24

Meine Lösung könnte Network Manager brechen und es hält alles einfach, Dinge zu tun. Mit NMS gebrochener Art, mit dnsmasq umzugehen, überschreibe ich es einfach mit meiner Methode unten.

Eine Problemumgehung bestand darin, einfach Folgendes zu tun:

sudo apt install dnsmasq
cp /etc/dnsmasq.conf ~/

Bearbeiten Sie die ~/dnsmasq.conf - Datei in Ihrem Benutzerverzeichnis, wie Sie sie haben möchten, und speichern Sie sie.

sudo rm -v /etc/dnsmasq.conf
sudo cp -v ~/dnsmasq.conf /etc/
sudo chattr +i /etc/dnsmasq.conf
sudo systemctl restart dnsmasq.service

Ich habe einen einfachen Bash-Alias erstellt und ihn an den unteren Rand meines ~/gesetzt.bash_aliases Datei, um es einfach zu machen, die dnsmasq zu bearbeiten.conf Datei. Hier ist der Alias:

alias="sudo chattr -i /etc/dnsmasq.conf && sudo nano -w /etc/dnsmasq.conf && sudo chattr +i /etc/dnsmasq.conf && sudo systemctl restart dnsmasq.service"

Natürlich können Sie für den zweiten Sudo-Befehl im Alias einen beliebigen Editor nach Ihren Wünschen auswählen, aber ich habe nano dort für jedermann verwendet. Speichern Sie die Datei, schließen und öffnen Sie Ihren Befehl Terminal Tab / Fenster. Dadurch sollte der Alias für neu geöffnete Terminalregisterkarten/ - fenster verfügbar sein.

Führen Sie einfach eddmc aus Ihrem Benutzerkonto aus und es wird nach Ihrem Passwort gefragt, um die erhöhten Befehle auszuführen.

Beachten Sie, dass ich immer chattr +i die Datei. Dies ist so Network Manager wird Ihre Konfiguration nicht mit seiner eigenen überschreiben.

Bei kabelgebundenen Ethernet-Verbindungen sollte es keine Probleme geben. Ich habe festgestellt, seit ich dnsmasq für DNS-Caching auf Laptops mit wireless verwende, dass ich dnsmasq manuell neu starten muss.service nach dem Anschluss an einen Access Point. Ich denke, der Netzwerkmanager kann Aufgaben wie das Neustarten von Diensten beim Herstellen einer Verbindung ausführen, aber ich habe mich noch nicht damit befasst.

 0
Author: jpyper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-02-12 04:52:53

So verwenden Sie dnsmasq, um DNS und DHCP für mein lokales Netzwerk bereitzustellen:

Löschen:

/etc/dnsmasq.conf

Dienst neu Starten:

service dnsmasq restart

Das Problem der Zuweisung der Adresse wurde behoben.

Die Konfigurationsdatei hatte einen Fehler in der IP-Adresse: Anstelle von 192.168.0.1 war es 192.158.0.1

Offensichtlich ein Tippfehler, aber sobald dnsmasq auto es ohne dnsmasq.conf erkennt, wird die Änderung in der gesicherten Konfiguration angehängt und der Dienst neu gestartet.

Was den Netzwerkmanager betrifft seine Konfiguration sollte durch Kommentieren überfahren werden:

dns=dnsmasq
 -1
Author: Zulfiqar Ali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2020-05-08 17:46:11