Temporärer Fehler bei der Namensauflösung, wenn versucht wird, Ping oder Telnet auszuführen

716
Muffin

Zuallererst sollte ich etwas Hintergrund für die Frage geben. Ich ändere eine API für meine Masterarbeit. Um zu überprüfen, ob mein Code funktioniert, habe ich die Universität drei VMs eingerichtet, auf denen Debian auf unseren Servern ausgeführt wird. Eine VM fungiert als Client, eine hat sowohl einen Apache-Webserver mit einer von mir erstellten Test-Website als auch einen Bind9-DNS-Server. In der Mitte sitzt ein Verkehrsformer. Der Client und der Server verfügen über 3 Schnittstellen, die sich jeweils in einem anderen Subnetz mit einer eigenen Routing-Tabelle befinden (was im Wesentlichen besagt, dass die Standardroute für alles, was von dieser Schnittstelle kommt, der nächste Hop im Netzwerk ist, der eine Schnittstelle auf dem Shaper ist). Der Shaper verfügt über eine IP-Weiterleitungsfunktion, dh es ist im Grunde ein "dummer Router", und ich kann ohne Probleme von jeder Schnittstelle des Clients an jede Schnittstelle des Servers pingen. und ich habe ein paar tcpdumps gemacht, um zu überprüfen, ob die Pakete tatsächlich dem Pfad folgen, den ich anfangs angenommen habe. Alles funktionierte gut, bis die Universität ein Problem auf ihrem Server hatte und sie alle VMs neu starten musste (die laut IT-Abteilung der Uni alle auf demselben Server laufen und sich auf einem Hypervisor befinden, an den alle virtuellen Schnittstellen angeschlossen sind ). Jetzt kann meine API den Namen meiner Test-Website nicht mehr auflösen, und ich weiß, dass der Code funktioniert, denn wenn ich versuche, ihn auf meinem Laptop auszuführen, kann dies eine Auflösung sein, sagen wir google.com und stellen eine Verbindung dazu her. Also habe ich versucht, ein paar andere Tests durchzuführen und das habe ich entdeckt. alle auf demselben Server auf einem Hypervisor, mit dem alle virtuellen Schnittstellen verbunden sind). Jetzt kann meine API den Namen meiner Test-Website nicht mehr auflösen, und ich weiß, dass der Code funktioniert, denn wenn ich versuche, ihn auf meinem Laptop auszuführen, kann dies eine Auflösung sein, sagen wir google.com und stellen eine Verbindung dazu her. Also habe ich versucht, ein paar andere Tests durchzuführen und das habe ich entdeckt. alle auf demselben Server auf einem Hypervisor, mit dem alle virtuellen Schnittstellen verbunden sind). Jetzt kann meine API den Namen meiner Test-Website nicht mehr auflösen, und ich weiß, dass der Code funktioniert, denn wenn ich versuche, ihn auf meinem Laptop auszuführen, kann dies eine Auflösung sein, sagen wir google.com und stellen eine Verbindung dazu her. Also habe ich versucht, ein paar andere Tests durchzuführen und das habe ich entdeckt.

resolv.conf auf dem Client liest sich so

domain inet.tu-berlin.de. search inet.tu-berlin.de. net.t-labs.tu-berlin.de. #nameserver 1.1.1.1 nameserver 10.2.1.2  options timeout:2 

Welches ist richtig, da sich mein DNS-Server auf 10.2.1.2 befindet (als mein Webserver)

Wenn ich versuche, das DNS vom Client aus anzupingen, und eine der Schnittstellen angibt, die mit dem Hypervisor der VM verbunden sind (die einem Namensschema von 10.1.x.1 folgen), funktioniert es.

:# ping 10.2.1.2 -I 10.1.1.1 PING 10.2.1.2 (10.2.1.2) from 10.1.1.1 : 56(84) bytes of data. 64 bytes from 10.2.1.2: icmp_seq=1 ttl=63 time=1.98 ms 64 bytes from 10.2.1.2: icmp_seq=2 ttl=63 time=1.42 ms  --- 10.2.1.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 1.422/1.704/1.986/0.282 ms 

Dasselbe gilt für dig. Ich kann den Hostnamen meiner Website (mit dem Namen happytester.com) auflösen und dabei immer noch eine der Schnittstellen des Clients angeben, der mit dem Hypervisor verbunden ist.

:# dig happytester.com -b 10.1.1.1  ; <<>> DiG 9.10.3-P4-Debian <<>> happytester.com -b 10.1.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46158 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 1  ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;happytester.com. IN A  ;; ANSWER SECTION: happytester.com. 604800 IN A 10.2.2.2 happytester.com. 604800 IN A 10.2.1.2 happytester.com. 604800 IN A 10.2.3.2  ;; AUTHORITY SECTION: happytester.com. 604800 IN NS mmaffei-server.inet.tu-berlin.de.  ;; Query time: 2 msec ;; SERVER: 10.2.1.2#53(10.2.1.2) ;; WHEN: Sat Nov 03 19:18:58 CET 2018 ;; MSG SIZE rcvd: 138 

Wenn ich die Schnittstelle, die 10.1.1.1 auf dem Client entspricht, tcpdumpe, kann ich die DNS-Abfrage und -antwort sehen, die durchläuft.

:# tcpdump -i eth1 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes 19:21:23.269486 IP 10.1.1.1.46824 > 10.2.1.2.domain: 56695+ [1au] A? happytester.com. (44) 19:21:23.271841 IP 10.2.1.2.domain > 10.1.1.1.46824: 56695* 3/1/1 A 10.2.2.2, A 10.2.3.2, A 10.2.1.2 (138) 

Nun zur Frage selbst, warum um alles in der Welt, wenn alles funktioniert, wie ich es bereits erklärt habe, funktioniert das nicht?

:# ping happytester.com -I 10.1.1.1 ping: happytester.com: Temporary failure in name resolution 

Und tcpdump bleibt nur stumm, sodass die DNS-Abfragen nicht einmal gesendet werden. Dies betrifft fast alles, was nicht gesucht wird, einschließlich Telnet und vor allem meine API.

BEARBEITEN:

So sehen meine Routingtabelle und mein Interface auf dem Client aus

:# ip route show default via 130.149.221.222 dev eth0 onlink 10.1.1.0/24 dev eth1 proto kernel scope link src 10.1.1.1 10.1.2.0/24 dev eth2 proto kernel scope link src 10.1.2.1 10.1.3.0/24 dev eth3 proto kernel scope link src 10.1.3.1 130.149.221.192/27 dev eth0 proto kernel scope link src 130.149.221.215  :# ip route show table client1 default via 10.1.1.2 dev eth1  :# ip route show table client2 default via 10.1.2.2 dev eth2  :# ip route show table client3 default via 10.1.3.2 dev eth3 

Und hier sind die Schnittstellen:

# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5).  source /etc/network/interfaces.d/*  # The loopback network interface auto lo iface lo inet loopback  auto eth0 iface eth0 inet static address 130.149.221.215/27 gateway 130.149.221.222  iface eth0 inet6 static address 2001:638:809:ff13:130:149:221:215/64 gateway fe80::1  auto eth1 iface eth1 inet static address 10.1.1.1 netmask 255.255.255.0 dns-nameservers 10.2.1.2 post-up ip rule add from 10.1.1.1 lookup client1 post-up ip route add default via 10.1.1.2 dev eth1 table client1  auto eth2 iface eth2 inet static address 10.1.2.1 netmask 255.255.255.0 dns-nameservers 10.2.1.2 post-up ip rule add from 10.1.2.1 lookup client2 post-up ip route add default via 10.1.2.2 dev eth2 table client2  auto eth3 iface eth3 inet static address 10.1.3.1 netmask 255.255.255.0 dns-nameserver 10.2.1.2 post-up ip rule add from 10.1.3.1 lookup client3 post-up ip route add default via 10.1.3.2 dev eth3 table client3 

EDIT2

Hier ist die dig-Ausgabe ohne eine angegebene Schnittstelle und tcpdump für alle Schnittstellen.

:# dig happytester.com  ; <<>> DiG 9.10.3-P4-Debian <<>> happytester.com ;; global options: +cmd ;; connection timed out; no servers could be reached  :# tcpdump -i eth0 udp port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 19:56:02.193104 IP mmaffei-client.inet.tu-berlin.de.41160 > 10.2.1.2.domain: 22115+ [1au] A? happytester.com. (44) 19:56:07.193073 IP mmaffei-client.inet.tu-berlin.de.41160 > 10.2.1.2.domain: 22115+ [1au] A? happytester.com. (44) 19:56:12.193315 IP mmaffei-client.inet.tu-berlin.de.41160 > 10.2.1.2.domain: 22115+ [1au] A? happytester.com. (44) ^C  :# tcpdump -i eth1 udp port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth1, link-type EN10MB (Ethernet), capture size 262144 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel  :# tcpdump -i eth2 udp port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel  :# tcpdump -i eth3 udp port 53 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth3, link-type EN10MB (Ethernet), capture size 262144 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel 

Ich hoffe jemand kann helfen.

0
Was ist die Ausgabe des `dig happytester'-Befehls ohne den '-b'-Teil? für mich sieht es so aus, als ob die Auflösung des Ping-Namens fehlschlägt und dieser Teil nicht über die 10.1.1.1-Schnittstelle ausgeführt wird, sondern nur die Ping-Befehle von Ihren Ping-Befehlen. Zina vor 5 Jahren 0
Es werden also nur ICMP-Pakete per Ping gesendet, und die Auflösung des Hostnamens erfolgt auf der Seite. Weil ich eine Schnittstelle auf eth0 habe, die mein "Gateway zum Internet" ist, die einzige, die eigentlich nicht in meinem Testnetzwerk enthalten ist, siehe EDIT. Der Punkt ist, dass in resolv.conf der Nameserver als der in meinem Testnetzwerk angegeben ist. Die DNS-Abfrage schlägt daher fehl, da es außer dem von mir erstellten Nameserver keinen Nameserver gibt. Die Standardroute für die "echte Schnittstelle" sendet jedoch alles aus Mein Netzwerk. Muffin vor 5 Jahren 0
Könnten Sie die angeforderte Dig-Ausgabe hinzufügen? Ihr Setup hört sich für mich richtig an, aber ich befolge einfach einige grundlegende Schritte zur Fehlerbehebung. und Sie könnten einen tcpdump für alle Schnittstellen ausführen und nach DNS-Verkehr filtern, so dass Sie sehen, wohin es geht. Zina vor 5 Jahren 0
Bitte siehe edit2 Muffin vor 5 Jahren 0
OK. Auf dem Client haben Sie also 10.1. [1-3] .x-IPs und eine 130 ...., während DNS auf 10.2.1.2 gesetzt ist, das durch das Standard-Gateway geleitet wird, da Sie keine Schnittstelle mit einer IP haben von diesem zugewiesenen Subnetz. Sie können eine Route für dieses Subnetz hinzufügen, um über Ihre eth1-Schnittstelle "ip route add 10.2.1.2/32" über 10.1.1.1 dev eth1 zu gehen, wodurch Ihr Problem gelöst werden sollte Zina vor 5 Jahren 0
Werfen Sie einen Blick auf `/ etc / nsswitch.conf` und ich wette, Sie haben vor DNS eine andere Methode zur Namensauflösung konfiguriert, die fehlschlägt und den Fehler verursacht. dirkt vor 5 Jahren 0
@dirkt - warum denkst du so? Zur Namensauflösung wird sie normalerweise in der Datei `/ etc / host.conf` festgelegt. Die Standardreihenfolge ist` hosts, bind`, die zuerst die lokale Datei `/ etc / hosts` überprüft und dann zu DNS wechselt. Da die hosts-Datei nicht die Einträge enthält, die er durchsucht, schlägt der DNS des OPs fehl, da er die IP des DNS-Servers in einem Netzwerk festgelegt hat, das in der aktuellen Konfiguration nicht erreichbar ist, da keine Route eingerichtet ist und der GW nicht weiß, wo mit der Bitte gehen. siehe seine Konfiguration und die von ihm bereitgestellten Ausgänge. Ich habe auch ein bisschen gebraucht, da die IPs sehr ähnlich sind. Zina vor 5 Jahren 0

0 Antworten auf die Frage