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 dig
wciąż krótkiego czasu zapytania. Nie ma znaczenia, czy używam dig
lub host
do 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?
Odpowiedzi:
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
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:
i średni czas podróży w obie strony 26 ms:
(386302 - 360564 = 26 ms)
Aby zrozumieć ten mechanizm ochrony (przed podstawowym DOS), spójrz na:
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?).
źródło