W stogu siana

W jaki sposób odnaleźć poszukiwany serwer WWW czy FTP? Czy koniecznie trzeba znać setki numerków? Nie! Wszystko dzięki systemowi DNS.

Każdy komputer w Internecie musi mieć własny adres IP, składający się z czterech liczb (z zakresu 0-255), tzw. oktetów, oddzielonych kropkami. Ponieważ zapamiętanie adresów zapisanych w takiej postaci jest dość trudne, możemy stosować znacznie praktyczniejsze w użyciu nazwy komputerw (hostów). Można przecież spodziewać się, iż adres strony WWW firmy Sun Microsystems to po prostu http://www.sun.com/, a serwer plików firmy Symantec znajduje się pod adresem #. Postaramy się przybliżyć tematykę związaną z usługami DNS oraz przedstawić praktyczne ich zastosowanie w Linuksie.

Komputer jest jednoznacznie określany poprzez swój adres IP, zatem musi istnieć sposób pozwalający na zamianę nazw na adresy IP i odwrotnie. W systemach linuksowych jednym z takich mechanizmów jest przechowywanie listy nazw hostów oraz odpowiadających im adresów IP w pliku /etc/hosts. Baza ta ma jednak duże ograniczenie: nie można w jednym pliku umieścić adresów wszystkich komputerów podłączonych do Internetu. Numery IP zmieniają się tak dynamicznie, że posiadanie aktualnej listy adresów w jednym zbiorze jest po prostu niemożliwe. Znacznie wydajniejszym sposobem translacji nazw serwerów na adresy IP jest DNS (Domain Name System).

Dużą zaletą DNS-u jest fakt, że umożliwia on zmianę dostawcy usług internetowych (providera) bez konieczności zmiany adresu, do którego mogli się już przyzwyczaić użytkownicy. Adresy IP przyporządkowane są zwykle do providera Internetu, który ma do dyspozycji określoną ich pulę. Zmiana dostawcy nie wymaga zatem zmiany nazwy naszego serwera – wystarczy w pliku konfiguracyjnym serwera DNS zmodyfikować wpis dotyczący przenoszonego serwera, wskazując na adres IP otrzymany od nowego providera.

Co piszczy w DNS

System DNS oparty jest na modelu klient- -serwer. Składa się on z serwera (Name Server) zawierającego bazę danych o innych komputerach w Sieci oraz z klienta (resolvera), który kieruje zapytania do serwera DNS. Serwer DNS nie zawiera informacji o wszystkich komputerach w Internecie, ma on jedynie adresy lokalnych maszyn zdefiniowane w strefach, które obsługuje. Przechowuje również informacje o adresach innych serwerów DNS. Jeżeli serwer chce znaleźć adres IP komputera, którego nie ma w swojej bazie danych, to wysyła zapytanie do innych serwerów w celu znalezienia tej nazwy. Zatem serwer DNS przechowuje tylko niewielki fragment tzw. przestrzeni nazw domeny, ale może także zawierać dane pochodzące z innych części przestrzeni nazw w pamięci podręcznej (cache).

System DNS zawiera hierarchiczną, rozproszoną bazę danych informacji o hostach. Jest ona podzielona na strefy, czyli fragmenty przestrzeni nazw domeny, zdefiniowane w określonym pliku strefowym (zone file). Każdy serwer DNS odpowiada tylko za pewną część nazw i adresów. Nazwa domeny składa się z identyfikatora hosta i nazw poddomen aż do domeny głównej root (.). Domeny główne (Top level domains), takie jak.edu, .com czy.org, są obsługiwane przez tzw. główne serwery nazw (root servers). Lista tych ostatnich maszyn przechowywana jest przeważnie w pliku named.root. Serwer DNS oprócz zamiany nazwy hosta na jego adres IP realizuje też funkcję odwrotną, zwaną Reverse DNS. W tym celu w sieci Internet stworzono specjalną domenę.in-addr.arpa. Komputer o adresie 192.168.0.1 ma w tej domenie adres 1.0.168.192.in-addr.arpa (należy zwrócić uwagę na odwrotność wpisywania poszczególnych oktetów adresu IP). Strefy odwrotne zdefiniowane są w oddzielnych plikach (reverse zone files).

Konfiguracja stref

Każda strefa zawiera bazę danych zdefiniowaną w oddzielnym pliku. Składa się ona w większości z pozycji zwanych rekordami zasobów (resource records). Podstawową funkcją bazy danych stref jest zamienianie nazw hostów na adresy IP lub odwrotnie. W bazie danych znajdują się rekordy zawierające pole TTL (time to live) określające tzw. czas życia. Może być on wyrażony w sekundach poprzez wpisanie w odpowiedniej linii liczby bez żadnych dodatkowych symboli. Parametr TTL określa czas, przez który dane mają być przechowywane w bazie danych serwera pomocniczego lub serwera buforującego. Pierwszą pozycją w bazie jest rekord SOA (Start Of Authority) określający początek strefy. W żadnym pliku nie może być więcej niż jeden wpis SOA. Ponieważ danych w rekordzie jest zazwyczaj tak dużo, że nie zmieściłyby się w jednej linii, stosowane są nawiasy okrągłe, będące znakami kontynuacji. Przykładowy rekord SOA może wyglądać następująco:

@ IN SOA localhost.root.localhost. (2000050601; Serial 604800; Refresh 86400; Retry 2419200; Expire 604800); Default TTL

Info
Grupy dyskusyjne
Uwagi i komentarze do artykułu:
#
Pytania techniczne:
#
Grupa poświęcona programowi BIND:
#
Zagadnienia sieciowe w Linuksie:
#
Internet
Źródła programu BIND oraz aktualna wersja
http://www.isc.org/products/BIND/
Pakiety binarne dla dystrybucji Debian
#
Pakiety binarne dla dystrybucji Red Hat
#
Organizacja RIPE
http://www.ripe.net/
Organizacja InterNIC
http://www.internic.net/
W dziale Internet | Serwery DNS znajduje się serwer DNS BIND 8.2.2 i przykładowe pliki konfiguracyjne serwera dla dystrybucji Debian
Więcej:bezcatnews