artykuły
Powrót do listy artykułów

Temat artykułu: Konfiguracja serwera DNS w Linux
Tekst napisał pitt2k dnia 08-01-2004

Tym razem zajmiemy się tematem rozwiązywania nazw w Internecie. Jak pewnie każdy z Was wie, komputery porozumiewają się ze sobą za pomocą liczb zwanych adresami IP. Dla ludzi jest to oczywiście za trudne do zapamiętania, więc wymyślono sobie nazwy domen, które odpowiadają adresom IP. Jak to się dzieje, że kiedy w przeglądarce wpisujemy www.howto.pl, to nasz komputer wie, do którego komputera na świecie się zgłosić ?? Odpowiedź jest prosta - za pomocą systemu DNS.

DNS (Domain Name Service) jest to mechanizm, który na podstawie nazwy domeny zamienia ją na odpowiedni adres IP. Odwrotny mechanizm nazywa się revDNS.

Jak zwykle oprzemy się na przykładzie z życia:

Co potrzeba:
  • Komputer z zainstalowanym Debianem (dla przypomnienia dodam, że wszystkie artykuły dotyczące linuxa w naszym serwisie oparte są na dystrybucji Debian)
  • Prawidłowo działające połączenie z internetem - ze stałym adresem IP !
  • Umiejętność instalacji dodatkowego oprogramowania pod Debianem - na ten temat znajdziecie cosik w dziale artykuły
  • Zarejestrowaną domenę typu: *.com.pl, *.pl, *.region.pl, etc.
  • Trochę cierpliwości i koncentracji
Jak działa rozwiązywanie nazw w linuxie ?
Kiedy wpisujemy polecenie ping howto.pl to linux stara się zamienić wpisaną nazwę na odpowiedni adres IP. Przeszukuje więc w pierwszej kolejności plik /etc/host.conf, gdzie napotyka następujący wpis:

order hosts,bind
multi on


Oznacza on, że w pierwszej kolejności ma sprawdzić plik /etc/hosts w którym znajdują się informacje o nazwach hostów, a dopiero później ma odwołać się do DNS-a.

Plik /etc/hosts przedstawia się następująco (oczywiście u Was będzie wyglądał nieco inaczej):

127.0.0.1 localhost.domena.lokalna localhost
192.168.1.1 serwer.domena.lokalna serwer
217.97.16.52 www.howto.pl www


Jeżeli linux znajdzie w tym pliku interesujący nas wpis, to przekaże poleceniu ping odpowiedni adres IP i po sprawie.
Jednak co się stanie kiedy w tym pliku nie ma informacji o domenie howto.pl ??

Linux odpyta serwer DNS, który ma przypisany w pliku /ets/resolv.conf. Wygląda to tak:

search howto.pl -- wyszukiwanie domeny
nameserver 127.0.0.1 -- serwer DNS lokalny (który skonfigurujemy w dalszej cześci)
nameserver 194.204.152.34 -- serwer DNS TPSA


W naszym wypadku zostaną odpytane serwery DNS po kolei.

Konfiguracja serwera DNS dla domeny howto.pl

Dlaczego musimy mieć serwer DNS ?
Ponieważ przy rejestracji domeny w NASK-u musimy podać adresy 2 serwerów DNS. Pierwszy z nich nazywa się serwerem podstawowym (PrimaryDNS), a drugi serwerem zastępczym (SecondaryDNS). Tłumaczenia nazw angielskich na polskie pozostawiam bez komentarza...

Aby nasz komputer był rozpoznawany w sieci po nazwie domenowej musimy mieć przynajmniej jeden działający serwer DNS.

Jak to się robi....

Instalacja serwera DNS

Jest to banalnie proste w Debianie. Wystarczy wydać polecenie:

apt-get install bind

Po chwili (uzależnionej od szybkości naszego łącza lub CD-ROM-u) będziemy mięli zainstalowany serwer o mało znaczącej nazwie BIND (Berkeley Internet Name Domain). Jest to serwer DNS umieszczony w katalogu /etc/bind. Tam też będziemy szukać plików konfiguracyjnych, z których najważniejszy to /etc/bind/named.conf.

Co my tu mamy:

options {
directory "/var/cache/bind"; -- ścieżka do katalogu z danymi serwera DNS
query-source address * port 53; -- port na którym ma być serwer DNS (standardowo 53)
};
logging{
category lame-servers{
null;
};
category cname{
null;
};
};
zone "." { Poszczególne strefy.
type hint;
file "/etc/bind/db.root"; -- ścieżka do pliku w którym zawarte są adresy innych serwerów DNS.
};
zone "howto.pl" { Strefa naszej domeny.
type master; -- nasz DNS jest pierwszym źródłem informacji o domenie
file "howto.pl"; -- plik z definicją domeny
notify yes; -- włączenie powiadamiania innych serwerów DNS
also-notify{
217.97.16.55; -- adres serwera DNS, który jest naszym SecondaryDNS-em
};
};
zone "127.in-addr.arpa" { Strefy lokalne odwrotne (tzw. revDNS, do zamiany IP na nazwę)
type master; -- typ główny
file "/etc/bind/db.127"; -- ścieżka do pliku z definicją strefy
};
zone "0.in-addr.arpa" {
type master; -- typ główny
file "/etc/bind/db.0"; -- ścieżka do pliku z definicją strefy
};
zone "255.in-addr.arpa" {
type master; -- typ główny
file "/etc/bind/db.255"; -- ścieżka do pliku z definicją strefy
};
zone "1.168.192.IN-ADDR.ARPA" {
type master; -- typ główny
file "192.168.1"; -- plik z definicją strefy
notify no;
};
Dla przykładu nasz serwer jest Secondary DNS-em dla domeny citrix.pl.
zone "citrix.pl" { -- plik z definicją strefy
type slave;
file "sec/citrix.pl"; -- adres IP PrimaryDNS-a dla citrix.pl
masters{
217.97.16.55;
};
};


UWAGA: Pliki z definicjami stref są przechowywane w katalogach /etc/bind i /var/cache/bind !!!

Nie będę tu opisywał wszystkich plików, ponieważ pliki dla sieci lokalnej są z reguły poprawne już po instalacji serwera DNS. Zajmiemy się opisem plików konfiguracyjnych domeny.

howto.pl

$TTL 43200
@ IN SOA dns.howto.pl. hostmaster.howto.pl. ( Adres serwera DNS – SOA (Source Of Authority)
2002100902 ; serial Numer seryjny, musi być zmieniany po każdej zmianie w ustawieniach
8H ; refresh Czas co jaki odświeża się serwer DNS
2H ; retry Czas co jaki ponawia się odświeżanie serwera DNS
7D ; expire Ilość dni po których wygasa ważność rekordów DNS
1D ; default_ttl Minimalny czas życia TTL(Time to Live) dla rekordu DNS
)
@ IN MX 5 howto.pl. MX (Mail eXchange) czyli serwer pocztowy
@ IN MX 10 secondary.pl. drugi serwer pocztowy
@ IN NS dns.howto.pl. NS (Name Server) czyli podstawowy serwer DNS
@ IN NS dns.secondary.pl. Secodnary DNS
@ IN A 217.97.16.52 Adres IP domeny
dns IN A 217.97.16.52 Hosty w domenie howto.pl – dns.howto.pl i jego adres IP
www IN CNAME @ Hosty w domenie howto.pl – www.howto.pl i jego rekord CNAME wskazujący na adres IP domeny


Uruchomienie serwera DNS

Najprościej uruchamia się serwer poleceniem:

/etc/init.d/bind start

Jeżeli wszystko skonfigurowaliśmy poprawnie, to serwer powinien poprawnie wystartować.
Aby nasz DNS startował wraz z systemem to polecam dodanie linka symbolicznego w katalogu /etc/rc2.d, który jest odpowiedzialny za start systemu:

ln -s S20bind /etc/init.d/bind


Sprawdzenie konfiguracji

Do sprawdzenia konfiguracji serwera DNS służy polecenie nslookup.
To narzędzie diagnostyczne wyświetla informacje z serwerów nazw DNS.
Składnia polecenia:

nslookup [-option ...] [poszukiwany_komputer | - [serwer]]

gdzie:

- option ...
Określa jedno lub więcej poleceń narzędzia nslookup jako opcję wiersza polecenia.
Na przykład, aby zmienić domyślny tryb zapytań na informacje dotyczące komputera typu host, a początkowy limit czasu na 10 sekund, należy wpisać:

nslookup -querytype=hinfo -timeout=10

poszukiwany_komputer
Wyszukuje informacje dotyczące poszukiwanego komputera używając albo bieżącego domyślnego serwera albo serwera określonego przez parametr serwer. Jeśli poszukiwany_komputer jest adresem IP, a typem kwerendy jest A lub PTR, zwracana jest nazwa komputera. Jeśli poszukiwany_ komputer jest nazwą i nie ma końcowej kropki, do nazwy dołączana jest domyślna nazwa domeny DNS.

serwer
Poleca wykorzystanie danego serwera jako serwera nazw DNS. Jeśli parametr serwer jest pominięty, zostanie użyta domyślna nazwa serwera DNS.


Przykłady

help
Wyświetla zwięzłe podsumowanie poleceń narzędzia nslookup. Znak zapytania ? jest synonimem polecenia help.

exit
Kończy pracę narzędzia nslookup.

finger
Nawiązuje połączenie z serwerem usługi finger na bieżącym komputerze. Bieżący komputer jest definiowany, kiedy poprzednie wyszukiwanie komputera zostało wykonane prawidłowo i zwrócone zostały informacje dotyczące adresu.

finger [nazwa_użytkownika] [> nazwa_pliku] | [>> nazwa_pliku]

ls
Wyświetla informacje dla domeny DNS. Domyślnie wynik polecenia zawiera nazwy komputerów i ich adresy IP. Jeśli dane wyjściowe kierowane są do pliku, dla każdych 50 rekordów otrzymywanych z serwera drukowany jest znak #).

ls [opcja] domena_dns [> nazwa_pliku] | [>> nazwa_pliku]

Parametry

opcja
-t typ_kwerendy
Wyświetla wszystkie rekordy określonego typu. Opis parametru typ_kwerendy podano w temacie Polecenie Set.
-a
Wyświetla aliasy komputerów w domenie DNS. Ten parametr jest synonimem dla -t CNAME.
-d
Wyświetla wszystkie rekordy dla domeny DNS. Ten parametr jest synonimem dla -t ANY.
-h
Wyświetla informacje o procesorze (CPU) i systemie operacyjnym dla domeny DNS. Ten parametr jest synonimem dla -t HINFO.
-s
Wyświetla listę dobrze znanych usług komputerów w domenie DNS. Ten parametr jest synonimem dla -t WKS.

domena_dns
Określa domenę DNS, dla której konieczne jest uzyskanie informacji.

nazwa_pliku
Określa nazwę pliku, w którym ma być zapisany wynik polecenia. Można użyć znaków większości (>) i podwójnego znaku większości (>>) do readresowania danych wyjściowych w zwykły sposób.

set
Zmienia te ustawienia konfiguracyjne, które wpływają na funkcje wyszukiwania.

set słowo_kluczowe[=wartość]

set all
Drukuje bieżące wartości ustawień konfiguracyjnych. Polecenie drukuje również informacje dotyczące domyślnego serwera i komputera (host).


Zakończenie

Mam nadzieję, że z tym opisem każdy z Was poradzi sobie z postawieniem serwera DNS dla swojej domeny. Oczywiście nic nie stoi na przeszkodzie, żeby używać serwera DNS dla komputerów i domeny lokalnej. Zapraszam do eksperymentowania.