System nazw DNS i Konfiguracja BIND 9 System DNS - wprowadzenie
Domain Name System (DNS) to rozproszona sieć serwerów tłumaczących nazwy domen (np. www.uni.lodz.pl) na adresy IP (np. 212.191.64.21). Dzięki usłudze DNS nie musimy zapamiętywać ciągów liczb (adresów IP), a jedynie intuicyjne nazwy domen. System nazw domen powstał dla wygody użytkowników. Sieci nie rozumieją adresów DNS i aby poprawnie skierować pakiety muszą znać adres IP hosta docelowego. Tłumaczenie nazw domen na adresy IP przebiega w następujących etapach:
- Użytkownik wpisuje do programu klienckiego (np. przeglądarki WWW) nazwę domeny.
- Program kliencki wysyła zapytanie do serwera DNS przy pomocy odpowiedniej funkcji z biblioteki języka C tzw. resolvera (dane o adresach serwerów DNS znajdują się w pliku /etc/resolv.conf)
- Serwer DNS sprawdza w swoich statyczych zapisach (plik /etc/bind/named.conf i odpowiednie pliki strefowe w przypadku serwera BIND w systemie KNOPPIX), czy jest w stanie samodzielnie udzielić odpowiedzi na dane zapytanie.
- Jeżeli tak, to wysyła odpowiedź klientowi.
- Jeżeli nie, to wysyła zapytanie do tzw. serwera root (obsługującego domenę pierwszego rzędu, np. com, gov, pl), który z kolei odsyła nasz serwer DNS do kolejnego, który obsługuje konkretną domenę drugiego rzędu (np. lodz.pl, czy waw.pl), i tak dalej, aż zapytanie dojdzie do serwera, który może udzielić bezpośredniej odpowiedzi na zapytanie. Wówczas nasz serwer DNS odsyła odpowiedź klientowi.
- Klient wysyła następnie pakiet danych pod znany już adres IP.
Proces ten przedstawiony jest na poniższej rycinie. Źródło: "DNS and BIND. 3rd edition.", O'Reilly, 1998

Serwery DNS mają organizację hierarchiczną, zatem znając adres serwera root zawsze dojdziemy, szczebel po szczeblu do serwera obsługującego poszukiwaną przez nas domenę (np. uni.lodz.pl) i uzyskamy informacje dotyczące adresu IP konkretnego serwisu (np. www.uni.lodz.pl)
Serwery nazw zapewniają usługi rozwiązywania nazw dlastrefy (ang. zone) DNS. Strefa to nazwa nadana hostom wewnątrz danej domeny z pominięciem wszystkich domen podrzędnych (np. w strefie uni.lodz.pl znajduje się host www.uni.lodz.pl, ale nie ftp.math.uni.lodz.pl). Ilustruje to poniższa rycina. Źródło: "DNS and BIND. 3rd edition.", O'Reilly, 1998

Rozróżnia się kilka typów serwerów DNS:
- Master (primary) - zawiera podstawowe informacje o strefie i jest dla tej strefy (stref) serwerem miarodajnym (ang. authoritative).
- Slave (secondary) - w określonych odstępach czasu pobiera od serwera master kopię danych dotyczących danej strefy; również jest dla tej strefy serwerem miarodajnym.
- Caching-only - nie jest dla żadnej strefy miarodajny; przechowuje tylko informacje pobrane od innych serwerów
Serwery DNS przechowują dane dotyczące danych stref w ustandaryzowanych plikach bazodanowych (ang. database files; db files). W serwerze BIND w systemie Knoppix pliki te przechowywane są w katalogu /etc/bind. Ponadto istotnym dla działania serwera BIND plikiem jest jego plik konfiguracyjny /etc/bind/named.conf.
Resolver i plik resolv.conf
- Resolver to biblioteka funkcji systemowych służących do korzystania z usługi DNS. Programy takie jak przeglądarki WWWi klienci poczty posługują się tymi funkcjami w celu przetłumaczenia nazw DNS na adresy IP. Są również polecenia systemowe służące do tłumaczenia adresów DNS na IP. Do poleceń tych należą: host, dig oraz nslookup, które również korzystają z biblioteki resolvera. W najprostszym wariancie polecenie host ma postać:
host adres.domeny.com
- Sprawdź, jaki adres IP ma wydziałowy serwer www.math.uni.lodz.pl, a jaki adres ma serwer www.onet.pl
- Używając polecenia man (lub wpisując host bez argumentów) sprawdź w jaki sposób używając polecenia host można uzyskać pełną informację o zapytaniu DNS (ang. verbose mode) a następnie znajdź w tej informacji adres IP serwera DNS, który bezpośrednio udzielił odpowiedzi na zapytanie o adres www.onet.pl. Wylistuj adresy wszystkich hostów z domeny math.uni.lodz.pl (znajdź odpowiednią opcję w man'ie). Podpowiedź
- Plik konfiguracyjny resolvera to /etc/resolv.conf. Obejrzyj ten plik (komenda less) a następnie porównaj adres wpisany po słowie nameserver do tego, który znalazłeś w poprzednim ćwiczeniu.
- Zmień wpis w pliku resolv.conf tak aby resolver wysyłał zapytania do serwera o adresie 194.204.159.1 Powtórz zadania 1 i 2.
- Dla chętnych. Znajdź w man'ie do czego służy słowo kluczowe search w pliku resolv.conf. Wprowadź takie zmiany w tym pliku, aby po wpisaniu host www otrzymać adres IP serwera www.lodz.pl.
Plik /etc/hosts
- Niezależnie od systemu DNS możemy niektóre hosty w sieci nazwać przy użyciu pliku /etc/hosts. Dodaj do tego pliku wpis przyporządkowujący serwerowi www.google.pl (IP znajdź przy pomocy polecenia host) nazwę szukaj, a następnie wpisz "szukaj" w pasku adresu przeglądarki WWW. W ten sposób możemy zastąpić długie nazwy domenowe krótkimi słowami (jeśli często z nich korzystamy).
Konfiguracja serwera BIND jako serwera typu primary
Dokumentacja opisująca poszczególne wpisy w plikach BIND'a znajduje się pod adresem debian.one.pl
Aby skonfigurować serwer BIND jako serwer primary należy wyedytować dwa pliki: plik konfiguracyjny serwera BIND (w Knoppiksie /etc/bind/named.conf) oraz odpowiedni plik strefowy (/etc/bind/db. nazwa.mojej.domeny).
Pliki strefowe zawierają informacje na temat hostów znajdujących się w danej strefie. Prześledź budowę pliku strefowego na przykładzie pliku strefowego dla domeny math.uni.lodz.pl. Na samym początku w pliku strefowym znajduje się dyrektywa $TTL (time to live). Mówi ona jak długo wpisy DNS mają być przechowywane w cache innych serwerów DNS. Pliki strefowe składają się z rekordów. Pierwszym rekordem w pliku strefowym jest rekord SOA (start of authority). Dla niewtajemniczonych wygląda on dość skomplikowanie, ale ma dość prostą strukturę. Zaczyna się on od nazwy domeny dla danej strefy (tutaj @ oznaczająca domenę opisywaną przez dany plik strefowy). Po nim następuje klasa domeny (IN od Internet - wszystkie rekordy będą tej klasy), typ rekordu (SOA), nazwa DNS głównego serwera dla tej domeny (imul.math.uni.lodz.pl. - należy zwrócić uwagę na kropkę na końcu - oznacza ona nazwę bezwzględną - coś w stylu / przed nazwą katalogu; brak kropki oznacza nazwę względną w stosunku do opisywanej przez dany plik domeny - wówczas serwer BIND automatycznie doda nazwę opisywanej domeny na końcu) oraz adres osoby odpowiedzialnej za domenę (zamiast @ stosujemy . - tutaj root.imul.math.uni.lodz.pl. - znowu kropka na końcu). Następnie w nawiasie występują różne parametry. Numer seryjny (tutaj 200310300) służy do ustalenia przez serwer typu secondary, czy należy ściągnąć dane dotyczące strefy z serwera primary (tak, jeśli numer seryjny jest niższy na serwerze typu secondary). Najczęściej używa się formatu RRRRMMDDNN, gdzie RRRR, MM i DD oznaczają odpowiednio rok, miesiąc i dzień modyfikacji, a NN oznacza numer modyfikacji danego dnia. Drugi parametr to Refresh (10800) - co ile sekund serwer typu secondary powinien sprawdzać, czy numer seryjny się zmienił. Następny parametr - Retry (3600) - oznacza jak często serwer typu secondary powinien wysyłać zapytania do serwera typu primary, jeśli za pierwszym razem nie uzyskał odpowiedzi. Kolejny parametr Expire mówi o tym po jakim czasie od uszkodzenia serwera primary serwer secondary powinien przestać udzielać odpowiedzi na zapytania dotyczące danej domeny. Ostatni parametr - Negative TTL - jest odpowiednikiem TTL ale dla cacheowanych odpowiedzi negatywnych ("host xxx.yyy.zzz nie istnieje"). Po rekordzie SOA następują inne rekordy:
- rekordy typu NS - name server oznacza różne serwery DNS dla danej domeny (np. serwery primary i secondary):
IN NS imul.math.uni.lodz.pl.
lub
@ IN NS imul.math.uni.lodz.pl.
- rekordy typu MX - mail exchanger oznaczają serwery e-mail obsługujące adresy z danej domeny (np niewiap@math.uni.lodz.pl). liczba po MX oznacza priorytet serwera - najpierw danego maila obsługuje serwer z najniższym wpisem w tym polu.
IN MX 10 imul.math.uni.lodz.pl.
lub
@ IN MX 10 imul.math.uni.lodz.pl.
- rekordy typu A - address - właściwe wpisy przypisujące nazwie DNS adres IP hosta:
imul IN A 212.191.65.2
- rekordy typu CNAME - canonical name - inaczej alias - nadające danemu hostowi alternatywną nazwę. każdemu rekordowi CNAME musi odpowiadać rekord A zawierający po lewej stronie to samo, co rekord CNAME zawiera po prawej (powyższy wpis mówi: "www" to inna nazwa dla "imul"; adres IP hosta "imul" znajdujemy przeszukując rekordy typu A)
www IN CNAME imul
- Otwórz do edycji plik /etc/bind/named.conf. Dodaj nową strefę knn.c215.lodz.pl, gdzie nn oznacza numer komputera. Nasz host będzie dla tej strefy serwerem typu master (primary). Podpowiedź
- Stwórz plik strefowy opisujący strefę dodaną do pliku konfiguracyjnego w poprzednim zadaniu. W strefie tej mają znaleźć się następujące nazwy hostów:
- moj odpowiadający adresowi IP naszego interfejsu sieciowego
- mojkomp będący aliasem do moj
- wydzialowy odpowiadający adresowi IP 212.191.65.2
- polewej odpowiadający adresowi IP hosta po naszej lewej stronie
- poprawej odpowiadający adresowi IP hosta po naszej prawej stronie
Tak więc przykładowo po wykonaniu wszystkich czynnosci (do punktu 10) i wpisaniu host wydzialowy.knn.c215.lodz.pl powinniśmy od programu host otrzymać adres IP 212.191.65.2Podpowiedź
- Sprawdź poprawność konfiguracji serwera BIND komendą named -g. Nie powinny pojawić się żadne komunikaty o błędach, tylko takie, jak poniżej:
Oct 20 11:58:49.101 starting BIND 9.2.4rc5 -g Oct 20 11:58:49.105 using 1 CPU Oct 20 11:58:49.132 loading configuration from '/etc/bind/named.conf' Oct 20 11:58:49.202 no IPv6 interfaces found Oct 20 11:58:49.204 listening on IPv4 interface lo, 127.0.0.1#53 Oct 20 11:58:49.208 binding TCP socket: address in use Oct 20 11:58:49.209 listening on IPv4 interface eth0, 192.168.181.128#53 Oct 20 11:58:49.210 binding TCP socket: address in use Oct 20 11:58:49.228 none:0: open: /etc/bind/rndc.key: permission denied Oct 20 11:58:49.228 couldn't add command channel 127.0.0.1#953: permission denied Oct 20 11:58:49.229 ignoring config file logging statement due to -g option Oct 20 11:58:49.239 zone 0.in-addr.arpa/IN: loaded serial 1 Oct 20 11:58:49.244 zone 127.in-addr.arpa/IN: loaded serial 1 Oct 20 11:58:49.249 zone 255.in-addr.arpa/IN: loaded serial 1 Oct 20 11:58:49.254 zone localhost/IN: loaded serial 1 Oct 20 11:58:49.259 zone knn.c201.lodz.pl/IN: loaded serial 2004102001 Oct 20 11:58:49.259 running Oct 20 11:58:49.260 zone knn.c201.lodz.pl/IN: sending notifies (serial 2004102001) Oct 20 11:58:49.267 received notify for zone 'knn.c201.lodz.pl'
Działanie programu można przerwać wciskając kombinację [Ctrl]+[C]. Jeżeli pojawiły się komunikaty o błędach, należy znaleźć błędy i je naprawić.
- Zmodyfikuj plik /etc/resolv.conf w taki sposób, by domyślnym serwerem DNS był naszym hostem (adres IP uzyskujemy przy użyciu ifconfig).
- Uruchom serwer BIND w tle komendą named i sprawdź poprawność konfiguracji komendą host (host moj.knn.c215.lodz.pl) Pamiętaj że trzeba podać pełną nazwę domenową aby otrzymać odpowiedź. Jeśli chcesz mieć możliwość odnajdywania hostów na podstawie samej nazwy hosta np. host moj trzeba dodać wpis search knn.c215.lodz.pl do pliku resolv.conf
- Sprawdź konfigurację serwera dns kolegi poprzez odpytanie jego serwera. Wykonaj polecenie host -l domena.kolegi ipKolegi
- Definiowanie strefy odwrotnej (reverse zone). Możemy też definiować odwrotne rozwiązywanie nazw żeby możliwe było uzyskanie nazwy domenowej na podstawie adresu IP. Definicja strefy w pliku named.conf wygląda analogicznie do poniższej:
zone "215.1.10.in-addr.arpa" { type master; file "/etc/bind/db.215.1.10.rev"; };Proszę zwrócić uwagę na to że adres IP jest w odwrotnej kolejności i określone są tylko 3 pierwsze liczby. Definicja strefy wygląda mniej więcej tak:
$ttl 38400 215.1.10.in-addr.arpa. IN SOA moj.knn.c215.lodz.pl. root.localhost. ( 1054527626 ;Serial 10800 ;Refres 3600 ;Retry 604800 ;Expire 38400 ) ;Minimum 215.1.10.in-addr.arpa. IN NS moj.knn.c215.lodz.pl. 23.215.1.10.in-addr.arpa. IN PTR poprawej.knn.c215.lodz.pl.Oczywiście adresy IP należy zastąpić odpowiednimi by pasowały do naszej sieci oraz do adresów hostów. Tak samo należy zamienić nazwy domenowe.
- Zdefiniuj strefę odwrotną dla komputerów określonych w naszej domenie. Zatrzymaj serwer dns i włącz ponownie.
- Sprawdź czy rozwiązywanie działa poprawnie. Polecenie host -a twojAdresIp powinno pokazać dostępne wpisy. Polecenie host adresIpOkreslonyWStrefieOdwrotnej pokaże nazwę domenową dla tego adresu.
- Sprawdź też nazwy domenowe dla tych adresów kożystając z servera DNS kolegi (po adresie ip trzeba podać adres ip servera dns jaki ma być użyty).
Konfiguracja serwera BIND jako serwera secondary
- Skonfiguruj serwer bind na swoim hoscie tak by byl serwerem typu secondary (slave) dla strefy kmm.c201.lodz.pl, gdzie mm jest numerem komputera jednego z sąsiadów. Serwer ma co 5 minut pobierać dane o strefie od serwera postawionego na komputerze sąsiada. (Czy zmiany wymaga lokalna konfiguracja, czy konfiguracja u sasiada?) Podpowiedz
Comments
Post new comment