Zapora Mountain Lion losowo opóźnia żądania DNS

5

Niedawno wystąpiły pewne opóźnienia podczas rozpoznawania hosta DNS w systemie OS X 10.8. Aby go przetestować, uruchomiłem prosty skrypt, który próbuje wielokrotnie rozwiązać tę samą nazwę hosta 20 razy:

#!/bin/sh
for i in `seq 20`; do
    time -p dig www.google.com @8.8.8.8 | grep "^;; Query time:"
done

Większość żądań zajmuje mniej więcej tyle samo czasu co opóźnienie do serwera nazw:

;; Query time: 49 msec
real 0.05

Jednak jak tylko włączę zaporę w Mountain Lion (wszystkie przychodzące żądania są dozwolone, tryb ukrywania nie jest włączony), niektóre z digżądań zajmują dokładnie 5 sekund plus opóźnienie do serwera nazw:

;; Query time: 25 msec
real 5.03

Większość żądań jest wciąż szybka, ale około 10 na 15 żądań ma opóźnienie dokładnie 5 sekund, nawet pomimo digwciąż krótkiego czasu zapytania. Nie ma znaczenia, czy używam diglub hostdo testowania, czy też używam lokalnego serwera DNS lub publicznego, jak w powyższym przykładzie. Gdy zapora jest wyłączona, opóźnienie nigdy się nie zdarza.

Czy zapora systemu OS X wymusza ograniczenie prędkości żądań, czy brakuje mi czegoś jeszcze?

skrause
źródło
Przetestowałem twój skrypt i zachowuję się dokładnie tak samo. Myślę też, że zapora coś tutaj robi ... ale ponieważ 5-sekundowe przerwy wyglądają na przypadkowe, nie mam pojęcia, co dzieje się w środku. Zbadam to trochę więcej.
cyphorious
Istnieje teraz powiązany wątek Serverfault z tym samym problemem (który również prowadzi tutaj): serverfault.com/questions/526668/…
skrause

Odpowiedzi:

1

Masz rację. Zdiagnozowałem to samo ograniczenie prędkości na poziomie zapory na MacOS X 10.7.4 (Lion).

Co więcej, jeśli spojrzysz na

/usr/bin/sudo tcpdump -i en0 udp port 53

Zauważysz, że czas podróży w obie strony, aby uzyskać odpowiedź, 8.8.8.8 jest znacznie krótszy niż 40 ms wyświetlany przez serwer.

Podczas długiego testu miałem:

;; Query time: 44 msec

i średni czas podróży w obie strony 26 ms:

09:36:14.360564 IP me.53866 > google-public-dns-a.google.com.domain: 9943+ A? www.google.com. (32)
09:36:14.386302 IP google-public-dns-a.google.com.domain > me.53866: 9943 5/0/0 A 173.194.41.180, A 173.194.41.178, A 173.194.41.176, A 173.194.41.177, A 173.194.41.179 (112)

(386302 - 360564 = 26 ms)

Aby zrozumieć ten mechanizm ochrony (przed podstawowym DOS), spójrz na:

/usr/bin/sudo pfctl -i en0 -s timeouts

Pełna dokumentacja tego złożonego polecenia znajduje się w podręczniku użytkownika pfctl (8) Mountain Lion

Uwaga, jest to potężne, ale bardzo niebezpieczne polecenie. Możesz łatwo przerwać dostęp do sieci (Gdzie jest moja kopia zapasowa?).

Dan
źródło