Linux | Konsole | genutzte(n) DNS-Server ermitteln/auslesen

Markus.Tenne

Cadet 4th Year
Registriert
Nov. 2021
Beiträge
67
Hallo!

Ich suche eine Möglichkeit in Linux über die Konsole den/die vom System genutzten DNS-Server zu ermitteln.

Es gibt die Möglichkeit die resolv.conf mit cat auszulesen:
Code:
cat /etc/resolv.conf
# Generated by resolvconf
nameserver 192.168.0.3
, aber das wäre die Konfigurationsdatei und spiegelt nicht den aktuellen Stand wieder, falls man im laufenden System den DNS-Server ändert.

Mit
Code:
ifconfig
funktioniert es nicht. Da wird alles ausgegeben, aber nicht der DNS.

Irgendwelche Ideen?


Unter Windows ist das einfacher, z.B. sieht das dann so aus:
Code:
C:\Users\user>ipconfig /all

Windows-IP-Konfiguration

   Hostname  . . . . . . . . . . . . : meinHostname
   Primäres DNS-Suffix . . . . . . . :
   Knotentyp . . . . . . . . . . . . : Hybrid
   IP-Routing aktiviert  . . . . . . : Nein
   WINS-Proxy aktiviert  . . . . . . : Nein

Ethernet-Adapter Ethernet:

   Verbindungsspezifisches DNS-Suffix:
   Beschreibung. . . . . . . . . . . : Realtek PCIe GbE Controller
   Physische Adresse . . . . . . . . : xx-xx-xx-xx-xx-xx
   DHCP aktiviert. . . . . . . . . . : Nein
   Autokonfiguration aktiviert . . . : Ja
   IPv4-Adresse  . . . . . . . . . . : 192.168.0.88 (Bevorzugt)
   Subnetzmaske  . . . . . . . . . . : 255.255.255.0
   Standardgateway . . . . . . . . . : 192.168.0.1
   DNS-Server  . . . . . . . . . . . : 192.168.0.2
                                       192.168.0.3
   NetBIOS über TCP/IP . . . . . . . : Aktiviert
 
"dig computerbase.de" oder "nslookup computerbase.de" sollte das gewünschte liefern...

// Edit, suchst du den DNS nach außen hin, oder den vom Rechner im lokalen Netz?
 
  • Gefällt mir
Reaktionen: RapHim und Termy
  • Gefällt mir
Reaktionen: KillerCow
Markus.Tenne schrieb:
aber das wäre die Konfigurationsdatei und spiegelt nicht den aktuellen Stand wieder, falls man im laufenden System den DNS-Server ändert
Ich habe es so in Erinnerung, dass sich eine Änderung der resolv.conf direkt auswirkt. Mag aber sein, dass das in modernen Distributionen teilweise nicht mehr der Fall ist.
 
  • Gefällt mir
Reaktionen: Markus.Tenne
Bei systemd unter Benutzung von resolved sollte das hier zum Ziel führen:
$ resolvectl status
 
kartoffelpü schrieb:
Ich habe es so in Erinnerung, dass sich eine Änderung der resolv.conf direkt auswirkt. Mag aber sein, dass das in modernen Distributionen teilweise nicht mehr der Fall ist.
Das wäre schön, wenn man es so belassen hätte. Ist leider nicht so. Zitat:

Hinweis:​

Bei der Verwendung von der interfaces-Datei und systemd-resolve kam es zu Problemen bei der Übergabe des Namens des DNS-Servers an systemd-resolve. Der DNS-Servername muss nach jedem Neustart erneut manuell systemd-resolve übergeben werden. Besser Netplan oder systemd-networkd benutzen.
 
  • Gefällt mir
Reaktionen: kartoffelpü
Markus.Tenne schrieb:
, aber das wäre die Konfigurationsdatei und spiegelt nicht den aktuellen Stand wieder, falls man im laufenden System den DNS-Server ändert.
Man beachte den Kommentar: # Generated by resolvconf

resolvconf ist ein Service, der /etc/network/interfaces monitored und /etc/resolv.conf dementsprechend anpasst. Anwendungen/Kommandos wie ifup/ifdown, dhclient sowie zB dnsmasq verwenden diesen Service, um indirekt Änderungen in /etc/resolv.conf zu schreiben. Es ist gar so, dass manuelle Änderungen von /etc/resolv.conf überschrieben werden.

Also was genau willst du nun tun? Die resolv.conf sollte stets die aktuellen DNS-Server der Interfaces oder ggfs über dnsmsaq, o.ä. enthalten.

Ergänzung ()

Die Reihenfolge der von resolvconf generierten Einträge in /etc/resolv.conf wird im übrigen über /etc/resolveconf/interface-order gesteuert. Anhand dieser Priorität (oben = als erstes) werden die in /etc/network/interfaces konfigurierten Nameserver der jeweiligen Interfaces in die resolv.conf geschrieben. Sollte also der falsche Nameserver ganz oben stehen, weil man den DNS einer anderen Schnittstelle haben wollte, muss man die interface-order für den Dienst resolvconf anpassen.


Bezüglich systemd-resolve : Ubuntu hat bis Version 17 resolvconf verwendet und nutzt seitdem systemd-resolve. Das ist ein vergleichbarer Service, der ebenfalls die resolv.conf automatisch generiert (würde dann aber auch in der generierten resolv.conf im Kommentar stehen). Man kann vom einen auf das andere System umschwenken, aber dann sollte man den jeweils anderen Dienst abschalten, weil zu viele Köche nun mal den Brei verderben ;)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Markus.Tenne
Markus.Tenne schrieb:
Das löst mein "Problem".
Natürlich freut es mich, wenn mein Beitrag hilfreich war, aber da du dein "Problem" bisher nicht näher spezifiziert hast, kann ich nicht beurteilen ob meine Ausführungen tatsächlich eine "Lösung" sind. Wer weiß, je nachdem was genau denn nun der Stein des Anstoßes war, kann es vollkommen andere Ursachen und somit Lösungen dafür geben.

Prinzipiell würde ich beispielsweise die resolv.conf einfach mal cat-ten bevor und nachdem du zB den Nameserver für ein Interface änderst und es mit ifdown ifup einmal neustartest - oder was auch immer du in #1 mit Änderungen "am laufenden System" im Detail gemeint hast.
Ein Prozess, der nicht mit dem Dienst resolvconf zusammenarbeitet, kann beispielsweise nach wie vor hart codiert in /etc/resolv.conf rumfummeln und der Dienst bügelt die Änderungen spätestens beim nächsten Boot einfach wieder über.

*edit
Hier werden beispielsweise einige Anwendungen wie zB dhclient (=DHCP-Client) genannt, die den resolvconf-Service nutzen. Was andere Anwendungen, die /etc/resolv.conf verändern wollen, tun, ist zunächst einmal unklar.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Markus.Tenne
Markus.Tenne schrieb:
Es gibt die Möglichkeit die resolv.conf mit cat auszulesen:
Code:
cat /etc/resolv.conf
# Generated by resolvconf
nameserver 192.168.0.3
, aber das wäre die Konfigurationsdatei und spiegelt nicht den aktuellen Stand wieder, falls man im laufenden System den DNS-Server ändert.

Schau dir mal an was hier passiert:

$ strace --trace=file telnet bratwurst.de
execve("/usr/bin/telnet", ["telnet", "bratwurst.de"], 0x7ffe65fdc210 /* 55 vars */) = 0
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=78031, ...}, AT_EMPTY_PATH) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libstdc++.so.6", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=2252096, ...}, AT_EMPTY_PATH) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=2216304, ...}, AT_EMPTY_PATH) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libm.so.6", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=940560, ...}, AT_EMPTY_PATH) = 0
openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=125488, ...}, AT_EMPTY_PATH) = 0
newfstatat(AT_FDCWD, "/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=926, ...}, 0) = 0
openat(AT_FDCWD, "/etc/host.conf", O_RDONLY|O_CLOEXEC) = 3
newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=92, ...}, AT_EMPTY_PATH) = 0
openat(AT_FDCWD, "/etc/resolv.conf", O_RDONLY|O_CLOEXEC) = 3
Ergänzung ()

Raijin schrieb:
weil man den DNS einer anderen Schnittstelle haben wollte
DNS ist nicht interface spezifisch, das stiftet nur Verwirrung.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Markus.Tenne
Raijin schrieb:
Für mich war es die Lösung. Ich brauchte für ein kleines Infoscript eine sichere Bezugsquelle für den aktuellen DNS-Server. Da die resolv.conf wohl den aktuellen Stand widerspiegelt, kann ich getrost den Wert dort auslesen.
foofoobar schrieb:
Wenn ich das (für mich Kauderwelsch gg) richtig verstehe, wird der DNS-Server bei einer Anfrage (hier bratwurst.tld) aus der resolv.conf gelesen und wohl danach die DNS-Abfrage an die frisch ausgelesene IP#53 geschickt.

Kurzum: Die resolv.conf ist keine normale Konf-Datei, die vom User nach Belieben geändert wird, sondern wird vom System erstellt. Somit ist sie immer aktuell.
 
Markus.Tenne schrieb:
Für mich war es die Lösung. Ich brauchte für ein kleines Infoscript eine sichere Bezugsquelle für den aktuellen DNS-Server. Da die resolv.conf wohl den aktuellen Stand widerspiegelt, kann ich getrost den Wert dort auslesen.
Es kann dort allerdings ein lokaler Caching-Service drinstehen der wiederum eine eigene Config hat.
 
  • Gefällt mir
Reaktionen: Markus.Tenne und Raijin
Zurück
Oben