dig & nslookup kann lokale Hosts nur auflösen, wenn ich den zu verwendenden (lokalen) DNS-Server angegeben habe

7

Ich baue ein kleines privates Netzwerk innerhalb meines Universitätsnetzwerks auf. Ich habe eine Centos 6-Box ( Sonne ) zwischen meinem privaten Netzwerk und dem WAN der Universität. eth0 on the sun ist über einen netgear smart switch mit dem WAN und eth1 mit meinem privaten Netzwerk verbunden. sun fungiert als Router für das private Netzwerk und leitet den Datenverkehr von eth1 nach eth0 mithilfe von NAT weiter, das mit iptables konfiguriert wurde. Den Clients im privaten Netzwerk (von denen es gerade Quecksilber gibt ) werden über dnsmasq, das auf der Sonne läuft, eine IP, ein Gateway usw. und ein Hostname zugewiesen . dnsmasq ist so konfiguriert, dass eine bestimmte IP und ein bestimmter Hostname an die MAC-Adresse (n) des / der Clients gesendet werden.

Ich habe hart codiert die Host - Namen / IP - Adressen in /etc/hostsauf Sonne nur:

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.42.1    sun sun.beowulf.iecs
192.168.42.2    mercury mercury.beowulf.iecs

Momentan wird die IP-Adresse von eth0 (WAN-Ausrichtung) über DHCP zugewiesen ( sun eth0 wird unabhängig davon immer dieselbe IP zugewiesen. So macht die Universität die Dinge, aber ich bin dabei, dies zu ändern, um dies zu ermöglichen mir eine statische IP zuzuweisen). Meine /etc/resolv.confauf Sonne ist:

; generated by /sbin/dhclient-script
search biol.uregina.ca
nameserver 142.3.102.202
nameserver 142.3.100.15

Dies scheint beim Neustart überschrieben zu werden, sodass ich Folgendes habe /etc/dnsmasq-resolv.conf

search beowulf.iecs biol.uregina.ca
nameserver 127.0.0.1
nameserver 8.8.8.8

und haben dnsmasq angewiesen, es anstelle von zu verwenden /etc/resolv.conf

# Change this line if you want dns to get its upstream servers from
# somewhere other that /etc/resolv.conf
resolv-file=/etc/dnsmasq-resolv.conf

# By  default,  dnsmasq  will  send queries to any of the upstream
# servers it knows about and tries to favour servers to are  known
# to  be  up.  Uncommenting this forces dnsmasq to try each query
# with  each  server  strictly  in  the  order  they   appear   in
# /etc/resolv.conf
strict-order

Meistens funktioniert dieses Setup. Das Problem ich habe (und ich bin nicht sicher , ist es ein großer ein, aber ...) ist , dass nslookupund dignicht beide zu lösen Namen für Sonne und Quecksilber , es sei denn ich diese Befehle , die DNS - Server zu Abfrage informieren:

# nslookup sun.beowulf.iecs sun.beowulf.iecs
Server:     sun.beowulf.iecs
Address:    192.168.42.1#53

Name:   sun.beowulf.iecs
Address: 192.168.42.1

# nslookup sun sun.beowulf.iecs
Server:     sun.beowulf.iecs
Address:    192.168.42.1#53

Name:   sun
Address: 192.168.42.1

# nslookup sun
Server:     142.3.102.202
Address:    142.3.102.202#53

** server can't find sun: NXDOMAIN

# nslookup sun.beowulf.iecs
Server:     142.3.102.202
Address:    142.3.102.202#53

** server can't find sun.beowulf.iecs: NXDOMAIN

Die gleiche Leistung wird für Quecksilber anstelle von ** Sonne * angegeben. Repräsentative digAusgabe ist:

# dig @192.168.42.1 mercury.beowulf.iecs

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> @192.168.42.1 mercury.beowulf.iecs
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65090
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mercury.beowulf.iecs.      IN  A

;; ANSWER SECTION:
mercury.beowulf.iecs.   0   IN  A   192.168.42.2

;; Query time: 0 msec
;; SERVER: 192.168.42.1#53(192.168.42.1)
;; WHEN: Wed Jun 25 12:05:31 2014
;; MSG SIZE  rcvd: 54

und funktioniert nicht, wenn ich den zu verwendenden Nameserver nicht spezifiziere:

# dig mercury.beowulf.iecs

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> mercury.beowulf.iecs
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29153
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;mercury.beowulf.iecs.      IN  A

;; AUTHORITY SECTION:
.           7988    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2014062500 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 142.3.102.202#53(142.3.102.202)
;; WHEN: Wed Jun 25 12:05:37 2014
;; MSG SIZE  rcvd: 113

Im letzten Beispiel oben ( dig) SERVER: 142.3.102.202#53(142.3.102.202)ist dies der erste DNS-Server in. /etc/resolv.confStandardmäßig verwendet sun diesen Nameserver anstelle von dnsmasq, das ich aufgrund der Einstellungen in erwartet hätte /etc/dnsmasq.conf.

Also, ist das ein Problem? Ich kann Sonne und Quecksilber von der Sonne aus anpingen und mich mit SSH mit Quecksilber von der Sonne verbinden .

Wenn dies ein Problem ist (oder auch nicht), gibt es eine Möglichkeit, sun zu konfigurieren und darauf dnsmasqauszuführen, um die privaten Hostnamen automatisch aufzulösen?

Gavin Simpson
quelle
Haben Sie einen Nameserver auf Ihrem lokalen Host?
Jeffatrackaid
@ Jeffatrackaid Ja, dnsmasq läuft auf der Centos-Box, Sonne im obigen Q.
Gavin Simpson
1
Anscheinend fragen Sie verschiedene Nameserver ab. Anscheinend sind in 142.3.102.202 keine A-Einträge für die Domäne konfiguriert. Ich bin mir also nicht sicher, wo Sie Datensätze verwalten?
Jeffatrackaid
@ Jeffatrackaid Nochmals vielen Dank. Zwischen Ihrem Kommentar hier und Iains Antwort habe ich meinen Fehler erkannt. Obwohl ich dnsmasq möglicherweise angewiesen habe, es nicht zu verwenden /etc/resolv.conf, weiß sun nichts davon und verwendet es weiterhin. Dies /etc/resolv.confwird überschrieben, dhclient-scriptwenn es nach einer IP-Adresse vom WAN-DHCP-Server fragt. FWIW, die privaten DNS-Informationen werden von sun (192.168.42.1) bereitgestellt, aber sun weiß dies nicht aufgrund dessen, was in/etc/resolv.conf
Gavin Simpson

Antworten:

9

dig( Domain Information Groper ) und nslookup( Internet-Nameserver interaktiv abfragen) sind Tools, die Nameserver abfragen. Sofern kein bestimmter Nameserver als Befehlszeilenargument angegeben ist, werden die in /etc/resolv.conf gefundenen Nameserver abgefragt. Sie suchen einfach nicht nach alternativen Quellen für Hostinformationen wie der /etc/hostsDatei oder anderen in angegebenen Quellen /etc/nsswitch.conf.

Wenn Sie alle DNS-Abfragen über dnsmasq auf Ihrem Sun- Host erzwingen möchten, /etc/resolv.confsollte dort auf dnsmasq verweisen, dh es sollte folgendermaßen aussehen:

#/etc/resolv.conf on sun
nameserver 127.0.0.1

Um zu verhindern, dass diese Datei beim Neustart der Netzwerkschnittstelle überschrieben wird, bearbeiten Sie eth0 /etc/sysconfig/network-scripts/ifcfg-eth0 und fügen Sie die Option hinzu PEERDNS=no

Zweitens /etc/dnsmasq-resolv.confversuchen Sie, dnsmasq so zu konfigurieren, dass es sich selbst als Upstream-Nameserver verwendet nameserver 127.0.0.1... Diese Datei sollte folgendermaßen aussehen:

#/etc/dnsmasq-resolv.conf
search beowulf.iecs biol.uregina.ca
nameserver 8.8.8.8

Wenn Sie den Nameserver von Google verwenden möchten. Es ist möglicherweise eine gute Idee, stattdessen die Nameserver 142.3.102.202 und 142.3.100.15 der Universität zu verwenden, da es nicht ungewöhnlich ist, dass bestimmte Ressourcen nur vom Campus-Netzwerk aus sichtbar sind.

Wenn Ihr Quecksilberhost von DHCP konfiguriert wurde, sollte er seine Konfiguration von dnsmasq erhalten und /etc/resolv.confdort auf den dnsmasq-Nameserver unter 192.168.42.1 verweisen

HBruijn
quelle
+1 Danke dafür. Mir war auch klar geworden, dass die Sonne selbst alles verwenden wird /etc/resolv.conf, um Namen aufzulösen. Ich habe die dnsmasq-Konfiguration mit der tatsächlichen Verwendung der Sonne in Verbindung gebracht. Beachten Sie, dass das 8.8.8.8In /etc/dnsmasq-resolv.confnur vorübergehend vorhanden war, da ich bei der Bearbeitung die IP-Adressen der Domain-Server der Universität nicht sofort zur Hand hatte. Ich werde diese Nameserver angeben, wenn ich dies abschließe. Um mein Problem vollständig zu lösen, muss ich aufhören zu dhclient-scriptüberschreiben , bis die Universität mir eine ordnungsgemäß statische IP zuweist /etc/resolv.conf.
Gavin Simpson
Akzeptiere diese Antwort, weil sie spezifischer für mein eigentliches Problem ist und mehr Details enthält. Trotzdem diagnostizierte ich das Problem (mein falsches Denken) anhand von Iains Antwort und Kommentaren von @jeffatrackaid.
Gavin Simpson
4

Die 142.3.102.202 und 142.3.100.15 wissen nichts über Ihr lokales privates Netzwerk, daher geben sie NXDOMAIN korrekt zurück . Dies sind auch die Standard-Nameserver für das System. Wenn Sie also keinen Nameserver angeben, werden diese verwendet.

Sie müssen den Inhalt /etc/resolv.confder Nameserver-Anweisungen überschreiben und so konfigurieren, dass sie auf Ihren lokalen dnsmasq-Nameserver verweisen, der wiederum so konfiguriert sein sollte, dass Abfragen weitergeleitet werden, die nicht im Upstream beantwortet werden können.

user9517
quelle
Danke dafür. Wenn ich einfügen vorübergehend nameserver 127.0.0.1in /etc/resolv.confund die anderen Einträge kommentieren, dann digund nslookupkorrekt funktionieren. Ich hatte nicht vollständig groked , dass , obwohl dnsmasq nicht verwendet wurde /etc/resolv.conf, der Computer Sonne wurde darin die Informationen immer noch verwendet wird . Es scheint also, als würde dies vollständig geklärt. Ich muss herausfinden, wie das dhclientÜberschreiben gestoppt werden kann, /etc/resolv.confbis mir von den WAN-Administratoren eine statische IP zugewiesen wird.
Gavin Simpson
1
@ GavinSimpson Dies kann eine Möglichkeit sein, die Nameserver in /etc/resolv.conf unix.stackexchange.com/questions/3668/… festzulegen
user9517
Nochmals vielen Dank Iain; Auch ich hatte diese PEERDNS=noLösung gerade auf einem anderen Weg entdeckt. Das Hinzufügen, um /etc/sysconfig/network-scripts/ifcfg-eth0das Überschreiben /etc/resolv.conffür mich zu lösen .
Gavin Simpson