Ponieważ sieć Internet bazuje przede wszystkim na adresach IP, poruszanie sie po kolejnych stronach za ich pomocą byłoby niepraktyczne. Z pomocą przychodzi nam protokół DNS, którego głównym zadaniem jest zamiana adresu zrozumiałego dla użytkownika na taki, który zrozumie komputer. Mechanizm DNS zawiera w sobie ogromną bazę danych, ale o tym później.
Jak działa DNS?
Aby całość działała poprawnie i nie dochodziło do nadużyć, administrację nad DNS wykonuje IANA (Internet Assigned Numbers Authority) oraz ICANN (The Internet Corporation for Assigned Names and Numbers). Zapewniają oni przyznawanie domen internetowych między kraje i organizacje oraz ustalanie ich struktury.
W taki sposób domeny typu .pl możliwe są do zarejestrowania w NASK (Naukowa Akademicka Sieć Komputerowa) bądź u jednego z ich pośredników.
Przejdźmy do tego, w jaki sposób po wejściu na dany adres www, nasz komputer wie, na jakie IP przesyłać żądanie. Poniższe kroki są uogólnione i stanowią jedynie ogólny schemat bardziej rozszerzonego działania.
- Po wpisaniu adresu www, w przeglądarce następuje przesłanie zapytania do providera np. dostawcy internetu lub ogólnodostępnego DNS-a jak 8.8.8.8 od Google.
- Ponieważ provider nie zna adresu IP serwera, przesyłane jest zapytanie na jeden z 13 głównych serwerów DNS.
- Jeden z 13 głównych serwerów DNS w odpowiedzi przesyła providerowi lokalizację IP serwera wyższego poziomu (Top Level Domain), który przetrzymuje informacje o domenach z daną końcówką (jak wspomnieliśmy wcześniej, za .pl odpowiada NASK)
- Provider przesyła zapytanie na serwer wyższego poziomu zwróconym przez jeden z 13 głównych serwerów.
- Jeśli serwer przetrzymuje IP interesującej nas strony, dostajemy je.
- Przeglądarka dostaje informacje od providera o serwerze, na którym jest strona www, z którym przebiega dalsza komunikacja.
Rodzaje zapytań
W związku z powyższym, zapytania możemy podzielić na dwa rodzaje:
- Rekurencyjne – wymusza na serwerze znalezienie i przesłanie informacji o domenie bądź powiadomienia o błędzie. Jeśli odpytywany serwer nie zna odpowiedzi, to zapytuje kolejne serwery DNS.
- Iteracyjne – przesyłane miedzy serwerami DNS. Serwer zwraca najlepsze informacje, jakimi dysponuje o serwerze związanym z domeną (przykładowo, że o kolejne informacje należy zwrócić się z zapytaniem do serwera pod podanym adresem IP).
Typy rekordów DNS
Każda z domen posiada swoją strefę DNS, czyli bazę danych, przetrzymujacą rekordy definiujace jej konfigurację. Do najważniejszych, należą:
- Rekord A (Rekord adresów IPv4) – mapuje adres IP hosta na jej 32-bitowy adres IPv4. Najczęstszy adres, który wykorzystuje przeglądarka w komunikacji z docelowym serwerem.
- Rekord AAAA (Rekord adresów IPv6) – 128-bitowy adres IPv6. Docelowo miał takie same zadanie, jak rekord A.
- Rekord CNAME – rekord ustanawiający alias, dzięki któremu jesteśmy w stanie skierować domenę lub subdomenę na inną nazwę domenową.
- Rekord MX (wymiany poczty) – przekierowuje pocztę i wskazuje serwer odpowiedzialny za jej obsługę.
- Rekord PTR (rekord wskaźnika) – mapuje adres IPv4 i IPv6 dla nazwy kanonicznej na zrozumiały dla nas (np. www.bugspace.pl).
- Rekord NS (rekord serwera nazw) – rekord określający, które serwery przekazują informacje na temat domeny z systemu DNS.
- Rekord SOA – zawiera autorytatywne informacje o domenie internetowej, min. główny serwer domeny, email administratora domeny i numer seryjny domeny.
- Rekord SRV – pozwala na dołączenie dodatkowych informacji np. w postaci wskazania portu i rodzaj uprotokołu, na którym działa konkretna usługa lub serwer.
- Rekord TXT – umożliwa dołączenie dodatkowego tekstu w strefie DNS. Używany np. do weryfikacji własności domeny lub implementacji specyfikacji Sender Policy Framework (SPF).
Narzędzia do odpytywania serwerów nazw DNS
Odpytywanie serwerów nazw DNS nie służy tylko do weryfikacji i rozwiązywania problemów z DNS, ale także w celu dostania publicznych informacji o serwerze. Najbardziej znane narzędzia to host, nslookup i dig. My skupimy się na tym ostatnim. Jeśli wiemy już po co je stosować, należy sobie zadać pytanie „jak”.
Podstawowe odpytanie serwera DNS, domyślnie zapytujące o rekord A z domeny dummy-domain.com, wygląda następująco:
dig dummy-domain.com
po podmianie dummy-domain.com na google.pl, dostajemy:
; <<>> DiG 9.16.1-Ubuntu <<>> google.pl
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33619
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;google.pl. IN A
;; ANSWER SECTION:
google.pl. 295 IN A 216.58.209.3
;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53)
;; WHEN: śro kwi 14 21:47:16 CEST 2021
;; MSG SIZE rcvd: 54
Początkowo, otrzymana odpowiedź może wydawać nam się skomplikowana i nieczytelna. Linie poprzedzone średnikiem należy traktować jako komentarz. Z odpowiedzi możemy (lecz nie musimy, jak zaraz się okaże) dostać kolejno pięć sekcji z informacjami:
- Nagłówek (header) – nagłówek odpowiedzi serwera DNS,
- Zapytanie (question) – zapytanie przesłane na serwer DNS,
- Odpowiedź (answer) – odpowiedź serwera DNS na nasze zapytanie,
- Autorytet (authority) – wskazuje serwery, które są ostatecznym autorytetem dla zapytań dotyczących wskazanej domeny. Serwer DNS na nasze zapytanie może użyć informacji przetrzymywanych w pamięci podręcznej (cache). Przykładowo, resolver Cloudflare zapisuje w pamięci podręcznej informacje na 24 godziny. Aby mieć pewność, że dostaniemy wiadomości „z pierwszej ręki”, powinniśmy zapytać serwer wskazany w sekcji autorytet.
- Dodatkowe (additional) – przetrzymuje dodatkowe informacje dotyczące statystyk (w jej skład wchodzi także EDNS z pseudosekcji OPT, informujący nas o wersji EDNS, jej flagach i wielkości pakietu UDP).
Oczywiście, w zapytaniu możemy wskazać rekord, o który zapytujemy. W przykładzie rekord TTL.
dig dummy-domain.com TTL
Do wyświetlenia opisanej na początku artykułu trasy zapytań, użyjemy poniższego polecenia.
dig dummy-domain.com +trace
Polecenie służące do wyświetlenia jedynie rekordów w strefie dns:
dig dummy-domain.com ANY +noall +answer
Ciekawoska – „IN” między rekordami oznacza, że zapytanie kierujemy przez sieć Internet.
Źródła
https://www.cloudflare.com/learning/dns/what-is-dns/
https://pl.wikipedia.org/wiki/Domain_Name_System
https://www.rootusers.com/12-dig-command-examples-to-query-dns-in-linux/
https://neverendingsecurity.wordpress.com/2015/04/13/dig-commands-cheatsheet/
https://mansfeld.pl/webhosting/co-to-jest-dns-jak-dziala/
https://www.kylos.pl/blog/co-to-jest-dns/