Wie simuliert man ein Zeitlimit für die DNS-Serverantwort?

19

Ich muss das Verhalten einer Anwendung testen, wenn ein Hostname aufgrund einer Zeitüberschreitung nicht aufgelöst werden kann. Einstellung nameserver 127.0.0.1in /etc/resolv.confnicht funktioniert hat : die entsprechenden Funktionen sofort wieder mit einer Ausnahme. Der Prüfstand ist eine mit Vagrant erstellte VM, die ihre IP-Adresse über DHCP erhält.

Synapse
quelle

Antworten:

11

nameserver 127.0.0.1wird nicht funktionieren, da das Standardverhalten schon so ist. Versuchen Sie stattdessen, ein nicht vorhandenes DNS zu verwenden. Um sicherzugehen, können Sie Folgendes tun:

nslookup example.com 192.0.2.10

Wenn Sie keine Antwort erhalten, können Sie 192.0.2.10als DNS-Server verwenden.

Sysfiend
quelle
Es ist nicht garantiert, dass dies zu einer Zeitüberschreitung führt, da 192.0.2.10 (obwohl dies nicht wahrscheinlich ist) ein echter Host sein kann und wie 127.0.0.1 beim Abfragen sofort "Port nicht erreichbar" zurückgeben kann. Sie brauchen nicht einen Host auswählen müssen , dass Sie sicher sind , ist nicht DNS ausgeführt wird (wie Ihre nslookup Befehl überprüft) benötigen Sie einen Host Sie sicher reagiert nicht zu erlernüberhaupt .
Jeff Meden
nslookup example.com non_existent_dns_ipAusgänge: ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached
Sysfiend
4
@JeffMeden Sie wissen wahrscheinlich, aber der Bereich 192.0.2.0/24 ist für Dokumentationszwecke reserviert , daher sollte er nirgendwo verwendet werden (und von einer selbstsichernden Firewall als Schein abgelehnt werden).
Dubu
2
@ Dubu, das ist eigentlich eine interessantere Einschränkung; Gemäß der Spezifikation sollte der Datenverkehr am Router abgelehnt werden, wodurch wahrscheinlich ein "nicht erreichbarer Zielhost" an den Stack zurückgegeben wird, der sich wiederum von einer Zeitüberschreitung unterscheidet.
Jeff Meden
26

Eine Verbindungsunterbrechung tritt auf, wenn der DNS-Server überhaupt nicht oder nicht rechtzeitig antwortet.

Die erste kann simuliert werden, indem einfach der gesamte Datenverkehr zu Ihrem DNS-Server blockiert wird, beispielsweise auf einem Linux-System mit:

# iptables -I OUTPUT -p udp -d <iIP of DNS server> --dport 53 -j DROP

Wenn Sie DROP als Ziel verwenden, wird Ihnen nicht einmal ein Verbindungsfehler verweigert, sondern nur ein schwarzes Loch. (Es ist unwahrscheinlich, dass Sie normalerweise Zonentransfers durchführen. Daher ist es nicht erforderlich, das TCP-Protokoll zusätzlich zu UDP zu blockieren.)

Das Erstellen von Verzögerungen ist etwas aufwendiger. Aus dem netemHandbuch :

# tc qdisc add dev eth0 root handle 1: prio
# tc qdisc add dev eth0 parent 1:3 handle 30: tbf rate 20kbit buffer 1600 limit  3000
# tc qdisc add dev eth0 parent 30:1 handle 31: netem  delay 200ms 10ms distribution normal
# tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32  match ip dst <IP_of_DNS_server>/32 flowid 1:3

Dies führt zu einer Verzögerung von 200 ms mit einer zufälligen Abweichung von ± 10 ms.

HBruijn
quelle
18

Was Sie brauchen, ist ein "Black Hole Server". Sie können blackhole.webpagetest.org( 72.66.115.13) verwenden, um stillschweigend alle Anforderungen zu löschen.

Warum ich dies gegenüber den anderen Antworten vorschlage, liegt daran, dass der oben genannte Server ausschließlich für diesen Zweck eingerichtet wurde.

Beispiel:

barend@shells:~$ dig example.com @72.66.115.13

; <<>> DiG 9.10.3-P4-Debian <<>> example.com @72.66.115.13
;; global options: +cmd
;; connection timed out; no servers could be reached
grooveplex
quelle
2
Gerade als ich dachte, ich hätte alles gesehen; Ein dedizierter Server, der speziell ... nichts tut. Brillant! (wahrscheinlich nur eine Netzwerkkonfigurationssache und kein tatsächlicher Server mit einer Filter-All-Firewall, aber immer noch)
Jeff Meden
1
Es ist ein Raspberry PI mit einer Firewall, die so eingestellt ist, dass alles gelöscht wird, sodass es weiterhin ARP weiterleitet und darauf reagiert (nur um sicherzugehen, dass der Datenverkehr keine nicht erreichbaren ICMP-Antworten erhält).
Pmeenan
@pmeenan das ist interessant! Danke für das Teilen! (Wow, ich kann nicht glauben, dass du dich angeschlossen hast, um nur einen Kommentar
abzugeben
3

Wenn Sie auf Ihrem Testsystem keinen DNS-Server ausführen, sollten Sie dessen IP-Adresse verwenden können.

Sie können versuchen, eine nicht verwendete rfc1918- Adresse zu verwenden.

Sie können die Firewall Ihres Servers verwenden, um ausgehende Pakete mit einem Zielport 53 zu blockieren.

user9517 unterstützt GoFundMonica
quelle
1
Einige Firewalls können auch ICMP-Pakete zurückgeben, sodass die Zeitüberschreitung sofort einsetzt.
Nathan Goings