Jak działa komunikacja DNS?

Usługa która ułatwia życie przy codziennym przeglądaniu internetu i nie tylko czyli DNS (ang. Domain Name System) jest kluczową usługą w działaniu obecnego internetu. Opisuje to RFC1034 i RFC1035. Serwery przetwarzają codziennie miliardy zapytań od użytkowników. Dla dobrego zobrazowania można porównać DNS do książki telefonicznej – tylko, że dla adresów IP. Tak jak dawniej, żeby poznać numer do danej osoby należało znać jej imię i nazwisko, tak samo w uproszczeniu dziś działa resolver DNS – znamy nazwę strony do której chcemy się dostać, to w odpowiedzi od serwera dostaniemy adres IP do którego się łączymy.

Wyjaśnienie i pokaz praktyczny

Nazwy własne zamiast adresów IP dla komputerów i urządzeń nie są „wygodne” gdyż muszą one każdorazowo dokonywać tłumaczenia na adres IP. Dzieje się tak ponieważ w pakiecie nie ma pola z adresem nazwy własnej. DNS jest usługą o budowie hierarchicznej, więc jeżeli na niższym poziomie serwer DNS nie posiada właściwego odwzorowania, to zwraca się do wyżej położonego serwera z prośbą o jego przesłanie. Zapytania do serwera są wysyłane przez protokół TCP lub UDP. Numer portu to 53.

Pokażmy to działanie na konkretnym przykładzie naszej strony nastykusieci.pl:

root@NSS ~ % nslookup nastykusieci.pl
Server:		208.67.222.123
Address:	208.67.222.123#53

Non-authoritative answer:
Name:	nastykusieci.pl
Address: 18.197.212.60

Wykonując w terminalu większości systemów operacyjnych komendę nslookup (do wyszukiwania szczegółowych informacji odnoszących się do serwerów) dostaniemy powyższą odpowiedź. Systemy Unixowe zamiast nslookup oferują zazwyczaj komendę dig.

Dwie pierwsze linie (pod poleceniem) są informacją o serwerze wykonującym polecenie nslookup (czyli takim jaki ma się ustawiony jako główny DNS w systemie, o tym później), a trzy ostatnie mówią użytkownikowi o adresie IP, nazwie serwera i aliasach serwera który sprawdzał. Interesuje nas zatem głównie adres 18.197.212.60 który jest adresem IP naszej strony. Podobny wynik, ale już bez szczegółów możemy uzyskać poleceniem ping.

Schemat blokowy działania DNS w systemie operacyjnym

Zakładając scenariusz, w którym komputer został niedawno uruchomiony przy próbie połączenia do strony najpierw sprawdzana jest pamięć podręczna (DNS cache). Dzieje się tak ponieważ to właśnie tam po każdym udanym odwzorowaniu nazwy przetrzymuje się ją tymczasowo.

Gdy w cache nie będzie danego wpisu to OS następnie zajrzy do pliku systemowego hosts (w Windows zlokalizowany pod C:\Windows\System32\Drivers\etc\hosts – a w systemach Unixowych zazwyczaj pod /etc/hosts). W tym pliku mamy możliwość ręcznego zdefiniowania mapowań FQDN <-> IP. Jeżeli OS nie znajdzie tam pasującego mapowania to dopiero wtedy skontaktuje się z ustawionym serwerem DNS.

Poniżej przedstawię jako przykład modyfikację pliku hosts w którym to dodałem rekord o nazwie pokaznastykusieci oraz prawidłowy adres IP prowadzący do strony. Dzięki temu mogę go pingować po zmodyfikowanej nazwie, jako swego rodzaju skrót (dłuższy od faktycznej nazwy, heh 😅 – ale pokazy rządzą się swoimi prawami!).

Będąc administratorem, możesz sobie ułatwić życie i dostosować ten plik pod swoje przykłady. Wpisanie tam adresu IP urządzeń, którymi administrujesz wraz z nazwami ułatwiającymi ich identyfikację może być ciekawym pomysłem – np. wpis 192.168.0.1 main_router, 192.168.0.2 main_switch itd.

root@NSS ~ % sudo nano /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
18.197.212.60 pokaznastykusieci

root@NSS ~ % ping pokaznastykusieci
PING pokaznastykusieci (18.197.212.60): 56 data bytes

Wyobraź sobie przez chwilę, że DNS nie istnieje. Byłoby to strasznie niewygodne, a codzienne korzystanie z internetu byłoby męczarnią. Musiałbyś znać i pamiętać wszystkie adresy IP każdej strony jaką odwiedzasz! Brzmi strasznie. Wtedy faktycznie dobrym pomysłem byłoby założenie sobie książeczki papierowej lub cyfrowej, gdyż nie sposób byłoby je wszystkie zapamiętać. Nawet to jednak nie byłoby gwarancją sukcesu, ponieważ strony czasami zmieniają adres IP, i nie zawsze jest on statyczny, a może być dynamiczny.

Na co dzień wyglądałoby to wówczas tak:

Jest to tak zwany odwrócony DNS (ang. reverse DNS [rDNS/revDNS]) – czyli znając adres IP, system zamieni go na adres mnemoniczny (czyli przyjazny dla ludzi, oparty na symbolach i literach). Gdy już docenimy to, jak pomocny dla nas jest system nazw domen to możemy przejść do dalszej części artykułu.

Najpopularniejsze opcje

Jeżeli mówimy już o serwerach (a zwłaszcza publicznych) to tutaj mamy dużo opcji do wyboru. Przytoczę najpopularniejsze i darmowe opcje:

  • Google (8.8.8.8 & 8.8.4.4)
  • Cloudflare (1.1.1.1 & 1.0.0.1)
  • Cisco OpenDNS (208.67.222.222 & 208.67.220.220)
  • CleanBrowsing (185.228.168.9 & 185.228.169.9)

Pierwszy adres w nawiasie to preferowany serwer, a drugi adres to alternatywny serwer. To oczywiście tylko część publicznie dostępnych i rozproszonych serwerów. Temat tego, który z nich jest najlepszy to temat rzeka i dla każdego odpowiedź jest różna. Wszystko zależy od indywidualnych potrzeb i oczekiwań.

Jeśli chodzi o wydajność przykładowo to Cloudflare deklaruje, że jest najszybsze. Najpopularniejszym serwerem jest prawdopodobnie Google, z kolei jeśli chodzi o funkcje ochrony rodzinnej, blokady treści oraz niebezpiecznych stron to polecany jest CleanBrowsing lub OpenDNS (w przykładzie na początku artykułu właśnie jego mam ustawionego).

Większość użytkowników w sieciach domowych nie modyfikuje ustawień i zostawia DNS swojego dostawcy internetu. Możesz też jednak postawić własny serwer! Pi-hole to linuksowa aplikacja do blokowania reklam i trackerów internetowych na poziomie sieci, pełniąca funkcję DNS sinkhole i opcjonalnie serwera DHCP, przeznaczona do użytku w sieci prywatnej.

Twój domowy router też może być twoim resolverem. Pamiętaj, że DNS nie dotyczy tylko usług w globalnym internecie, lecz równie dobrze np. w firmowym intranecie jak i domowej sieci LAN. Wygodniej może będzie Ci łączyć się przykładowo do NAS’a po adresie nas.dom.local zamiast klasycznego adresu IP.

Jeżeli masz w domu serwer VPN, a nie masz statycznego adresu IP (zazwyczaj dodatkowo płatnego) od dostawcy, tutaj też po raz kolejny DNS może uratować Ci skórę i umożliwi Ci działanie takiego rozwiązania. Konkretniej mówiąc jego odmiana jaką jest DDNS.

Konfiguracja serwera na urządzeniach Cisco

Topologia testowa na potrzeby zobrazowania wykonywanej konfiguracji

Załóżmy, że na routerze jest zrobiona i przetestowana podstawowa konfiguracja adresacji IP na interfejsach.

  1. Włącz usługę DNS i wyszukiwanie domen na routerze:
R1# configure terminal
R1(config)# ip dns server
R1(config)# ip domain-lookup

2. Skonfiguruj router z publicznym serwerem nazw:

R1(config)# ip name-server 8.8.8.8

Żądanie DNS od użytkowników wewnętrznych będzie wysyłane do routera, który następnie wyśle zapytanie do serwerów DNS w Internecie. Adres IP miejsca docelowego jest odsyłany do stacji roboczej, z której pochodzi zapytanie.

3. Skonfiguruj serwer DNS z nazwami hostów Twojej sieci lokalnej:

R1(config)# ip host server 10.10.0.20
R1(config)# ip host PC1 192.168.0.3

W tym przypadku, gdy jakikolwiek inny komputer będzie chciał pingować „PC1” (stacja robocza), router rozwiąże jego nazwę NetBIOS na odpowiedni adres IP. Tak samo w przypadku „server”.

4. Przetestuj działanie usługi:

Ważne jest, aby urządzenia końcowe miały w ustawieniach sieciowych jako adres serwera DNS ustawiony adres R1 w tym przypadku 10.0.0.30.

R1# ping PC1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/2/6 ms
R1# ping server
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.5, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/6 ms

Pozostałe dodatkowe możliwości ustawień DNS w formie tabelarycznej:

PolecenieOpis
ip domain name name(Opcjonalnie) Określa domyślną nazwę domeny, której oprogramowanie Cisco IOS będzie używać do uzupełniania niewykwalifikowanych nazw hostów.
ip domain list name(Opcjonalnie) Definiuje listę domyślnych nazw domen, aby uzupełnić niewykwalifikowane nazwy hostów.
ip domain timeout seconds(Opcjonalnie) Określa ilość czasu oczekiwania na odpowiedź na zapytanie DNS.
Jeśli polecenie ip domain timeout nie jest skonfigurowane, oprogramowanie Cisco IOS będzie czekać 3 sekundy na odpowiedź na zapytanie DNS.
ip domain retry number(Opcjonalnie) Określa liczbę powtórzeń wysyłania zapytań DNS.
Jeśli polecenie ip domain retry nie jest skonfigurowane, oprogramowanie Cisco IOS będzie dwukrotnie ponawiać zapytania DNS.
ip domain round-robin(Opcjonalnie) Włącza funkcję round-robin na serwerach DNS.
Round-robin DNS to technika równoważenia obciążenia ruchu, w której równoważenie jest wykonywane przez rodzaj serwera DNS zwanego autorytatywnym serwerem nazw, a nie przy użyciu dedykowanego sprzętu do równoważenia obciążenia.
ip dns spoofing ip-addressKonfiguruje spoofing DNS.
– Adres IP używany do spoofingu DNS może być adresem IPv4 lub IPv6
– Urządzenie odpowie na zapytanie DNS skonfigurowanym ip-address w przypadku zapytania o jakąkolwiek nazwę hosta inną niż jego własna
– Urządzenie odpowie na zapytanie DNS adresem IP przychodzącego interfejsu, gdy zapyta o własną nazwę hosta.
ip dns server queue limit {forwarder queue-size-limit | director queue-size-limit}(Opcjonalnie) Konfiguruje limit wielkości kolejek używanych przez procesy serwera DNS.
Słowo kluczowe director zostało usunięte w Cisco IOS Release 12.4(24)T.
ip host [vrf vrf-name] [view view-namehostname {address1 [address2 … address8] | additional address9 [address10 … addressn]}(Opcjonalnie) Konfiguruje VRF lokalnego hosta.
ip dns primary domain-name soa primary-server-name mailbox-name [refresh-interval [retry-interval [expire-ttl [minimum-ttl]]]]Konfiguruje urządzenie jako podstawowy serwer DNS NS (Name server) dla domeny (strefy) oraz jako źródło rekordu Start of Authority (SOA) (który wyznacza początek strefy).
ip host domain-name ns server-name(Opcjonalnie) Konfiguruje urządzenie do utworzenia serwera nazw (NS) na routerze.

Szczegółowa analiza

Opisana w artykule komunikacja DNS została sprawdzona używając terminala. Korzystając z programu Wireshark można rozbić ją na najmniejsze kawałki i obejrzeć te pakiety oraz komunikację w szczegółach. Przeczytasz o tym w naszym darmowym NSSletterze – mailingu dla sieciowców głodnych wiedzy.

Dołączając uzyskasz dostęp również do archiwum – tematykę tego artykułu rozszerzyliśmy w NSSletterze #18. Rozwiń swoją wiedzę już teraz i zapisz się używając formularza poniżej.

Komentarze: 3
Otrzymuj powiadomienia z tej dyskusji
Powiadom mnie o
guest

3 - Ilość komentarzy
Sortuj wg najlepszych
Sortuj wg najnowszych Sortuj wg najstarszych
Inline Feedbacks
View all comments
SpeX
SpeX
1 rok temu

W obecnych czasach kajecik zamiast DNS by raczej nie wystarczy. Bo zapominasz o serwerach współdzielonych, gdzie będziesz miał wiele kont www, pod jednym adresem IP.

Tomasz Wądołowski
Tomasz Wądołowski
1 rok temu
Odpowiedź do  SpeX

Zdecydowanie masz rację SpeX, z kajecikiem byłoby ciężko 😅 Dzięki za trafny komentarz!

Damian Michalak
Mod
1 rok temu
Odpowiedź do  SpeX

Fakt, ale do wchodzenia na Pudelki 🐩 i Onety by wystarczył 😂