Jak skonfigurować buforowanie DNS za pomocą dnsmasq na Ubuntu?

Dnsmasq to narzędzie, które może pełnić funkcję serwera buforującego zapytania DNS w systemach Linux. Choć jego konfiguracja może początkowo wydawać się skomplikowana, przynosi wymierne korzyści.

Buforowanie DNS, czyli zapisywanie odpowiedzi na zapytania DNS, znacznie przyspiesza proces przekształcania nazw domen na adresy IP. Dzięki temu, gdy wielu użytkowników w sieci odwiedza tę samą witrynę, lokalny serwer DNS z buforowaniem może skrócić czas ładowania stron.

Zanim przejdziemy dalej, warto zrozumieć, czym dokładnie jest buforowanie DNS.

Na czym polega buforowanie DNS?

System DNS działa jak internetowa książka telefoniczna, przechowując informacje o publicznie dostępnych stronach i ich adresach IP. Dzięki niemu nie musimy pamiętać ciągów cyfr, które są niezbędne do komunikacji sieciowej.

Za każdym razem, gdy wpisujemy adres strony w przeglądarce, za kulisami system DNS dokonuje tłumaczenia nazwy na adres IP.

Chociaż nasze urządzenia mogą korzystać z wielu zewnętrznych serwerów DNS, posiadanie lokalnej kopii informacji o DNS przyspiesza proces wyszukiwania. To właśnie na tym polega buforowanie DNS.

Lokalna pamięć podręczna DNS przechowuje informacje o często odwiedzanych stronach, dzięki czemu system nie musi za każdym razem kierować zapytania do odległych serwerów. To znacząco przyspiesza proces.

Gdy potrzebne jest tłumaczenie nazwy domeny na adres IP, system zawsze zwraca się do serwera DNS. Duża liczba zapytań, szczególnie gdy wiele osób jednocześnie próbuje uzyskać dostęp do tej samej strony, może przeciążyć serwer DNS.

Buforowanie DNS jest więc rozwiązaniem, które pomaga zredukować liczbę zapytań i przyspieszyć czas odpowiedzi. Adresy IP i powiązane z nimi informacje są zapisywane lokalnie. Gdy system ponownie potrzebuje tego samego adresu, dane są pobierane z bufora, a nie z zewnętrznego serwera DNS.

Jak buforowanie DNS pomaga w rozwiązywaniu problemów z DNS w instancjach Amazon EC2?

Większość systemów Linux nie korzysta z lokalnej pamięci podręcznej DNS. Oznacza to, że wszystkie zapytania DNS są kierowane bezpośrednio do serwerów DNS Amazona. Te serwery mają jednak ograniczoną przepustowość i mogą nie poradzić sobie z dużą liczbą zapytań, co prowadzi do problemów z rozpoznawaniem nazw domen.

Wdrożenie lokalnego buforowania DNS w systemie zmniejsza obciążenie procesora i sieci oraz zapobiega błędom w tłumaczeniu nazw. Pamięć podręczna DNS odpowiada na zapytania dotyczące zarówno zewnętrznych usług DNS, jak i zasobów Amazon RDS i S3.

Podczas uruchamiania instancji Amazon EC2, połączonych z Amazon VPC, protokół DHCP jest wykorzystywany do pobrania adresu serwera DNS.

W przypadku korzystania z Amazon VPC, usługa Route 53 DNS Resolver wykorzystuje resolver w ramach VPC do obsługi zapytań DNS dla instancji EC2, pracujących w ramach lokalnych adresów internetowych Amazon VPC i stref prywatnych. Resolver przeprowadza również cykliczne wyszukiwania na publicznych serwerach DNS dla wszystkich pozostałych adresów internetowych.

Pamięć podręczna DNS działa jak tymczasowy magazyn zapytań DNS. System może szybko sprawdzić w nim wyniki poprzednich zapytań, co znacząco przyspiesza dostęp do witryn. Rejestr obejmuje każdą sesję, co pomaga w rozwiązywaniu nazw domen i unikaniu problemów z instancjami Amazon EC2.

Wielu użytkowników AWS korzysta z usługi Amazon Route 53 dla DNS, ze względu na prostotę użytkowania i niskie koszty. Niemniej jednak, istnieje wiele powodów, dla których warto rozważyć użycie lokalnego serwera DNS.

Chociaż bind9 to nadal dobra opcja do konfiguracji lokalnej pamięci podręcznej DNS, dnsmasq jest znacznie prostszy w instalacji i konfiguracji, zarówno na instancjach EC2, jak i na komputerach lokalnych.

Czym jest dnsmasq?

DNSmasq to lekkie narzędzie przeznaczone dla systemów Linux, które łączy w sobie funkcje buforowania DNS, serwera DHCP i TFTP. Jego niewielkie rozmiary i wydajność sprawiają, że idealnie nadaje się do sieci o ograniczonych zasobach.

Instalacja i konfiguracja dnsmasq są bardzo proste. Jest to wszechstronne rozwiązanie, pozwalające na konfigurację DNS i DHCP dla podsieci.

Dnsmasq umożliwia przypisywanie identyfikatorów DHCP oraz powiązanych opcji dla każdego serwera lub kontrolera. Obsługuje zarówno dynamiczne, jak i statyczne adresowanie DHCP, a także może zarządzać DNS i DHCP dla setek, a nawet tysięcy klientów.

Kiedy dnsmasq otrzymuje zapytanie DNS, najpierw sprawdza lokalną pamięć podręczną. Jeśli tam nie znajdzie odpowiedzi, przekazuje zapytanie do autorytatywnego serwera DNS. Dodatkowo, dnsmasq sprawdza plik /etc/hosts, identyfikując lokalne nazwy hostów, które nie są wymienione w publicznym DNS.

Korzystanie z dnsmasq zamiast wbudowanej pamięci podręcznej przeglądarki znacznie poprawia wydajność przeglądania internetu. Ze względu na prostą konfigurację i niewielkie wymagania przestrzeni dyskowej, dnsmasq jest doskonałym rozwiązaniem w środowiskach o ograniczonych zasobach.

Funkcje dnsmasq

  • Dnsmasq umożliwia łatwą integrację z wewnętrznymi serwerami DNS, kierując do nich określone zapytania.
  • Zmniejsza obciążenie serwera i zwiększa niezawodność dzięki lokalnemu serwerowi DNS.
  • Upraszcza konfigurację DNS dla urządzeń korzystających z zapory sieciowej, niezależnie od dostawcy usług internetowych.
  • Gdy połączenie internetowe jest niedostępne, operacje wyszukiwania DNS zostają natychmiast zatrzymane.
  • Dnsmasq może okresowo pobierać dane bezpośrednio z serwera nadrzędnego za pomocą zapytań PPP lub DHCP.

Instalacja

Przed instalacją i konfiguracją dnsmasq, należy wyłączyć usługę systemd-resolved.

systemctl stop systemd-resolved

Można ją również zablokować, aby nie uruchamiała się automatycznie po ponownym uruchomieniu systemu.

systemctl mask systemd-resolved

Instalacja dnsmasq jest następnym krokiem. Dnsmasq jest zazwyczaj preinstalowany w większości dystrybucji Linuksa. Jeśli nie, można go zainstalować ręcznie za pomocą poniższych poleceń w terminalu:

sudo apt-get install dnsmasq

Dla użytkowników yum:

sudo yum install -y dnsmasq

To polecenie automatycznie zainstaluje i uruchomi dnsmasq w tle.

Po zakończeniu instalacji można sprawdzić status dnsmasq za pomocą polecenia:

systemctl status dnsmasq

Jeśli status to „active (running)”, oznacza to, że instalacja i konfiguracja na porcie 53 przebiegły pomyślnie. W przeciwnym wypadku należy ponownie uruchomić system Ubuntu i dnsmasq, aby naprawić ewentualne błędy.

Konfiguracja

Dnsmasq jest teraz gotowy do skonfigurowania jako lokalny serwer DNS z buforowaniem. Domyślny plik konfiguracyjny znajduje się w /etc/dnsmasq.conf. Aby skonfigurować dnsmasq, należy zmodyfikować ten plik.

Użyj polecenia, aby otworzyć i edytować plik:

nano /etc/dnsmasq.conf

Edycja pliku konfiguracyjnego wymaga uprawnień administratora. Wyczyść zawartość pliku, w tym komentarze, i wklej poniższą konfigurację:

port=53
domain-needed
bogus-priv
listen-address=127.0.0.1
expand-hosts
domain=geek-demo.com
cache-size=1000

Wyjaśnienie poszczególnych parametrów:

  • port – definiuje port, na którym dnsmasq nasłuchuje zapytań DNS.
  • domain-needed – przekazuje zapytania tylko dla nazw domen do serwera nadrzędnego.
  • bogus-priv – zapobiega przekazywaniu zapytań dla prywatnych domen i portów.
  • listen-address – określa adres IP, na którym nasłuchuje dnsmasq. Dla serwera lokalnego zazwyczaj używany jest adres 127.0.0.1.
  • domain – ustawia domenę, którą dnsmasq dołącza do krótkich identyfikatorów.
  • cache-size – określa maksymalny rozmiar pamięci podręcznej DNS.

Po wprowadzeniu zmian, zapisz i zamknij plik. Następnym krokiem jest edycja pliku /etc/resolv.conf, aby dodać adres lokalnego hosta. Użyj poniższego polecenia, aby otworzyć plik w edytorze nano:

nano /etc/resolv.conf

W tym pliku znajdują się wszystkie serwery nazw używane przez system. Dodaj na początku linię „nameserver 127.0.0.1”.

Zapisz zmiany i zamknij plik. Na koniec, aby zmiany zostały wprowadzone, uruchom ponownie usługę dnsmasq:

systemctl restart dnsmasq

Testowanie lokalnego serwera buforowania DNS

Testowanie lokalnego serwera DNS jest bardzo proste. Użyj polecenia dig, aby sprawdzić działanie buforowania DNS. Po pierwszym uruchomieniu polecenia dig wynik powinien wskazywać na normalny czas zapytania.

┌──(root💀kali)-[/home/writer]
└─# dig newsblog.pl.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> newsblog.pl.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 623
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;newsblog.pl.com.                 IN      A

;; ANSWER SECTION:
newsblog.pl.com.          227     IN      A       172.66.43.163
newsblog.pl.com.          227     IN      A       172.66.40.93

;; Query time: 31 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:52:49 EDT 2022
;; MSG SIZE  rcvd: 74

Zwróć uwagę na „Query time”, który w tym przypadku wynosi około 31ms. Jest to czas potrzebny na pobranie informacji od serwera DNS. Ponownie uruchom polecenie dig dla tej samej domeny, a zauważysz znaczące skrócenie tego czasu:

┌──(root💀kali)-[/home/writer]
└─# dig newsblog.pl.com                                                                                     1 ⚙

; <<>> DiG 9.18.0-2-Debian <<>> newsblog.pl.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21942
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;newsblog.pl.com.                 IN      A

;; ANSWER SECTION:
newsblog.pl.com.          281     IN      A       172.66.40.93
newsblog.pl.com.          281     IN      A       172.66.43.163

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) (UDP)
;; WHEN: Sat Oct 15 07:58:10 EDT 2022
;; MSG SIZE  rcvd: 74

Tym razem „Query time” wynosi 0ms. Dzieje się tak, ponieważ dnsmasq zapisał informacje o domenie w pamięci podręcznej. Kolejne wyszukiwania są realizowane natychmiastowo dzięki buforowaniu. Aby wyczyścić pamięć podręczną, należy ponownie uruchomić usługę dnsmasq.

Podsumowanie

W tym artykule przedstawiliśmy, jak zainstalować i skonfigurować dnsmasq jako lokalny serwer DNS z buforowaniem. Warto również rozważyć zmianę serwerów DNS, aby przyspieszyć przeglądanie internetu w różnych systemach operacyjnych.