DNS

Wprowadzenie

Adres IP nie jest jedynym typem adresacji komputera w sieci Internet. Komputer można bowiem adresować (na poziomie warstwy aplikacji) również przez nazwę. Ludziom dużo łatwiej jest operować na zrozumiałych nazwach, niż na nieczytelnych adresach numerycznych. Z drugiej strony, komputery preferują liczby. Dlatego aby adresy numeryczne mogły współistnieć z nazwami komputerów, należy umożliwić odwzorowywanie adresów z jednej postaci w drugą. Zadanie to wykonuje system DNS (ang. Domain Name System). Usługa DNS operuje w warstwie aplikacji modelu OSI; została opisana w dokumentach RFC 1034 oraz RFC 1035.

Model systemu

Nazwa komputera musi mieć specjalną postać, by można było ją odwzorować w adres IP. Postać ta wynika z przyjętego w systemie DNS modelu, zgodnego z ogólnym modelem klient-serwer. Elementami modelu DNS są: domena, serwer DNS oraz klient. Ilustrację modelu DNS zawiera poniższy rysunek:

../_images/dns1.png

Rys.1. Idea systemu DNS

Przestrzeń nazw domenowych w systemie DNS rozpięta jest na strukturze drzewa. Jego korzeń tworzy domena .. Dalej, hierachicznie znajdują się domeny najwyższego poziomu (ang. TLD, top level domain), np. com, org czy domeny krajowe. Każda domena ze swoimi ewentualnymi poddomenami tworzy tzw. strefę DNS (ang. DNS zone), która jest zarządzana przez jakąś organizację. W ten sposób, zarządzanie całą przestrzenią nazw wydelegowane jest do wielu organizacji.

Nazwę domeny (od lewej do prawej strony) tworzą nazwy kolejnych naddomen (stref), oddzielone od siebie kropką. Pełna nazwa komputera zaś posiada dodatkowo na początku identyfikator komputera. Na przykład, komputer o identyfikatorze lupus w domenie abc.com ma nazwę lupus.abc.com.

Każda domena posiada swój serwer, przy czym kilka domen może być obsługiwanych przez jeden serwer. Ponadto każda domena ma swojego właściciela i jest przez niego administrowana. W związku z tym aby utworzyć własną domenę, należy ją zarejestrować u właściciela naddomeny (i najczęściej za to zapłacić). Od strony technicznej rejestracja w gruncie rzeczy polega na zapamiętaniu w serwerze naddomeny adresu i nazwy serwera tworzonej domeny.

Informacja

Serwer danej domeny musi znać lokalizację serwerów wszystkich jej poddomen – jest to jedno z ważniejszych założeń systemu DNS.

Przykładowo, chcąc utworzyć nową domenę def w domenie com, należy najpierw oficjalnie wystąpić do administratora domeny com o rejestrację nowej domeny. Ponadto, domena def.com musi mieć swój serwer, a jego adres i nazwa zostanie zapamiętana w serwerze domeny com.

Format nazwy domenowej:

  • element nazwy najbardziej z prawej strony oznacza domenę TLD, np. dla domeny www.put.poznan.pl, domeną TLD jest pl
  • hierarchię nazw domenowych odczytujemy od prawej strony, np. poznan.pl jest poddomeną pl.
  • każdy element nazwy domenowej może zawierać 63 znaki, pełna nazwa nie może przekraczać 253 znaków

System DNS zezwala także na używanie znaków spoza ASCII w nazwach domenowych, dzięki temu możliwe jest np. istnienie domeny takiej jak żółw.pl czy http://яндекс.рф Serwer DNS jednakże zapisuje tę nazwę w specjalnym zakodowanym formacie, dla żółw.pl - xn–w-uga1v8h.pl.

Typy serwerów DNS

W systemie DNS wyróżnia się dwa główne typy serwerów:

  • serwery domeny głównej (ang. root servers) – są to serwery znajdujące się na samym szczycie hierarchii modelu. Obecnie istnieje na świecie około 13 serwerów domeny głównej, z których większość znajduje się w Stanach Zjednoczonych;
  • serwery autorytatywne (ang. authoritative servers) – serwerem autorytatywnym danej domeny jest ten, który zawsze posiada aktualne informacje na temat komputerów w tej domenie. Najczęściej serwerem autorytatywnym danej domeny jest jej lokalny serwer. Aby jednak zwiększyć niezawodność systemu, zaleca się, by dla każdej domeny istniały co najmniej dwa serwery autorytatywne.

Klienci DNS

Klientami systemu DNS są komputery oraz inne serwery DNS, klient DNS w systemie operacyjnym, zajmujący się rozwiązaniem nazwy (odpytaniem DNS) nazywa się resolwerem (ang. resolver). Każdy system operacyjny ma wbudowany resolwer, który do działania potrzebuje adresu najbliższego serwera DNS. Adres ten wpisujemy, gdy konfigurujemy adres IP ręcznie lub jest on dostarczany przez serwer DHCP.

W systemie Linux, konfigurację resolwera dokonuje się poprzez wpis w pliku /etc/resolv.conf.

nameserver 8.8.8.8

Taki zapis mówi resolwerowi, żeby w pierwszej kolejności odpytywał serwer DNS firmy Google (8.8.8.8)

Rodzaje zapytań

Zapytanie DNS ma na celu znalezienie odwzorowania nazwy domenowej w adres IP (lub odwrotnego). Istnieją dwa rodzaje zapytań DNS – iteracyjne i rekurencyjne. Zasadę działania zapytania iteracyjnego ilustruje poniższy rysunek:

../_images/dns2.png

Rys.2. Idea zapytania iteracyjnego

Na rysunku celowo pominięte zostały serwery Spn.pl oraz Spl, aby ilustracja odpowiadała rzeczywistości. Serwer lokalny, nie znając odwzorowania, odwołuje się od razu do serwera domeny głównej.

Kolejne kroki odwzorowywania nazwy lupus.abc.com w adres IP (patrz rysunek):

  1. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  2. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  3. Nie wiem, ale zapytaj serwer domeny .com.
  4. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  5. Nie wiem ale zapytaj serwer domeny abc.com.
  6. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  7. Odpowiedź: 1.1.1.1
  8. Odpowiedź: 1.1.1.1

Zasadę działania zapytania rekurencyjnego przedstawia poniższy rysunek:

../_images/dns3.png

Rys.2. Idea zapytania rekurencyjnego

Kolejne kroki odwzorowywania nazwy lupus.abc.com w adres IP (patrz rysunek):

  1. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  2. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  3. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  4. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  5. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  6. Jaki jest adres IP komputera o nazwie lupus.abc.com?
  7. Odpowiedź: 1.1.1.1
  8. Odpowiedź: 1.1.1.1
  9. Odpowiedź: 1.1.1.1
  10. Odpowiedź: 1.1.1.1
  11. Odpowiedź: 1.1.1.1
  12. Odpowiedź: 1.1.1.1

Należy zaznaczyć, że powyższy rysunek służy wyłącznie jako ilustracja koncepcji zapytań rekurencyjnych. W rzeczywistości serwery łączą obydwa rodzaje zapytań. Jeżeli serwer lokalny domeny nie posiada odwzorowania, wysyła zapytanie do jednego z serwerów domeny głównej. Jeśli ten nie odpowiada, pytany jest kolejny serwer domeny głównej, i tak dalej. Serwery domeny głównej są więc odpytywane w sposób iteracyjny. Reszta zapytań zaś ma najczęściej charakter rekurencyjny.

Wykonywanie zapytań rekurencyjnych pozwala wszystkim uczestniczącym serwerom zapamiętać odwzorowanie (ang. DNS caching), co podnosi efektywności systemu. Jak już wspomniano, system DNS umożliwia również wykonywanie zapytań odwrotnych, znajdujących nazwę komputera o znanym adresie IP. W praktyce, aby ogranicznyć ruch DNS w sieci Internet, wiele serwerów nieautorytatywnych dla danej domeny, odpowiada bezpośrednio z pamięci podręcznej.

Rekordy zasobowe DNS

Opis domeny dokonywany jest przy użyciu tzw. rekordów zasobowych DNS (ang. DNS resource records). Do najważniejszych z nich należą:

  • SOA (ang. Start Of Authority) - wskazuje, że dany serwer jest najlepszym źródłem informacji o domenie oraz definiuje zachowanie serwerów głównych (ang. primary DNS) oraz zapasowaych (ang. secondary DNS); rekord SOA jest obecny jako pierwszy rekord w każdym pliku strefowym (opisującym domenę)
  • A - zawiera odwzorowanie nazwy domenowej w adres IP
  • NS - określa nazwę komputera będącego serwerem DNS dla tej domeny.
  • CNAME (ang. canonical name) - pozwala stworzyć “alias” dla już istniejącej nazwy domenowej
  • MX (mail exchange) - określa nazwę komputera będącego serwerem poczty elektronicznej w danej domenie. Serwery SMTP odczytują jego wartość żeby wiedzieć, który komputer obsługuje pocztę dla domeny.
  • SRV - zawiera dodatkowe informacje dotyczące lokalizacji usługi, którą wskazuje serwer DNS, rekord SRV używany jest np. przez usługi VoIP, protokół XMPP, LDAP, czy nawet grę Minecraft.
  • TXT - rekord pozwala na wpisanie dowolnego tekstu, używany głównie przez usługę SPF do walki ze spamem (host -t txt wp.pl)
  • PTR - definiuje odwzorowanie odwrotne (ang. reverse DNS) adresu IP na nazwę domenową
  • AAAA - to samo co rekord A, ale dla adresów IPv6

To właśnie wartości rekordów zasobowych przesyłane są w zapytaniach i odpowiedziach DNS. Na przykład serwer poczty elektronicznej odczytuje wartości rekordów MX, z kolei serwer DNS – najczęściej wartości rekordów A i NS.

Narzędzia klienckie systemu Linux

System Linux dysponuje zestawem narzędzi, które pozwalają diagnozować i testować system DNS. Do najważniejszych z nich należy komenda dig z pakietu bind (dig(1)) oraz host z pakietu dnstools (host(1)).

Jak wspomniano wyżej, ustawienie domyślnego DNS do odpytywania w systemie Linux można ustawić w pliku /etc/resolv.conf (resolv.conf(5))

Serwer DNS

Istnieje wiele implementacji serwera DNS dla systemów z rodziny UNIX, takich jak BIND, Powerdns, djbdns, MaraDNS.

BIND

BIND (ang. Berkeley Internet Name Domain) jest de facto standardową implementacją serwera DNS. Aktualna wersja BIND to wersja 9, powinna być dostępna po zainstalowaniu pakietu bind9. BIND używa jednego głównego pliku konfiguracyjnego serwera, który przeważnie nazywa się /etc/named.conf. W pliku tym podawane są ogólne opcje serwera oraz definicje stref DNS.

options {

  directory "/var/lib/named";
  notify no;
}

# plik opisujący domenę główną
zone "." in {
  # wskazówki
  type hint;
  file "root.hint";
};

zone "localhost" in  {
  type master;
  file "localhost.zone";
};

zone "0.0.127.in-addr.arpa" in {
  type master;
  file "127.0.0.zone";
};

Przykładowy plik strefy dla domeny example.com z różnymi rekordami.

$TTL 1M
example.com. IN SOA      example.com. root(
                           1          ;serial
                           2M         ;refresh
                           4M         ;retry
                           6M         ;expiry
                           1M         ;minimum
                           )
@            IN NS         ns1
ns1          IN A          192.168.1.2
host1        IN A          192.168.1.3
host2        IN A          192.168.1.4
kot          IN CNAME      host1
mail         IN MX 10      host1
mail         IN MX 100     host2

Powyższa definicja strefy dla domeny example.com określa 6 rekordów zasobowych. Rekord SOA dodatkowo definiuje opcje odświeżania, wygasania oraz numer wersji strefy. Wpisy bez kropki domyślnie rozszerzane są o nazwę strefy - example.com.. Notacja @ jest skrótem na nazwe strefy, zatem @ = example.com.. Niektóre rekordy mają także możliwość podania priortetu, w przypadku powyższej strefy rekord MX z priorytetem 10 jest nadrzędny do tego z prioytetem 100. Parametr $TTL określa jak długo serwery DNS odczytujące plik strefowy mają go zapamiętać, w laboratorium parametr ten najlepiej ustawić na 1 minutę ($TTL 1M).

Informacja

Przy każdej zmianie strefy należy inkrementować pole serial, w przeciwnym wypadku serwer BIND nie załaduje nowej definicji strefy!

Ćwiczenia

  1. Korzystając z komend dig oraz host, sprawdź rekordy dla popularnych domen, np. google.com, wp.pl, talk.google.com.
  2. Skonfiguruj serwer BIND ze strefą example.com. Wydziel w tej strefie poddomenę sub.example.com i wydeleguj na inny komputer z serwerem BIND. Nowa poddomena powinna zawierać także wpis host wskazujący na adres komputera. Skonfiguruj komputery aby używały nowych serwerów DNS i przetestuj konfigurację.