Muszę przetestować zachowanie aplikacji, gdy nie może rozwiązać nazwy hosta z powodu przekroczenia limitu czasu. Ustawianie nameserver 127.0.0.1
w /etc/resolv.conf
nie działa: odpowiednie funkcje zwracają natychmiast wyjątek. Platforma testowa jest maszyną wirtualną utworzoną za pomocą Vagrant, która otrzymuje adres IP przez DHCP.
19
nslookup example.com non_existent_dns_ip
wyniki:;; connection timed out; trying next origin ;; connection timed out; no servers could be reached
Przekroczenie limitu czasu połączenia występuje, gdy serwer DNS w ogóle nie odpowiada lub nie reaguje w odpowiednim czasie.
Pierwszy z nich można symulować, po prostu blokując cały ruch do serwera DNS w systemie Linux, na przykład za pomocą:
Użycie DROP jako celu oznacza, że nawet nie dostaniesz błędu odmowy połączenia, staje się tylko czarną dziurą. (Jest mało prawdopodobne, że normalnie wykonujesz transfery stref, więc blokowanie protokołu TCP oprócz UDP nie jest konieczne).
Tworzenie opóźnień jest nieco bardziej zaangażowane. Z
netem
instrukcji :Co powoduje opóźnienie 200 ms z przypadkową zmianą ± 10 ms.
źródło
Potrzebny jest „serwer czarnej dziury”. Możesz użyć
blackhole.webpagetest.org
(72.66.115.13
), która po cichu usunie wszystkie żądania.Dlaczego sugeruję to w porównaniu z innymi odpowiedziami, to dlatego, że wspomniany serwer został utworzony wyłącznie w tym celu.
Przykład:
źródło
Jeśli nie używasz serwera DNS w systemie testowym, powinieneś być w stanie użyć jego adresu IP.
Możesz spróbować użyć nieużywanego adresu rfc1918 .
Możesz użyć zapory ogniowej swojego serwera do zablokowania pakietów wychodzących za pomocą portu docelowego 53.
źródło