Jak symulować limit czasu odpowiedzi serwera DNS?

19

Muszę przetestować zachowanie aplikacji, gdy nie może rozwiązać nazwy hosta z powodu przekroczenia limitu czasu. Ustawianie nameserver 127.0.0.1w /etc/resolv.confnie działa: odpowiednie funkcje zwracają natychmiast wyjątek. Platforma testowa jest maszyną wirtualną utworzoną za pomocą Vagrant, która otrzymuje adres IP przez DHCP.

synapsa
źródło

Odpowiedzi:

11

nameserver 127.0.0.1nie będzie działać, ponieważ domyślne zachowanie jest już takie. Zamiast tego spróbuj użyć nieistniejącego systemu DNS. Aby się upewnić, możesz:

nslookup example.com 192.0.2.10

Jeśli nie otrzymasz odpowiedzi, możesz użyć go 192.0.2.10jako serwera DNS.

dysfiend
źródło
Nie gwarantuje to przekroczenia limitu czasu, ponieważ 192.0.2.10 może (choć nie jest to prawdopodobne) być prawdziwym hostem i podobnie jak 127.0.0.1, może natychmiast zwrócić zapytanie „port nieosiągalny”. Nie trzeba się wybrać gospodarza, który na pewno nie jest uruchomiony serwer DNS (jak swoimi nslookup kontroli dowodzenia) trzeba wybrać gospodarza będziesz nie jesteś pewien reagują w ogóle .
Jeff Meden
nslookup example.com non_existent_dns_ipwyniki: ;; connection timed out; trying next origin ;; connection timed out; no servers could be reached
sysfiend
4
@JeffMeden Prawdopodobnie wiesz, ale zakres 192.0.2.0/24 jest zarezerwowany do celów dokumentacji , więc nie należy go używać nigdzie (i odmawiać jako bogon przez szanującą się zaporę ogniową).
Dubu,
2
@Dubu, co jest bardziej interesującym zastrzeżeniem; zgodnie ze specyfikacją ruch powinien zostać odrzucony na routerze, który prawdopodobnie zwróci „stos docelowego hosta nieosiągalnego” na stos, który ponownie różni się od przekroczenia limitu czasu.
Jeff Meden
26

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ą:

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

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 neteminstrukcji :

# 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

Co powoduje opóźnienie 200 ms z przypadkową zmianą ± 10 ms.

HBruijn
źródło
18

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:

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
źródło
2
Właśnie wtedy, gdy myślałem, że wszystko widziałem; serwer dedykowany, który specjalnie nie robi ... nic. Znakomity! (prawdopodobnie tylko konfiguracja sieci, a nie rzeczywisty serwer z zaporą filtrującą, ale nadal)
Jeff Meden
1
Jest to Raspberry PI z zaporą ogniową ustawioną na upuszczanie wszystkiego, więc nadal kieruje i reaguje na ARP (aby mieć pewność, że ruch nie otrzyma nieosiągalnych odpowiedzi ICMP).
pmeenan
@pmeenan to ciekawe! Dzięki za udostępnienie! (Wow, nie mogę uwierzyć, że dołączyłeś tylko do komentowania: D)
grooveplex
3

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.

user9517 obsługuje GoFundMonica
źródło
1
Niektóre zapory ogniowe mogą również zwracać pakiety ICMP, dzięki czemu limit czasu jest natychmiastowy.
Nathan Goings