2012-06-13 22 views
38

Mam wątpliwości co do buforowania DNS. Piszę mały serwer proxy do przodu i chcę korzystać z pamięci podręcznej DNS systemu operacyjnego w systemie Linux.Buforowanie DNS w Linuksie

Jeśli dobrze rozumiem, oznacza to buforowanie DNS na poziomie przeglądarki. Następnie jest buforowanie DNS na poziomie systemu operacyjnego (Windows go ma.) Nie jestem pewien, czy domyślnie dystrybucje Linuksa mają go.

W jaki sposób serwer przeglądarki/proxy_server korzysta z buforowania DNS systemu operacyjnego? Próbuję znaleźć, czy mogę polegać na systemie Linux do buforowania DNS zamiast robić to samemu w moim proxy.

Dzięki

+0

polegać na buforowaniu systemu operacyjnego. –

+0

Jeśli masz proxy, pamięć podręczna DNS znajduje się w proxy. Na przykład Squid ma swoją własną pamięć podręczną DNS i resolver. –

Odpowiedz

62

W systemie Linux (i prawdopodobnie najbardziej Unix), nie ma buforowanie DNS OS-poziom chyba nscd jest zainstalowany i uruchomiony. Nawet wtedy funkcja buforowania DNS dla polecenia nscd jest domyślnie wyłączona, przynajmniej w Debianie, ponieważ jest to it's broken. Praktyczny wynik jest taki, że twój system linuxowy bardzo prawdopodobnie nie robi żadnego buforowania DNS na poziomie systemu operacyjnego.

Możesz zaimplementować własną pamięć podręczną w swojej aplikacji (tak jak zrobili to dla Squid, zgodnie z komentarzem diegows), ale polecam przeciw temu. To dużo pracy, łatwo jest się pomylić (nscd pomylił się !!!), prawdopodobnie nie będzie tak łatwo przestrajalny jak dedykowana pamięć podręczna DNS i powiela funkcje, które już istnieją poza aplikacją.

Jeśli użytkownik końcowy korzystający z oprogramowania musi mieć buforowanie DNS, ponieważ ładowanie kwerendy DNS jest wystarczająco duże, aby stanowić problem, lub usługa RTT na zewnętrzny serwer DNS jest na tyle długa, aby stanowić problem, może zainstalować buforujący DNS serwer taki jak Unbound na tym samym komputerze, co Twoja aplikacja, skonfigurowany tak, aby buforował odpowiedzi i przekazywał chybienia do zwykłych programów do rozpoznawania nazw DNS.

+0

Hej, dzięki. Jeszcze jedno pytanie. Czy wiesz, jak to działa w przeglądarkach w systemie Windows. Czytałem, że chrome opiera się na pamięci podręcznej systemu operacyjnego. Czy to oznacza, że ​​aplikacje mogą uzyskać dostęp do pamięci podręcznej systemu operacyjnego? Ogólnie rzecz biorąc, jaki jest przepływ dla rozdzielczości dns (w kontekście buforowania). Przeglądarka sprawdza własną pamięć podręczną, jeśli ją obsługuje. Następnie pyta system operacyjny lub czyta pamięć podręczną systemu operacyjnego? Jeśli nie zostanie znaleziony wpis, zgaśnie w celu rozwiązania problemu. –

+5

Gdy pamięć podręczna poziomu systemu operacyjnego jest dostępna, jest automatycznie i przezroczyście używana przez wszystkie aplikacje, chyba że aplikacja pomija interfejsy API zapytań o standardową nazwę ('getaddrinfo()' et al.) I bezpośrednio implementuje własne zapytania DNS. Odnosi się to do systemu MacOS X bezwarunkowo i dotyczy Linuxa, jeśli przez jakiś czas działa nscd i jest aktywny (nie może mówić w systemie MS Windows). Jeśli aplikacja implementuje swoją własną pamięć podręczną, to stosuje się ją do dowolnej pamięci podręcznej na poziomie systemu operacyjnego, która może być obecna lub nie (ponownie, chyba że aplikacja pomija system operacyjny i zapytania bezpośrednio). – Celada

+2

@Celada możesz podać źródło dla 'Na Linux (i prawdopodobnie większość Uniksa), nie ma buforowania DNS na poziomie systemu operacyjnego, chyba że nscd jest zainstalowany i działa.? Szukałem go bez powodzenia ... – cYrus

19

Oto dwa inne pakiety oprogramowania, które mogą być wykorzystywane do buforowania DNS w systemie Linux:

  • dnsmasq
  • wiążą

Po skonfigurowaniu oprogramowanie dla spedycji DNS i buforowania, następnie ustawić systemowy resolwer DNS systemu do 127.0.0.1 w /etc/resolv.conf.

Jeśli system używa NetworkManager można albo użyć opcji dns=dnsmasq w /etc/NetworkManager/NetworkManager.conf lub można zmienić ustawienia połączenia Automatyczny (Address Only), a następnie użyć skryptu w katalogu /etc/NetworkManager/dispatcher.d uzyskać serwera nazw DHCP, ustaw jako serwer przekazywania DNS w oprogramowaniu pamięci podręcznej DNS, a następnie uruchom ponownie ładowanie konfiguracji.

+1

W dzisiejszych czasach na 'systemd' [jest jeszcze jeden] (https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html), można go włączyć za pomocą' systemctl enable systemd-resolved'. –

2

Firefox zawiera pamięć podręczną dns. Aby wyłączyć pamięć podręczną DNS:

  1. Otwórz przeglądarkę
  2. Type w about: config w pasku adresu
  3. prawym przyciskiem myszy na liście Właściwości i wybierz Nowy> Integer w menu kontekstowym
  4. Wprowadź "network.dnsCacheExpiration" jako nazwę preferencji, a 0 jako wartość całkowitą

Po wyłączeniu Firefox będzie używać pamięci podręcznej DNS udostępnianej przez system operacyjny.