So bringen Sie den Netzwerkmanager dazu, domänenspezifische Nameserver mit openresolv + dnsmasq zu konfigurieren

11

Ich verbinde mich oft gleichzeitig mit mehreren Netzwerken. Jedes dieser Netzwerke bietet eine Nameserver-Konfiguration über DHCP. ZB Netzwerk 1: (eth0):

domain company1.corp #
nameserver 192.168.0.253
nameserver 192.168.0.254

Netzwerk 2 (tun0):

domain company2.corp #
nameserver 10.102.204.51
nameserver 10.102.208.51

# Namen geändert

Bei gleichzeitiger Verbindung mit beiden Netzwerken:

# resolv.conf from NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

Das Auflösen von service.company2.corp funktioniert nicht, da der Vornamenserver nur die Namen von company1.corp kennt.

Von diesem Artikel inspiriert , habe ich openresolv (eine resolvconf-Implementierung) eingerichtet, um einen lokalen dnsmasq-Dienst auf meiner Arch Linux-Installation zu konfigurieren.

Wenn ich die Nameserver manuell mit resolvconf konfiguriere:

# resolvconf -d NetworkManager
# echo "domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
" | resolvconf -a eth0
# echo "domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51
" | resolvconf -a tun0

Dann kann ich Namen sowohl von company1.corp als auch von company2.corp auflösen (der lokale dnsmasq-Server übernimmt dies.)

Beachten Sie, dass auflösungskonf -l nach der manuellen Konfiguration die beiden Konfigurationen separat anzeigt:

~ # resolvconf -l
# resolv.conf from tun0
domain company2.corp
nameserver 10.102.204.51
nameserver 10.102.208.51

# resolv.conf from eth0
domain company1.corp
nameserver 192.168.0.253
nameserver 192.168.0.254

Wenn Sie jedoch die Konfiguration von Network Manager durchführen lassen, sind die beiden Konfigurationen nicht getrennt, wie dies der Fall wäre, wenn Network Manager in /etc/resolve.conf schreiben würde

~ # resolvconf -l
# resolv.conf from NetworkManager
# Generated by NetworkManager
domain company1.corp, company2.corp
nameserver 192.168.0.253
nameserver 192.168.0.254
nameserver 10.102.204.51
# NOTE: the libc resolver may not support more than 3 nameservers.
# The nameservers listed below may not be recognized.
nameserver 10.102.208.51

Meine Frage ist, wie ich den Netzwerkmanager dazu bringen kann, resolveconf korrekt aufzurufen, damit die Nameserver für jede Schnittstelle separat registriert werden. (Leider ist das Googeln dafür nutzlos, da Google denkt, dass "resolveconf" == "resolve.conf")

Gary van der Merwe
quelle
2
Suchen Sie bei Google "resolvconf"mit den Anführungszeichen. Setzen Sie bei Google immer Anführungszeichen um Eigennamen.
Gilles 'SO - hör auf böse zu sein'

Antworten:

14

NetworkManager verfügt über die Funktionalität zum Verwalten eines integrierten lokalen DNSMASQ-Servers. Dazu muss nicht resolvconf / openresolv verwendet werden.

So aktivieren Sie dies:

  • Deaktivieren Sie die Konfiguration resolvconf / openresolv dnsmasq, wenn sie zuvor aktiviert wurde, und stellen Sie sicher, dass keine Instanzen von dnsmasq ausgeführt werden.
  • Stellen Sie sicher, dass dnsmasq installiert ist
  • Hinzufügen dns=dnsmasqzu /etc/NetworkManager/NetworkManager.conf.
  • Starten Sie NetworkManager neu

Sobald Sie dies getan haben, werden Sie sehen, dass NetworkManager einen dnsmasq-Prozess gestartet hat:

$ pgrep dnsmasq -fl
1697 /usr/bin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/nm-dns-dnsmasq.pid --listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf --cache-size=400 --proxy-dnssec

/etc/resolve.conf sollte auf die lokale dnsmasq-Instanz verweisen:

$ cat /etc/resolv.conf
# Generated by NetworkManager
domain company1.corp
search company1.corp
nameserver 127.0.0.1

und wir können sehen, welche Server dnsmasq verwendet:

# cat /var/run/nm-dns-dnsmasq.conf 
server=/company2.corp/10.102.208.51
server=/10.in-addr.arpa/10.102.208.51
server=192.168.1.244
server=192.168.1.239
Gary van der Merwe
quelle
wirklich nett, danke! sehr unkomplizierte und einfache Lösung, aber leider nicht bekannt - konnte nicht widerstehen, sorry
akostadinov
Dies scheint zu funktionieren, wenn eine lokale Verbindung mit einem oder zwei VPNs kombiniert wird. Es scheint, dass es mit zwei lokalen Verbindungen nicht funktioniert. Derzeit bin ich über Ethernet mit dem Büronetzwerk verbunden, wo die Upstream-Internetverbindung leider fehlgeschlagen ist. Außerdem bin ich über USB Ethernet (mein Telefon) mit einem funktionierenden Internet verbunden. Ich kann NetworkManager nicht dazu bringen, den Domänennamen auf den Office-DNS-Server anzuwenden.
Oskar Berggren
@OskarBerggren: Aktivieren Sie in Ihrem Office-Ethernet auf der Registerkarte IPv4 das Kontrollkästchen "Diese Verbindung nur für Ressourcen im Netzwerk verwenden".
Gary van der Merwe
@ GaryvanderMerwe Genau das habe ich versucht, vergessen, es zu schreiben. Es scheint eine verwandte Fehler- / Funktionsanforderung zu geben: bugzilla.gnome.org/show_bug.cgi?id=685962
Oskar Berggren
Zu Ihrerubound
Information,
0

Es sieht so aus, als würde NetworkManager einfach überschreiben /etc/resolv.confund openresolv nicht verwenden. Laut FS # 24635 unterstützt NetworkManager openreslov zwar, war jedoch im Build ursprünglich nicht aktiviert. Welche Version von Arch Linux verwenden Sie und wie lautet die Version des Networkmanager-Pakets?

mgorven
quelle
networkmanager 0.9.4.0-6 NetworkManager ruft resolveconf auf und schreibt nicht in /etc/resolev.conf. Das Problem besteht darin, dass NetworkManager die DNS-Informationen zusammenführt und als eine Schnittstelle an resolveconf und nicht als Informationen für die separaten Schnittstellen weitergibt.
Gary van der Merwe
0

Tun Sie, was Gary van der Merwe antwortete, aber in

/etc/NetworkManager/NetworkManager.conf

Ich musste hinzufügen

[main]
dns=dnsmasq

in die Datei. Nicht nur

dns=dnsmasq

Dies liegt daran, dass sich alle Einstellungen in dieser Datei in einem Abschnitt befinden müssen und die Version des NetworkManager-Pakets meiner Distribution, manjaro (archlinux), die Konfigurationsdatei nicht auffüllt. (Ich gehe davon aus, dass Garys Distribution dies tut, da seine vorgeschlagene Linie für ihn und andere funktioniert hat.)

Ein weiterer Hinweis: Jede dnsmasq-Konfiguration muss in einer Konfigurationsdatei enthalten sein

/etc/NetworkManager/dnsmasq.d/

Verzeichnis. Möglicherweise handelt es sich um ein anderes Verzeichnis auf Ihrem Computer. Ich habe das verwendete Verzeichnis anhand der Zeile gelernt, in der NetworkManager den dnsmasq-Daemon startet. Sie können diese Zeile sehen, indem Sie ausführen ps aux|grep dnsmasq. Sie müssen warten, um dies auszuführen, bis Sie die Konfiguration von NetworkManager geändert und den Dienst neu gestartet haben.

SultanLegend
quelle