# DNS HOWTO

## Nicolai Langfeldt janl@math.uio.no
v1.3.2, 3 June 1997
Wersja polska: Piotr Pogorzelski piotr.pogorzelski@ippt.gov.pl
v1.0.1, kwiecień 1998

Jak w zostać małoetatowym administratorem DNS. Dokument opisuje BIND-4.9.x.

## 1. Wstęp

Słowa kluczowe: DNS, bind, named, dialup, ppp, slip, Internet, domain, name, hosts, resolving

## 1.1 Legal stuff

(C)opyright 1995 Nicolai Langfeldt. Do not modify without amending copyright, distribute freely but retain copyright message.

## 1.2 Podziękowania i prośby o pomoc.

Chciałbym podziękować Arnt Gulbrandsen, który niezliczoną liczbę razy czytał ten dokumend dostarczając wielu pożytecznych sugestii. Dziękuję również ludziom, którzy przysłali swoje sugestie pocztą elektroniczną. Dziękuje. Pomogliście mi w pracy nad tym dokumentem.

## 1.3 Inne dokumenty

Ten dokument nigdy nie będzie skończony, wszelkie uwagi (ogólne - nie dotyczące polskiej wersji tego dokumentu) proszę przesyłać autorowi. Czeka na uwagi o sukcesach i kłopotach, dzięki nim dokument stanie się pełniejszy i lepszy. Tak więc pieniądze, pytania/uwagi kierujcie na adres janl@ifi.uio.no. Jeśli wysyłacie pocztą elektroniczną, upewnijcie się, że adres zwrotny jest poprawny. Proszę, przed wysłaniem listu zapoznajcie się wcześniej z rodziałem FAQ dotyczącym najczęsciej pojawiających się pytań.

## 1.4 Dedykacja

Ten dokument HOWTO jest dedykowany Anne Line Norheim. Pomimo, że prawdopodobnie nigdy go nie przeczyta.

## 2. Wprowadzenie.

Co tu znajdziecie, a czego nie.

Dla początkujących, DNS oznacza Domain NAme System, Zasady i programy umożliwiające odwzorowanie (zamianę) nazw symbolicznych nadawnych komuterom na odpowiadające imadresy IP. Niniejszy dokument przedstawia w jaki sposób stworzyć takie odwzrowanie wykorzystując do tego Linuxa. Wspomniane odwzorowanie to proste skojarzenie dwóch rzeczy, symbolicznej nazwy komputera np. ftp.linux.org z adresem IP tego komputera, 199.249.150.4.

DNS to jeden z bardziej niezauważalnych obszarów zarządzania siecią. Niniejszy dokument postara się wyjaśnić kilka pojęć. Opisuje w jaki sposób zestawić prosty serwer DNS. Rozpoczynając od podręzcnego serwera DNS aż do uruchomienia podstawowego serwera domeny. Bardziej skomplikowane konfiguracje mogą być opisane w rozdziale FAQ. Jeśli nie znajdziesz tam rozwiązania swoich problemów, musisz zapoznać się z Prawdziwą Dokumentacją. Później napiszę co to jest Prawdziwa dokumentacja the last chapter.

Zanim zaczeniesz działać musisz wpierw skonfigurować swój komputer, tak abyć mógł łączyć się z niego i do niego za pomocą programu telnet, oraz wykonywać inne różnego rodzaju połączenia sieciowe. W szczególności powinieneś móc połączyć sie ze swoim komputerem wydając polecenie `telnet 127.0.0.1` (sprawdź to teraz!). Potrzebujesz poprawnie skonfigurowanych plików `/etc/host.conf` (lub `/etc/nsswitch.conf`), `/etc/resolv.conf` i `/etc/hosts` ponieważ nie będę w tym dokumencie omawiał ich funkcji. Jeśli nie masz potrzebnej konfiguracji sieciowej pomże ci dokument NET-2-HOWTO. Przeczytaj go.

Jeśli korzystasz ze SLIPa lub PPP, muszą poprawnie działać. Jeśli tak nie jest przeczytaj PPP-HOWTO.

Kiedy mówię `twój komputer', to znaczy, że mam na myśli komputer na którym próbujesz uruchomić serwer DNS, a nie jakikolwiek inny komputer który może być pośrednio związany z działaniem sieci.

Zakładam, że nie znajdujesz się za żadną 'ścianą ogniową', która uniemożliwia komuniekację DNS ze światem zewnętrznym. Jeśli tak nie jest, będziesz potrzebował specjalnej konfiguracji, zapoznaj się z rozdziałem FAQ.

Serwowanie nazw pod systemem UNIX jest wykonywane przez program o nazwie `named`. Jest to część pakietu bind, który prowadzi i którym opiekuje się Paul Vixie z The Internet Software Consortium. `Named` jest dostarczany przez większość dystrybucji Linuxa i zwykle można go znaleźć w `/usr/sbin/named`. Jeśli jest on zainstalowany na twoim komputerze, prawdopodobnie możesz z niego skorzystać, jeśli nie, możesz zainstalować jego najnowszą wersje, którą znajdziesz w ftp.vix.com:/pub/bind.

DNS jest ogólnosieciową bazą danych. Trzeba uważać co się do niej wkłada. Jeśłi włoży się śmiecie, ty i inni otrzymacie z niej śmiecie. Muszisz utrzymywać swoją część DNSu uporządkowaną i poprawną. Wtedy będzie ci dobrze służyć. Naucz się jak z niej korzystać, jak nią zarządzać, jak ją odpluskwiać, a staniesz się kolejnym dobrym administratorem zapobiegając przeciązenim sieci wywołanym jej złym zarządzaniem.

W tym dokumencie wypowiadam sądy o pewnych rzeczach, które nie są do końca prawdziwe (choć są co najmniej w połowie prawdziwe). Wszystko po to, aby zachować prostotę tego dokumentu. Jeśli mi uwierzysz wszystko powinno działać.

Wskazówka: Zrób kopie wszystkich plików, które każe zmienić, tak aby w przypadku niepowodzenia całej konfiguracji bys mógł wrócić do stanu pierwotnego.

## 3. Podręczny serwer DNS.

Pierwszy etap konfiguracji DNS, pożyteczny dla osób łączących się z Internetem przez modem.

Podręczny serwer DNS znajdzie odpowiedzi na pytania o nazwy komputerów i zapamięta je, tak aby mógł natychmiast odpowiedzieć, gdy będziesz ich potrzebował ponownie.

Po pierwsze potrzebny jest plik `/etc/named/.boot`. Jest czytany podczas uruchamiania programu named. W naszym przypadku powienien po prostu zawierać:

    ;  Plik startowy podręcznego serwera DSN
    ;
    directory /var/named
    ;
    ; rodzaj          domena                        plik lub komputer źródłowy
    cache           .                               root.cache
    primary         0.0.127.in-addr.arpa            pz/127.0.0

BARDZO WAŻNE: W niektórych formatach tego dokumentu, zawartość wspomnianego pliku będzie poprzedzona kilkoma spacjami lub znakami tabulacji. Znaki te nie mogą znależć się w prawdzimym pliku konfiguracyjnym. Usuń wszelkie wiodące spacje w plikach utworzonych na podstawie tego dokumnetu (np przez kopiowanie fragmentów).

Wiersz z poleceniem ``directory`' wskazuje, gdzie program named powienien szukać plików. Wszystkie podawane póżniej nazwy plików będą nazwami względem tego katalogu. `/var/named` jest właściwym miejscem, zgodnym ze Standardem systemów plików w systemie Linux (FSS).

Plik o nazwie `/var/named/root.cache` powienien zawierać:

     .       518400  NS      D.ROOT-SERVERS.NET.
     .       518400  NS      E.ROOT-SERVERS.NET.
     .       518400  NS      I.ROOT-SERVERS.NET.
     .       518400  NS      F.ROOT-SERVERS.NET.
     .       518400  NS      G.ROOT-SERVERS.NET.
     .       518400  NS      A.ROOT-SERVERS.NET.
     .       518400  NS      H.ROOT-SERVERS.NET.
     .       518400  NS      B.ROOT-SERVERS.NET.
     .       518400  NS      C.ROOT-SERVERS.NET.
    ;
    D.ROOT-SERVERS.NET.     3600000 A       128.8.10.90
    E.ROOT-SERVERS.NET.     3600000 A       192.203.230.10
    I.ROOT-SERVERS.NET.     3600000 A       192.36.148.17
    F.ROOT-SERVERS.NET.     3600000 A       192.5.5.241
    G.ROOT-SERVERS.NET.     3600000 A       192.112.36.4
    A.ROOT-SERVERS.NET.     3600000 A       198.41.0.4
    H.ROOT-SERVERS.NET.     3600000 A       128.63.2.53
    B.ROOT-SERVERS.NET.     3600000 A       128.9.0.107
    C.ROOT-SERVERS.NET.     3600000 A       192.33.4.12

Pamiętaj co mówiłem o wiodących odstępach!.

Plik określa główne serwery DNS na świecie. Ta informacja zmienia się z czasem i musi być poprawiana. Patrz Rozdziało utrzymaniu serwera, znajdziesz tam rady skąd uzyskiwać aktualne informacje. Jest to opisane na stronie podręcznika dotyczącej programu named, lecz IMHO nadaje się dla ludzi, którzy już rozumieją jak pracuje named.

Kolejny wiersz w `named.boot` zawiera słowo kłuczowe `primary`. Później opiszę jego zadanie, teraz po prostu utwórz w katalogu `pz` plik o nazwie `127.0.0` zawierający:

    @               IN      SOA     linux.bogus. hostmaster.linux.bogus. (
                                    1       ; Serial
                                    28800   ; Refresh
                                    7200    ; Retry
                                    604800  ; Expire
                                    86400)  ; Minimum TTL
                            NS      ns.linux.bogus.
    1                       PTR     localhost.

Do tego potrzebujesz jeszcze plik `/etc/resolv.conf`, który by wyglądał mniej więcej tak:

    search poddomena.twoja.domena. twoja.domena
    nameserver 127.0.0.1

Wiersz ``search`' określa, które domeny powinny być przeglądane w poszukiwaniu komputera z którym chcemy nawiązać połączenie. Wiersz ``nameserver`' zawiera adres IP komputera, serwera DNS, z którego może korzystać twój komputer. W tym przypadku jest to twój komputer ponieważ to właśnie na nim chcesz uruchomić program named. (Uwaga: Ten plik jest czytany przez procedury resolwera biblioteki libc, program named nie zagląda do tego pliku.)

Mała ilustracja do czego służy ten plik: jeśli program otrzyma za zadanie znalezienie adresu komputera `foo`, najpierw jest sprawdzane czy istnieje komputer `foo.poddomena.twoja.domena`, a w przypadku niepowodzenia następnie sprawda się `foo.twoja.domena`, a na końcu `foo`. Jeśli należy znaleźć `sunsite.unc.edu` wpierw sprawdza się istnienie `sunsite.unc.edu.poddomena.twoja.domena` (tak, jest to glupie, ale tak musi być), następnie `sunsite.unc.edu.twoja.domena`, a na końcu `sunsite.unc.edu`. Możesz nie chcieć umieszczać w tym pliku zbyt wielu domen, każde wyszukanie zajmuje trochę czasu.

W kolejnym przykładzie zakładamy, że należysz do domeny `poddomena.twoja.domena`, twój komputer nowsi nazwę `twój-komputer.poddomena.twoja.domena`. Wiersz z poleceniem search nie powinien zawierać domeny najwyższego poziomu (TLD -Top Level Domain) (a w Polsce domeny drugiego poziomu np. `edu.pl`, /com.pl/). Jeśli bardzo często łączysz się z komputerami należącymi do innej domeny, możesz ją dodać do wiersza z poleceniem `search`:

    search poddomena.twoja.domena. inna-domena.com.pl.

itd. Oczywiście należy wpisać istniejące domeny. Zwróć uwagę na brak kropki kończącej nazwę domeny.

Następnie, zależnie od wersji biblioteki libc, której używasz musisz poprawić albo plik `/etc/nsswitch.conf` lub `/etc/host.conf`. Jeśli w twoim systemie już jest plik `/etc/nsswitch.conf` to znaczy, że należy poprawić ten właśnie plik, jęsli go nie ma, będziemy poprawiwać `/etc/hosts.conf`.

/etc/nsswitch.conf

To spory plik okreśłający skąd system ma pobierać różnego rodzaju informacje, z których plików, lub sieciowychs baz danych. Zwykle zawiera pomocne komentarze. Znajdź wiersz zaczywnający się słowem ``hosts:`', powinien wyglądać następująco:

    hosts:      files dns

Jeśli nie ma wiersza zaczynającego się od ``hosts`', to dodaj przedstawiony powyżej. Deiniuje on, że programy wpierw powinny zajżeć do pliku `/etc/hosts` i dopiero w następnej kolejności sprawdzać w DNSie, w sposób zgodny z wytycznymi znajdującymi się w pliku `/etc/resolv.conf`.

/etc/host.conf

Prawdopodowbie zawiera kilkanaście wierszym jeden z nich powinien wyglądać następująco:

    order hosts,bind

Jeśli nie ma wiersza rozpoczynającego się słowem `order` powinno się taki dodać. Określa on sposób działania procedur rozwiązujących nazwy komputerów, które w podanej konfiguracji wpierw sprawdzają plik `/etc/hosts` , a następnie pytają serwer DNS (który jest zdefiniowany w pliku `/etc/resolv.conf` jako 127.0.0.1). Te pliki są dokładniej opisane na stronach podręcznika, można je przeczytać pisząc ``man 8 resolv` (w większości dystrybucji Linuxa). IMHO jest to całkiem zrozumiały tekst i powinien się z nim zapoznać każdy administrator DNSu. Zrób to teraz, jeśli odłożysz to na później, nigdy tego nie zrobisz.

Cect1>Uruchamianie programu named.

Przyszedł nareszcie czas uruchomic program named. Jeśli korzystasz z połączenia dzwonionego, przed uruchomieniem programu zestaw połaczenie. Nastepnie uruchom ``ndc start`' i wciśnij ENTER. Gdyby powloka nie mogła znaleźć progrmu ndc, spróbuj ``/usr/sbin/ndc start`'. Jeśli tam też nie ma tego programu zajżyj do rozdziału FAQ. Teraz możesz przetestować swoją konfigurację. Jeśli podczas uruchamiania programu named będziesz podglądał plik dziennika (zwykle `tail -f /var/log/messages` ) powinieneś zobaczyć komunikaty podobne do tych poniżej:

> `

>     Jun 30 21:50:55 roke named[2258]: starting.  named 4.9.4-REL Sun Jun 30 21:29:03 MET DST 1996   janl@roke.slip.ifi.uio.no:/var/tmp/bind/named
>     Jun 30 21:50:55 roke named[2258]: cache zone "" loaded (serial 0)
>     Jun 30 21:50:55 roke named[2258]: primary zone "0.0.127.in-addr.arpa" loaded (serial 1)

> `

Jeśli zobaczysz jakiekolwiek komunikaty o błędach, named wskaże plik zawierający błąd (mam nadzieję, że named.boot lub named.cache :-). Zabij proces named (`ndc stop`) i sprawdź wskazany plik.

> `

>     $ nslookup
>     Default Server:  localhost
>     Address:  127.0.0.1

>     >

> `

Jeśli wyświetlone komunikaty są zbliżone do tych powyżej, to znaczy, że wszystko działa. Mamy taką nadzieję. W każdym innym przypadku musisz wrócić i sprawdzić raz jeszcze pliki konfiguracyjne. Po każdej modyfikacji pliku `/etc/named.boot` musisz zrestartować program wydając polecenie `ndc restart`.

Teraz możesz wydawać zapytania. Spróbuj odnaleźć komputer blisko ciebie. `pat.uio.no` jest blisko mnie, Uniwersytet w Oslo:

> `

>     > pat.uio.no
>     Server:  localhost
>     Address:  127.0.0.1

>     Name:    pat.uio.no
>     Address:  129.240.2.50

> `

nslookup poprosił nameda o wyszukanie komputera `pat.uio.no`. Named skontaktował się z jednym z serwerów nazw wymienionych w pliku `root.cache` i tam rozpoczął swą drogę. Zanim zobaczysz rezultat zapytania, może upłynąć całkiem spora chwila, ponieważ named przeszukuje wszystkie domeny wymienione w pliku `/etc/resolv.conf`/

Jeśli spróbujesz raz jeszcze otrzymasz taką odpowiedź:

> `

>     > pat.uio.no
>     Server:  localhost
>     Address:  127.0.0.1

>     Non-authoritative answer:
>     Name:    pat.uio.no
>     Address:  129.240.2.50

> `

Zwróć uwagę na frazę ``Non-authoritative answer:`'. Oznacza, że tym razem named skorzystał ze swojej pamięci podręcznej i nie przeszukiwał sieci w poszukiwaniu odpowiedzi na twoje pytanie. Lecz informacja z pamięci podręcznej może być nieaktualna. Dlatetgo jesteś informowany o tym (pomijalnym) niebezpieczeństwie właśnie frazą ``Non-authoritative answer:`' (Odpwowiedź z nieautoryzowanego źródła). Jeśli `nslookup` w taki sposób odpowie na drugie zapytanie o ten sam komputer, jest to znak, że zapamiętuje odpowiedzi przychodzące z sieci, a to znaczy, że działa poprawnie. Aby zakończyć pracę z programem `nslookup` należy wydać polecenie `exit`.

Jeśli korzystasz z protokołów ppp, slip, zapoznaj się z rozdziałem FAQ<@@ref>autpo połączeniach modemowych, znajdziesz tam dla siebie kilka porad.

Teraz już wiesz jak skonfigurować podręczny serwer nazw (DNS). Polecam piwo, mleko lub inny ulubiony napój aby uczcić to wydarzenie.

## 4. Całkiem prosta domena.

Jak skonfigurować własną domenę.

## 4.1 Wpierw troche teorii.

Zanim naprawdę rozpoczniemy ten rozdział, mam zamiar przedstawić ci trochę teorii na temat pracy DNSu. A ty to przeczytasz, ponieważ jest to ci potrzebne. Jeśli ci się nie chce, powinieneś choć zapoznać się z nim powierzchownie. Możesz przestać, gdy dojdziesz do wyjaśnień, co należy umieścić w pliku `named.boot`.

DNS jest systemem hierarchicznym. Domena główna (najwyższego poziomu) jest oznaczana kropką ``.`' i nazywana `root'. W domenie . można znaleźć kilka "Domen najwyższego poziomu (TLD)" np. ORG, COM, EDU czy NET. Lecz jest ich znacznie więcej. Gdy chcesz znaleźć adres kompuera `prep.ai.mit.edu` twój serwer musi odnaleźć komputer obsługujący domenę edu. Zadaje pytanie serwerowi domeny `.` (serwery domeny `.` zna z pliku `root.cache`), otrzymuje listę serwerów obsługujących domenę edu. Oto mała ilustracja:

> `

>     $ nslookup
>     Default Server:  localhost
>     Address:  127.0.0.1

> `

rozpoczynamy od zapytania serwera domeny głównej

> `

>     > server c.root-servers.net.
>     Default Server:  c.root-servers.net
>     Address:  192.33.4.12

> `

Ustawiamy rodzj zapytania: rekordy NS (adresy serwrów DNS)

> `

>     > set q=ns

> `

pytamy się o domenę edu.

> `

>     > edu.

> `

Kropka po słowie edu ma znaczenie, informuje serwer, że pytamy się o edu, które jest bezpośrednio w domenie głównej, w ten sposób wyłączamy z przeszukiwania domeny podane w pliku `/etc/resolv.conf`.

> `

>     edu     nameserver = A.ROOT-SERVERS.NET
>     edu     nameserver = H.ROOT-SERVERS.NET
>     edu     nameserver = B.ROOT-SERVERS.NET
>     edu     nameserver = C.ROOT-SERVERS.NET
>     edu     nameserver = D.ROOT-SERVERS.NET
>     edu     nameserver = E.ROOT-SERVERS.NET
>     edu     nameserver = I.ROOT-SERVERS.NET
>     edu     nameserver = F.ROOT-SERVERS.NET
>     edu     nameserver = G.ROOT-SERVERS.NET
>     A.ROOT-SERVERS.NET      internet address = 198.41.0.4
>     H.ROOT-SERVERS.NET      internet address = 128.63.2.53
>     B.ROOT-SERVERS.NET      internet address = 128.9.0.107
>     C.ROOT-SERVERS.NET      internet address = 192.33.4.12
>     D.ROOT-SERVERS.NET      internet address = 128.8.10.90
>     E.ROOT-SERVERS.NET      internet address = 192.203.230.10
>     I.ROOT-SERVERS.NET      internet address = 192.36.148.17
>     F.ROOT-SERVERS.NET      internet address = 192.5.5.241
>     G.ROOT-SERVERS.NET      internet address = 192.112.36.4

> `

Otrzymaliśmy informacje, że domenę `edu` obsługują serwery `*.root-servers.net`, tak więc możemy kontynuować nasze pytanie kierując je nadal do serwera c.root-serwers.net. Teraz chcemy wiedzieć, kto obsługuje domenę następnego poziomu: `mit.edu.`:

> `

>     > mit.edu.
>     Server:  c.root-servers.net
>     Address:  192.33.4.12

>     Non-authoritative answer:
>     mit.edu nameserver = STRAWB.mit.edu
>     mit.edu nameserver = W20NS.mit.edu
>     mit.edu nameserver = BITSY.mit.edu

>     Authoritative answers can be found from:
>     STRAWB.mit.edu  internet address = 18.71.0.151
>     W20NS.mit.edu   internet address = 18.70.0.160
>     BITSY.mit.edu   internet address = 18.72.0.3

> `

`steawb`, `w20ns` i `bitsy` obsługują `mit`, wybierz jeden z nich i spytaj się o `ai.mit.edu`:

> `

>     > server W20NS.mit.edu.

> `

W nazwach kompyterów wielkość liter nie ma znaczenia, lecz ja do przenoszenia tekstu używam myszy, zapytanie ma taką samą formę jak poprzedzająca je odpowiedź.

> `

>     Server:  W20NS.mit.edu
>     Address:  18.70.0.160

>     > ai.mit.edu.
>     Server:  W20NS.mit.edu
>     Address:  18.70.0.160

>     Non-authoritative answer:
>     ai.mit.edu      nameserver = WHEATIES.AI.MIT.EDU
>     ai.mit.edu      nameserver = ALPHA-BITS.AI.MIT.EDU
>     ai.mit.edu      nameserver = GRAPE-NUTS.AI.MIT.EDU
>     ai.mit.edu      nameserver = TRIX.AI.MIT.EDU
>     ai.mit.edu      nameserver = MUESLI.AI.MIT.EDU

>     Authoritative answers can be found from:
>     AI.MIT.EDU      nameserver = WHEATIES.AI.MIT.EDU
>     AI.MIT.EDU      nameserver = ALPHA-BITS.AI.MIT.EDU
>     AI.MIT.EDU      nameserver = GRAPE-NUTS.AI.MIT.EDU
>     AI.MIT.EDU      nameserver = TRIX.AI.MIT.EDU
>     AI.MIT.EDU      nameserver = MUESLI.AI.MIT.EDU
>     WHEATIES.AI.MIT.EDU     internet address = 128.52.32.13
>     WHEATIES.AI.MIT.EDU     internet address = 128.52.35.13
>     ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.32.5
>     ALPHA-BITS.AI.MIT.EDU   internet address = 128.52.37.5
>     GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.32.4
>     GRAPE-NUTS.AI.MIT.EDU   internet address = 128.52.36.4
>     TRIX.AI.MIT.EDU internet address = 128.52.32.6
>     TRIX.AI.MIT.EDU internet address = 128.52.38.6
>     MUESLI.AI.MIT.EDU       internet address = 128.52.32.7
>     MUESLI.AI.MIT.EDU       internet address = 128.52.39.7

> `

Okazuje się, że `weaties.ai.mit.edu` jest serwerem nazw dla doemny `ai.mit.edu`:

> `

>     > server WHEATIES.AI.MIT.EDU.
>     Default Server:  WHEATIES.AI.MIT.EDU
>     Addresses:  128.52.32.13, 128.52.35.13

> `

Teraz zmieniam rodzaj zapytania. Znamy już nazwę serwera nazw dla interesującej nas domeny, spytamy sie o jakiekolwiek informacje jakie serwer posiada na temat `prep.ai.mit.edu`.

> `

>     > set q=any
>     > prep.ai.mit.edu.
>     Server:  WHEATIES.AI.MIT.EDU
>     Addresses:  128.52.32.13, 128.52.35.13

>     prep.ai.mit.edu CPU = dec/decstation-5000.25    OS = unix
>     prep.ai.mit.edu
>             inet address = 18.159.0.42, protocol = tcp
>              #21 #23 #25 #79
>     prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.edu
>     prep.ai.mit.edu internet address = 18.159.0.42
>     ai.mit.edu      nameserver = alpha-bits.ai.mit.edu
>     ai.mit.edu      nameserver = wheaties.ai.mit.edu
>     ai.mit.edu      nameserver = grape-nuts.ai.mit.edu
>     ai.mit.edu      nameserver = mini-wheats.ai.mit.edu
>     ai.mit.edu      nameserver = trix.ai.mit.edu
>     ai.mit.edu      nameserver = muesli.ai.mit.edu
>     ai.mit.edu      nameserver = count-chocula.ai.mit.edu
>     ai.mit.edu      nameserver = life.ai.mit.edu
>     ai.mit.edu      nameserver = mintaka.lcs.mit.edu
>     life.ai.mit.edu internet address = 128.52.32.80
>     alpha-bits.ai.mit.edu   internet address = 128.52.32.5
>     wheaties.ai.mit.edu     internet address = 128.52.35.13
>     wheaties.ai.mit.edu     internet address = 128.52.32.13
>     grape-nuts.ai.mit.edu   internet address = 128.52.36.4
>     grape-nuts.ai.mit.edu   internet address = 128.52.32.4
>     mini-wheats.ai.mit.edu  internet address = 128.52.32.11
>     mini-wheats.ai.mit.edu  internet address = 128.52.54.11
>     mintaka.lcs.mit.edu     internet address = 18.26.0.36

> `

Jak widać rozpoczynając od domeny głównej `.` znaleźliśmy kolejne serwery DNS. Gdybyśmy skorzystali z własnego serwera DNS, named zpamiętałby wszystkie informacje otrzymywane z sieci i nie musiałby przej jakiś czas pytać się serwerów, korzystając z przechowywanych informacji.

Mniej opisywaną lecz równie ważną domeną jest `in-addr.arpa`. Tak jak zwykłe domeny również posiada strukturę hierachiczną. `in-addr.arpa` pozwala na znalezienie nazwy komputera, jeśli tylko posiadamy jego adres IP. Należy tu zwrócić uwagę, że adres IP jest zapisywany w odwrotnej kolejności. Jeśli twój komputer posiada adres 192.128.52.43 named będzie się zachowywał tak samo jak w przykładzie poszukiwania informacji na temat komputera `prep.ai.mit.edu`: znajdź serwery domey `arpa.`, znajdź serwery `in-addr.arpa.`, znajdź serwery `192.in-addr.arpa.`, znajdź serwery 128.192.in-addr.arpa./, znajdź serwery 52.128.192.in-addr.arpa./, znjdź niezbędne rekordy dla `43.52.128.192.in-addr.arpa.`. Jasne, nie ?! (opowiedz 'tak'). Przez pierwsze dwa lata odwracanie kolejności częsci adresu IP sprawia małe kłopoty.

Właśnie skłamałem. DNS nie pracuje dokładnie w taki sposów jaki wam przed chwilą przedstawiłem. Lecz jest to bardzo dobre przbliżenie.

## 4.2 Nasza własna domena.

Teraz zdefiniujemy naszą własną domenę. Nazwijmy ją linux.bogus. Umieśćmy w niej jeden komputer. Specjalnie używam całkowicie bzdurną nazwę domeny, aby mieć pewność, że nie przeszkodzimy nikomu z Sieci.

Rozpoczęliśmy tę część dodając do `named.boot` wiersz:

    primary         0.0.127.in-addr.arpa            pz/127.0.0

Proszę zwrócić uwagę na brak kropki ``.`' kończącej nazwy domen. Pierwszy wiersz określa, że plik `pz/127.0.0` zawiera informacje definiujące domenę `0.0.127.in-addr.arpa`. Plik ten już został utworzony, wygląda następująco:

    @               IN      SOA     linux.bogus. hostmaster.linux.bogus. (
                                    1       ; Serial
                                    28800   ; Refresh
                                    7200    ; Retry
                                    604800  ; Expire
                                    86400)  ; Minimum TTL
                            NS      ns.linux.bogus.
    1                       PTR     localhost.

Proszę zwrócić uwagę na kropkę ``.`' kończącą pełne nazwy domen, w przeciwieństwie do omawianego wcześniej pliku `named.boot`. Niektórzy wolą rozpoczynać każdy plik strefy dyrektywą `$ORIGIN` lecz nie jest to konieczne. Pochodzenie (miejsce w hierarchi DNS, do którego przynależy) pliku strefy jest określone w kolumnie `domain' w pliku `named.boot`, w tym przypadku jest to `0.0.127.in-addr.arpa`.

Powyższy plik strefy zawiera trzy rekordy (RR): SOA RR, NS RR i PTR RR. SOA jest skrótem Start Of Authority. Znak `@' jest znakiem specjalnym określającym pochodzenie, a ponieważ kolumna `domain' odpowiadająca temu plikowi mówi 0.0.127.in-addr.arpa, dlatego pierwszy wiersz tak naprawdę ma postać:

> `

>       0.0.127.IN-ADDR.ARPA. IN      SOA ...

> `

NS to rekord serwera nazw. Wskazuje komputer, który jest serwerem nazw dla tej domeny. I na koniec rekord PTR mówi, że 1 (w pełnej formie 1.0.0.127.in-addr-arpa, tzn. 127.0.0.1) nosi nazwę localhost.

Rekord SOA stanowi nagłówek wszystkich plików stref, w każdym z plików powinien znajdować się dokładnie jeden rekord SOA, powinien to być pierwszy rekord w pliku. Opisuje on strefę, z której pochodzi (komputer o nazwie `linux.bogus`), kto jest odpowiedzialny za jej zawartość (`hostmaster@linux.bogus`), numer wersji pliku strefy (serial 1) oraz inne informacje, mające znaczenie dla pracy serwerów drugorzędnych. Jeśli dla pól refresh, retry, expire i minimum będziesz używał wartości jakie występują w tym dokumencie wszystko powinno działać poprawnie.

Rekord NS określna kto serwuje informacje DNS na temat `0.0.127.in-addr.arpa`, jest to `ns.linux.bogus`. Rekord PTR mówi nam, że `1.0.0.127.in-addr.arpa` (aka 127.0.0.1) jest znany pod nazwą `localhost`.

Teraz zrestartuj proces named (poleceniem `ndc restart`) i sprawdź poczynione zmiany programem nslookup:

> `

>     $ nslookup

>     Default Server:  localhost
>     Address:  127.0.0.1

>     > 127.0.0.1
>     Server:  localhost
>     Address:  127.0.0.1

>     Name:    localhost
>     Address:  127.0.0.1

> `

jak widać udało się pobrać informacje o `localhost` z komputera 127.0.0.1, to dobrze. Teraz nasze podstawowe zadanie, domena `linux.bogus`, dodaj do pliku `named.boot` wiersz definiujący nową domenę:

    primary               linux.bogus                     pz/linux.bogus

Zwróć uwagę na powtarząjący sie brak znaku ``.`' kończących nazwy domen w pliku `named.boot`.

In the linux.bogus zone file we'll put some totally bogus data:

    ;
    ; Plik strefy linux.bogus
    ;
    ; Obowiązkowy zestaw minimum potrzebny do prawidłowej definicje domeny
    ;
    @       IN      SOA     linux.bogus. hostmaster.linux.bogus. (
                            199511301       ; serial, todays date + todays serial #
                            28800           ; refresh, seconds
                            7200            ; retry, seconds
                            3600000         ; expire, seconds
                            86400 )         ; minimum, seconds
                    NS      ns.linux.bogus.
                    NS      ns.friend.bogus.
                    MX      10 mail.linux.bogus   ; Primary Mail Exchanger
                    MX      20 mail.friend.bogus. ; Secondary Mail Exchanger

    localhost       A       127.0.0.1
    ns              A       127.0.0.2
    mail            A       127.0.0.4

Należy zrócić uwagę na dwie rzeczy dotyczące rekordu SOA. ns.linux.bogus musi byc rekordem RR typu A, czyli nazwą komputera, która posiada przydzielony numer IP. Niedopuszczalne jest, aby nazwa uzywana w rekordzie SOA byla rekordem tymu CNAME. Sam komputer nie musi nosic nazwy 'ns', może to byc dowolna poprawna nazwa. hostamster.linux.bogus należy odczytać jako hostmaster@linux.bogus, musi to byc adres (lub alias do) osoby (lub osób) opiekujących się DNSem dla tej domeny (i czytajacyh regularnie tę pocztę). Wszelka korespondencja dotycząca tej domeny będzie wysyłana na ten adres, może to być dowolny adres e-mail, choć kązdy spodziewa się, że adres 'hostmaster' będzie również adresem kontaktowym domeny.

W powyższym pliku znalazł się rekord RR nowego typu, a mianowicie rekord MX, inaczej rekord Mail eXchanger. Dostarcza on systemowi pocztowemu informacji, dokąd wysyłać pocztę adresowaną `ktoś@linux.bogus`, w tym przypadku do `mail.linux.bogud` lub `mail.friend.bogus`. Liczba poprzedzająca nazwę komputera oznacza priorytet rekordu. System pocztowy powinien korzystać w pierwszej kolejności z rekordów o najmniejszym priorytecie (w naszym przypadku 10). Jeśli nie uda się dostarczyć poczty na ten adres, należy spróbować innego adresu, o wyższym priorytecie. W naszym przypadku byłby to `mail.friend.bogus`, który posiada priorytet 20.

Teraz trzeba zrestartowac program named wydając polecenie `ndc restart`. Rezultaty naszej pracy mozemy sprawdzić programem nslookup.

> `

>     $ nslookup
>     > set q=any
>     > linux.bogus
>     Server:  localhost
>     Address:  127.0.0.1

>     linux.bogus
>             origin = linux.bogus
>             mail addr = hostmaster.linux.bogus
>             serial = 199511301
>             refresh = 28800 (8 hours)
>             retry   = 7200 (2 hours)
>             expire  = 604800 (7 days)
>             minimum ttl = 86400 (1 day)
>     linux.bogus     nameserver = ns.linux.bogus
>     linux.bogus     nameserver = ns.friend.bogus
>     linux.bogus     preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
>     linux.bogus     preference = 20, mail exchanger = mail.friend.bogus
>     linux.bogus     nameserver = ns.linux.bogus
>     linux.bogus     nameserver = ns.friend.bogus
>     ns.linux.bogus  internet address = 127.0.0.2
>     mail.linux.bogus        internet address = 127.0.0.4

> `

Przypatrując się dokładnie widzimy, że popełniliśmy błąd. Wiersz

> `

>       linux.bogus     preference = 10, mail exchanger = mail.linux.bogus.linux.bogus

> `

jest niepoprawny. powinien wyglądać następująco:

> `

>       linux.bogus     preference = 10, mail exchanger = mail.linux.bogus

> `

Specjalnie popełniłem błąd, abyście mogli się na nim uczyć :-). Przyglądając się plikowi źródłowemu zauważamy, że w wierszu

> `

>     @               MX      10 mail.linux.bogus     ; Primary Mail Exchanger

> `

brakuje kropki. Lub inaczej mówiać ma zbyt wiele członów 'linux.bogus'. Gdy nazwa komputera występująca w pliku żródłowym strefy nie kończy się kropką, program na koniec dokleja 'origin' (pochodzenie, domenę definiowaną przez ten plik źródłowy). Dlatego nazwy komputerów należy podawać w sposób pełny, pilnując końcowej kropki

    @               MX      10 mail.linux.bogus.    ; Primary Mail Exchanger

lub uproszczony

    @               MX      10 mail                 ; Primary Mail Exchanger

Oba sposoby są poprawne. Osobiście preferuje drugą metodę, mniej pisania. W pliku strefy domena powinna być podana w całości, razem z kończącą ją kropką (`.`) lub w ogole nie powinna być podawana. W takim przypadku domyślnie przyjmuje się tzw. origin. Muszę podkreślić, że nazwy domen w pliku `named.boot` nie powinny się kończyć kropką. Nie macie pojęcia, jak wiele razy nadmierna liczba kropek, lub ich brak spowodowała zamieszanie i ogłupiła mnóstwo ludzi.

Skoro już powiedziłąem co miałęm do powiedzenia, poniżej przedstawiam nowy źródłowy plik strefy z nowymi, dodatkowymi informacjami:

    ;
    ; Plik strefy dla linux.bogus
    ;
    ; Obowiązkowy zestaw minimum potrzebny do prawidłowej definicje domeny
    ;
    @       IN      SOA     linux.bogus. hostmaster.linux.bogus. (
                            199511301       ; serial, todays date + todays serial #
                            28800           ; refresh, seconds
                            7200            ; retry, seconds
                            604800          ; expire, seconds
                            86400 )         ; minimum, seconds

                    NS      ns              ; Inet Address of name server
                    NS      ns.friend.bogus.
                    MX      10 mail         ; Primary Mail Exchanger
                    MX      20 mail.friend.bogus. ; Secondary Mail Exchanger

    localhost       A       127.0.0.1
    ns              A       127.0.0.2
    mail            A       127.0.0.4
    ;
    ; Extras
    ;
    @               TXT     "Linux.Bogus, your DNS consultants"

    ns              MX      10 mail
                    MX      20 mail.friend.bogus.
                    HINFO   "Pentium" "Linux 1.2"
                    TXT     "RMS"
    richard         CNAME   ns
    www             CNAME   ns

    donald          A       127.0.0.3
                    MX      10 mail
                    MX      20 mail.friend.bogus.
                    HINFO   "i486"  "Linux 1.2"
                    TXT     "DEK"

    mail            MX      10 mail
                    MX      20 mail.friend.bogus.
                    HINFO   "386sx" "Linux 1.0.9"

    ftp             A       127.0.0.5
                    MX      10 mail
                    MX      20 mail.friend.bogus.
                    HINFO   "P6" "Linux 1.3.59"

Moglibyście chcieć przesując pierwsze trzy rekordy A, tak aby sąsiadowały z innymi rekordami tego typu, zamiast siedzieć na początku listy.

W powyższym przykładzie pojawiły się rekordy nowego typu: HINFO (Host INFOrmation) składa się z dwóch częsci, dobrym zwyczajem jest umiesczenie obu w cudzysłowach. Pierwsza część określa hardware, lub procesor komputera, druga oprogramowanie lub pracujący na nim system operacyjny. Komputer ns to Pentium, pracujące pod Linuxem 1.2. Rekord TXT może zawierać dowolny tekst. Można go wykorzystywać do różnych celów. CNAME (Cannonical NAME) to sposób na nadanie wielu nazw jednemu komputerowi. Tak więc richard i www są aliasami komputera ns. To ważne aby pamiętać, że rekordy A, MX, CNAME i SOA nigdy nie powinny wskazywać na rekord CNAME. Zawsze powinny wsazywać na rekord A. Dlatego ta forma jest niepoprawna

    foobar  CNAME   richard                 ; NO!

i powinna zostać zastąpiona przez

    foobar  CNAME   ns                      ; Yes!

Równie ważne jest pamiętanie, że rekord CNAME nie jest poprawną nazwą, którą można stosować w adresach e-mail. Nawiązując do poprzedniego przykładu, adres wmail `webmaster@www.linux.bogus` nie jest niepoprawny. Możesz oczekiwać, że całkiem spora liczba administratorów pocztowych Stamtąd będzie wymagała popdorządkowania się tej regule pomimo, że w twoim przypadku wszystko może działać poprawnie. Sposobem na uniknięcie kłopotów jest stosowanie rekordów A (i być może również innych, np. rekordów MX):

    www     A       127.0.0.2

Paul Vixie, największy z wizardów programu named, sugeruje aby nie korzystać z rekordów CNAME. Dlatego bardzo poważnie zastanów się nad ograniczeniem uzywania rekordów CNAME.

Załaduj nową wersję bazy wydając polecenie `ndc reload`, wymusi ona na procesie ponowne odczytanie plików konfiguracyjnych.

> `

>     $ nslookup
>     Default Server:  localhost
>     Address:  127.0.0.1

>     > ls -d linux.bogus

> `

Powyższe polecenie spowoduje przedstawienie wszystkich rekordów.

> `

>     [localhost]
>      linux.bogus.                   SOA   linux.bogus hostmaster.linux.bogus. (1995
>     11301 28800 7200 604800 86400)
>      linux.bogus.                   NS    ns.linux.bogus
>      linux.bogus.                   NS    ns.friend.bogus
>      linux.bogus.                   MX    10   mail.linux.bogus
>      linux.bogus.                   MX    20   mail.friend.bogus
>      linux.bogus.                   TXT   "Linux.Bogus, your DNS consultants"
>      localhost                      A     127.0.0.1
>      mail                           A     127.0.0.4
>      mail                           MX    10   mail.linux.bogus
>      mail                           MX    20   mail.friend.bogus
>      mail                           HINFO 386sx       Linux 1.0.9
>      donald                         A     127.0.0.3
>      donald                         MX    10   mail.linux.bogus
>      donald                         MX    20   mail.friend.bogus
>      donald                         HINFO i486        Linux 1.2
>      donald                         TXT   "DEK"
>      www                            CNAME ns.linux.bogus
>      richard                        CNAME ns.linux.bogus
>      ftp                            A     127.0.0.5
>      ftp                            MX    10   mail.linux.bogus
>      ftp                            MX    20   mail.friend.bogus
>      ftp                            HINFO P6          Linux 1.3.59
>      ns                             A     127.0.0.2
>      ns                             MX    10   mail.linux.bogus
>      ns                             MX    20   mail.friend.bogus
>      ns                             HINFO Pentium     Linux 1.2
>      ns                             TXT   "RMS"
>      linux.bogus.                   SOA   linux.bogus hostmaster.linux.bogus. (1995
>     11301 28800 7200 604800 86400)

> `

Jest dobrze. Zobaczmy jaką odpowiedź otrymamy pytając się wyłącznie o komputer www:

> `

>     > set q=any
>     > www.linux.bogus.
>     Server:  localhost
>     Address:  127.0.0.1

>     www.linux.bogus canonical name = ns.linux.bogus

> `

... Innymi słowy, prawdziwa nazwa komputera `www.linux.bogus` to `ns.linux.bogus`.

> `

>     linux.bogus     nameserver = ns.linux.bogus
>     linux.bogus     nameserver = ns.friend.bogus
>     ns.linux.bogus  internet address = 127.0.0.2

> `

a ns.linux.bogus ma adres 127.0.0.2. To również wygląda poprawnie.

## 4.3 Co dalej.

Oczywiście powyższa domena jest nierzeczywista, jak również adresy IP podane w przykładzie, co może utrudniać zrozumienie. Przykład przwdziwej domeny znjdziecie w następnym rozdziale.

## 5. Przykład, prawdziwa domena.

Skąd wziąć pliki prawdziwej domeny.

UZytkownicy zwrócili mi uwagę, że powinienem dołączyć przykład plików definiujących prawdziwą domene, ponieważ różnica pomiędzy domeną przykładową i prawdziwą nie była do ońca jasna.

Jedna uwaga dotycząca tego przykładu: nie wprowadzajcie tych plików do swoich serwerów DNS! Przedstawione pliki służą jedynie jako punkt odniesienia. Jeśli chcesz eksperymentować, wykorzystaj domenę przykładową linux.bogus. Korzystam z tego przykładau za pozwoleniem Davida Bullocka z LAND-5. Prezentowane informacje były aktualne 14 sierpnia 1196 roku, i mogą się róznić od aktualnych. Należy ciągle pamiętać o uwagach na temat wiodących odstępów w plikach przykładowych.

## 5.1 /etc/named.boto (lub /var/named/named.boot)

Oto dwa wiersze potrzebne d ozdefiniowania dwóch stref (domen) odwrotnych.: siec 127.0.0 oraz siec LAND-5 o numerach 206.6.177. Oraz wiersz deklarujący, że nasz serwer jest serwerem podstawowym domeny land-5.com. Proszę zauważyc, że zamiast umieszczania plików z danymi w sugerowanym wcześcniej przeze mnie katalogu `pz`, tutaj pliki są umieszczane w katalogu `zone`.

    ;  Boot file for LAND-5 name server
    ;
    directory /var/named
    ;
    ; type          domain                          source file or host
    cache           .                               root.cache
    primary         0.0.127.in-addr.arpa            zone/127.0.0
    primary         177.6.206.in-addr.arpa          zone/206.6.177
    primary         land-5.com                      zone/land-5.com

## 5.2 /var/named/root.cache

Proszę pamiętać, że ten plik się zmienia, i ten przedstawiony tutaj jest już stary. Lepiej skorzystaj z tego, genrowanego programem dig.

    ; <<>> DiG 2.1 <<>>
    ;; res options: init recurs defnam dnsrch
    ;; got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6
    ;; flags: qr rd ra; Ques: 1, Ans: 9, Auth: 0, Addit: 9
    ;; QUESTIONS:
    ;;      ., type = NS, class = IN

    ;; ANSWERS:
     .       518357  NS      H.ROOT-SERVERS.NET.
     .       518357  NS      B.ROOT-SERVERS.NET.
     .       518357  NS      C.ROOT-SERVERS.NET.
     .       518357  NS      D.ROOT-SERVERS.NET.
     .       518357  NS      E.ROOT-SERVERS.NET.
     .       518357  NS      I.ROOT-SERVERS.NET.
     .       518357  NS      F.ROOT-SERVERS.NET.
     .       518357  NS      G.ROOT-SERVERS.NET.
     .       518357  NS      A.ROOT-SERVERS.NET.

    ;; ADDITIONAL RECORDS:
    H.ROOT-SERVERS.NET.     165593  A       128.63.2.53
    B.ROOT-SERVERS.NET.     165593  A       128.9.0.107
    C.ROOT-SERVERS.NET.     222766  A       192.33.4.12
    D.ROOT-SERVERS.NET.     165593  A       128.8.10.90
    E.ROOT-SERVERS.NET.     165593  A       192.203.230.10
    I.ROOT-SERVERS.NET.     165593  A       192.36.148.17
    F.ROOT-SERVERS.NET.     299616  A       192.5.5.241
    G.ROOT-SERVERS.NET.     165593  A       192.112.36.4
    A.ROOT-SERVERS.NET.     165593  A       198.41.0.4

    ;; Total query time: 250 msec
    ;; FROM: land-5 to SERVER: default -- 127.0.0.1
    ;; WHEN: Fri Sep 20 10:11:22 1996
    ;; MSG SIZE  sent: 17  rcvd: 312

## 5.3 /var/named/zone/127.0.0

Tylko podstawowe rekordy, obowiązkowo rekord SOA, rekord odwzorujący 127.0.0.1 na `localhost`. Oba są konieczne. Nic więcej w tym pliku nie jest potrzebne.PRzwdopodobnie nigdy już nie powinny byćmodyfikowane, cgyba, że zmieni się adres serwera DNS lub adres email uzywany w rekordzie SOA.

    @               IN      SOA     land-5.com. root.land-5.com. (
                                    199609203       ; Serial
                                    28800   ; Refresh
                                    7200    ; Retry
                                    604800  ; Expire
                                    86400)  ; Minimum TTL
                            NS      land-5.com.

    1                       PTR     localhost.

## 5.4 /var/named/zone/land-5.com

Tutaj możemy zobaczyć obowiązkowy rekord SOA, potrzebne rekordy NS. Widzimy, że drugorzędny serwer DNS to ns1.psi.net. Jest tak, jak być powinno, zawsze musi być drugi, zapasowy serwer DNS umieszczony poza twoją siecią. Widzimy również, że komputergem głównym jest land-5, serwujący rózne usługi do których kierują odpowiednie rekorddy CNAME (alternatywa jest używanie rekordów A).

Patrząc na rekord SOA widzimy, że ta strefa(domena) dns pochodzi z komutera land-5.com. W sprawach związanyc hz tą domeną należy kontaktować się z `root@land-5.com`. `hostmaster` to inny, często używany w takich przypadkach adres e-mail. Numer seryjny w powszechnie przyjętym formacie rrrrmmdd z dodaną liczbą zmian danego dnia wskazuje, że jest to prawdopodobnie szósta wersja tego pliku w dniu 20. września 1996. Pamiętaj, że numer seryjny musi monotonicznie rosnąć. W tym przypadku pozostawiono jedna cyfrę jalo kicznik zmian jednego dnia. Po wykonaniu dziewięciu poprawek, następną mozna wykonac dopiero następnego dnia. Dlatego rozważ stosowanie dwóch pozycji do oznaczania liczby modyfikacji jednego dnia.

    @       IN      SOA     land-5.com. root.land-5.com. (
                            199609206       ; serial, todays date + todays serial #
                            10800           ; refresh, seconds
                            7200            ; retry, seconds
                            10800           ; expire, seconds
                            86400 )         ; minimum, seconds
                    NS      land-5.com.
                    NS      ns2.psi.net.
                    MX      10 land-5.com.  ; Primary Mail Exchanger

    localhost       A       127.0.0.1

    router          A       206.6.177.1

    land-5.com.     A       206.6.177.2
    ns              CNAME   land-5.com.
    ftp             CNAME   land-5.com.
    www             CNAME   land-5.com.
    mail            CNAME   land-5.com.
    news            CNAME   land-5.com.

    funn            A       206.6.177.3
    illusions       CNAME   funn.land-5.com.
    @               TXT     "LAND-5 Corporation"

    ;
    ;       Workstations
    ;
    ws_177200       A       206.6.177.200
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177201       A       206.6.177.201
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177202       A       206.6.177.202
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177203       A       206.6.177.203
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177204       A       206.6.177.204
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177205       A       206.6.177.205
                    MX      10 land-5.com.   ; Primary Mail Host
    ; {Many repetitive definitions deleted - SNIP}
    ws_177250       A       206.6.177.250
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177251       A       206.6.177.251
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177252       A       206.6.177.252
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177253       A       206.6.177.253
                    MX      10 land-5.com.   ; Primary Mail Host
    ws_177254       A       206.6.177.254
                    MX      10 land-5.com.   ; Primary Mail Host

Można jeszcze zwrócić uwagę na to, że stacje robocze nie posiadają indywidualnych nazw, lecz raczej prefix po którym następuje dwuczłonowy fragmnet adresu IP. Korzystanie z takiej konwencji może znacznie ułatwić opiekę nad DNSem, lecz nie jest przez wszystkich najmilej widziane.

## 5.5 /var/named/zone/206.6.177

Komentarz później.

    @               IN      SOA     land-5.com. root.land-5.com. (
                                    199609206       ; Serial
                                    28800   ; Refresh
                                    7200    ; Retry
                                    604800  ; Expire
                                    86400)  ; Minimum TTL
                            NS      land-5.com.
                            NS      ns2.psi.net.
    ;
    ;       Servers
    ;
    1       PTR     router.land-5.com.
    2       PTR     land-5.com.
    3       PTR     funn.land-5.com.
    ;
    ;       Workstations
    ;
    200     PTR     ws_177200.land-5.com.
    201     PTR     ws_177201.land-5.com.
    202     PTR     ws_177202.land-5.com.
    203     PTR     ws_177203.land-5.com.
    204     PTR     ws_177204.land-5.com.
    205     PTR     ws_177205.land-5.com.
    ; {Many repetitive definitions deleted - SNIP}
    250     PTR     ws_177250.land-5.com.
    251     PTR     ws_177251.land-5.com.
    252     PTR     ws_177252.land-5.com.
    253     PTR     ws_177253.land-5.com.
    254     PTR     ws_177254.land-5.com.

definicja domeny odwrotnej powoduje zwykle najwięcej kłopotów. Służy do znajdywania nazwy komputera, znając jego adres IP. Przykład: Posiadasz serwer IRC i przyjmujesz połączenia od klientów. Jednakże jako serwer Norweski chcesz jedynie zezwalać na połączenia komputerów norweskich lub skandynawskich. Po nawiązaniu połączenia procedury biblioteki C są w stanie ustalić spod jakiego adresu IP zostało nawiązane nowe połączenie, ponieważ adres IP zdalnego komputera jest przekazywany w pakietach danych przesyłanych siecią. Teraz możesz skorzystać z funkcji gethostbyaddr, która znajduje nazwę odpowiadającą podanemu adresowi IP. Gethostbyaddr zapyta serwer DNS, który z kolei dokona całego wyszukania. Zakładając, że klient połączył się z komputera ws_177200.land-5.com, adres IP przekazany przez proceduty biblioteki lib C do serwera DNS będzie brzmiał: 206.6.177.200. Aby dowiedzieć się jaka nazwa odpowiada temu adresowi musimy znależć wartość rekordu 100.177.6.206.in-addr.arpa. Serwer DNS wpierw znajdzei serwery domane arpa, in-addr.arpa, 206.in-addr.arpa, 6.206.in-addr.arpa dochodząc do serwera 177.6.206.in-addr.arpa w land-5. Ostatecznie otrzyma stamtąd odpowiedź, że dla 200.177.6.206.in-addr.arpa istnieje rekord PTR o wartości ws_177200.land-5.com, co znaczy, że adresowi 206.6.177.200 odpowiada nazwa ws_177200.land-5.com. Podobnie jak w przypadku wyjaśnien odszukiwania adresu dla nazwy prep.ai.mit.edu, powuższe wyjaśnienie trochę mija się z rzeczywistością.

Powracając do przykładu IRC. Serwer IRC akceptuje połączenia pochodzące z krajów skandynawskich, tzn. *.no, *.se, *.dk. Nazwa ws_177200.land-5.com nie pasuje do żadnego z powyższych wzorców i serwer odmówi połączenia. Gdyby nie istniało odwzorowanie odwrotne adresu 206.6.177.200 poprzez strefę in-addr.arpa, wtedy serwer nie miałby możliwości znalezienia nazwy łączącego się komputera a porównywanie adresów ip z wzorcami domen, nigdy nie przynosiłoby poprawnych rezultatów.

Niektórzy twierdzą, żę odwrotne odwzorowanie adresów IP jest ważne jedynie dla serwerów, lub nie jest ważne w ogóle. Nie do końca: wiele serwerów ftp, news, irc, a nawet niektóre serwery http (WWW) nie zezwolą na połączenia z komputerów, których adresy nie są zarejestrowane w domenie odwrotnej. Dlatego faktem jest, że rejestracja w domenie odwrotnej jest konieczna.

## 6. Utrzymanie i konserwacja

Utrzymywanie w pracy ciągłej.

Prócz pilnowania aby proces named byl zawsze katywny pozostaje jedynie pilnowanie, aby plik `root.cache` był zawsze aktualny. Najprostszą metodą jest skorzystanie z programu `dig`, wpierw należy go uruchomić bez żadnych argumentóww, otrzymamy plik `root.cache` uzywany przez nasz serwer. Następnie należy o to samo zapytać jeden z głównych serwerów DNS (root servers) wydając polecenie `dig @rootserver`. Zauważysz, że wynik tego polecenia bardzo przypomina plik `root.cache` z dokładnością do kilku liczb. Te liczby nie mogą uczynić nam żadnej szkody. Zapisz wynik polecenia do pliku (`dig @e.root-servers.net >root.cache.new`), a następnie zastąp nim stary plik `root.cache`.

Pamiętaj, aby po zamianie pliku `root.cache` zrestartować proces named.

Al Longyear przysłał mi poniższy skrypt, który można uruchamić i automatycznie uaktualniac plik `root.cache`. Zainstaluj go w crontabie i zpomnij. Niniejszy skrypt zakłada, że na twoim komputerze działa system poczty elektornicznej i istnieje alias pocztowy `hostmaster`. Przed uruchomieniem powinienes go dostosować so swoich ustawien.

    #!/bin/sh
    # polish translation piotr.pogorzelski@ippt.gov.pl 1997
    # Uaktualnianie informacji o głównych serwerach DNS.
    # Ten skrypt powinien byc uruchamiany automatycznie raz w miesiacu
    # przez program cron.
    #
    (
     echo "To: hostmaster <hostmaster>"
     echo "From: system <root>"
     echo "Subject: Automatyczne uaktualnienie pliku named.cache"
     echo

     export PATH=/sbin:/usr/sbin:/bin:/usr/bin:
     cd /var/named

     dig  @rs.internic.net . ns >named.cache.new

     echo "Plik named.cache zostal uwaktualniony i zawiera teraz następujące informacje:"
     echo
     cat named.boot.new

     chown root.root named.cache.new
     chmod 444 named.cache.new
     rm -f named.cache.old
     mv named.cache named.cache.old
     mv named.cache.new named.cache
     ndc restart
     echo
     echo "Program serwera DNS został uruchomiony na nowo, aby zapewnić korzystanie z nowych informacji."
    "
     echo "Stary plik został zachowany jako named.cache.old"
    /var/named/named.cache.old."
    ) 2>&1 | /usr/lib/sendmail -t
    exit 0

Niektórzy z was mogłi zauważyć, że root.cahce jest również dostępny w Internicu przez ftp. Proszę nie korzystajcie z ftp aby uaktualnić plik root.cache, przedstawiona powyżej metoda jest bardziej przyjazna sieci.

## 7. Automatyczna konfiguracja połączeń modemowych.

W tym rozdziale wyjaśnię w jaki sposób skonfigurowałem swój system, aby automatyzować wszsytkei zadania. Moj sposób rozwiązania problemu może zupełnie nie nadawać się do twojej konfiguracji, lecz zawsze możesz skorzystać z pomysłów. Poza tym ja korzystam z ppp, wiele osób używa slip lub cslip, tak więc niemal wszystkie szczegóły twojej konfiguracji mogą różnić się od mojej. Lecz program `dip` używany do obsługi połączeń slip powinien być w stanie zrealizować wiele pomysłów, z których korzystam.

Zwykle, gdy nie jestem przyłączony do sieci, moj plik `resolv.conf` zawiera po prostu wiersz

> `

>     domain uio.no

> `

Taka konfiguracja zapewnia, że nie muszę czekać na gdy procedury biblioteki odpowiedzialne za rozwiązywanie nazw bedą staraly się nawiazac połączenia z zewnętrznymi serwerami DNS. Lecz gdy jestem połączony chce posiadać uruchomiony proces named, a plik `resolv.conf` powinien zawierac informacje niezbędne do poprawnej pracy DNSu. Rozwiązałem ten problem tworząc dwa wzorce pliku `resolv.conf`, `resolv.conf.local` i `resolv.conf.connected`. Ten ostatni wygląda jak opisywany wcześniej `resolv.conf`.

Aby połączyć się z siecią uruchamiam skrypt o nazwie 'ppp-on':

    #!/bin/sh
    echo calling...
    pppd

pakiet pppd posiada plik o nazwie `options`, w którym deklaruje się szczególy dotyczące sposobu nawiązywania połączeń. Tuż po zestawieniu połączenia PPP, pppd uruchamia skrypt o nazwie `ip-up` (jest to dokładnie opisane na stronie podręcznika programu pppd). Oto fragment powyższego skryptu:

    #!/bin/sh
    interface="$1"
    device="$2"
    speed="$3"
    myip="$4"
    upip="$5"
     ...
    cp -v /etc/resolv.conf.connected /etc/resolv.conf
     ...
    /usr/sbin/named

To znaczy uruchom named. Kiedy PPP jest rozłączanie, pppd uruchamia skrypt `ip-down`:

    #!/bin/sh
    cp /etc/resolv.conf.local /etc/resolv.conf
    read namedpid </var/run/named.pid
    kill $namedpid

W ten sposób named jest uruchamiany po nawiazaniu połączenia i zabijany po jego rozłączeniu.

Niektóre programy, irc lub talk, przyjmują zbyt wiele założeń dlatego aby talk i udogodnienie dcc w irc działały poprawnie trzeba również poprawić plik hosts. Do swojego skryptu `if-up` dodałem polecenia:

    cp /etc/hosts.ppp /etc/hosts
    echo $myip      roke >>/etc/hosts

`hosts.ppp` zawiera po prostu

    127.0.0.1       localhost

,a polecenie echo dodaje numer ip, ktory otrzymalem dla mojego komputera (roke). Zamiast tego powinieneś użyć nazwy komputera, którą sam używasz. Możesz ją poznaćwykonując polecenie `hostname`.

Uruchamianie demona named gdy nie jest się przyłączonym do sieci prawdopodobnie nie jest najlepszym rozwiazaniem. Dlatego, że named będzie starał się wysłać zapytania, a ponieważ posiada dlugi czas oczekiwania, każdy program, który będzie próbował rozwiązać nazwę korzystając z dńśu będzie musiał równie długo oczekiwać na odpowiedź, która i tak nigdy nie nadejdzie. Jeśli przyłączasz się do Internetu przez łącze dzwonione, powinieneś uruchamiac named tuz po zestawieniu łącza i zabijać go w momencie rozłączenia. Dodatkowe wskazówki w tym temacie znajdziesz w rozdziale FAQ.

Niektórzy z pracujacych na wolnych łączach lubią korzystać z dyrektywy forwarders. Jeśli twój dostawca internetu posiada serwery DNS o adresach 1.2.3.4 i 1.2.3.5, możesz do pliku `named.boot` dodać wiersz

    forwarders 1.2.3.4 1.2.3.5

Plik `named.cache` powinien pozostać pusty. W ten sposób zmiejszysz ruch generowany przez twój komputer i prawdopodobnie wszystko zacznie działać szybciej. Jest to szczególnie ważne, gdy płacisz za przesłane bajty. Dodatkowa zaleta tego rozwiązania polega na tym, że pozwala pozbyć się obowiązku opieki i nadzorowania oprogramowania DNS, ponieważ pusty plik `named.cache` nie wymaga odświerzania.

## 8. FAQ

W tym rozdziale przedstawię kilka z najczęściej zadawanych pytań dotyczących DNSu i tego dokumentu. Prócz pytań będą również odpowiedzi, przeczytaj dokładnie ten rozdział, zanim zdecydujesz się wysłać do mnie list.

1. Jak korzystać z DNS w sieci chronionej firewallem?

   Kilka wskazówek: `forwarders',`slave', zapoznaćsię z literaturą prezentowaną na końcu.

2. W jaki sposób zmusic DNS do rotacyjnego przekazywania adresu z puli adresów danej usługi, powiedzmy www.bardzo.zajety.serwer, w celu osiągnięcia równomiernego rozłożenia obciążenia na kilka serwerów.

   Nazwa www.bardzo.zajęty.serwer musi posiadać kilka rekordów A. bind 4.9.3 i nowszy przekazuje kolejne adresy z puli. Takie rozwiązanie nie zadziała ze starszymi wersjami binda.

3. Chcę uruchomić DNS w zakmniętej sieci Intranetu. Co mam zrobić?

   Pomiń root.cahce, zajmij się jedynie plikami stref/domen. To znaczy, ze niu musisz już pilnować aby root.cache był aktualny.

4. W moim systemie nie ma programu ndc. Co mam zrobić?

   To znaczy, że w twoim komputerze jest zainstalowany stary, trochę przestarzały program bind. Jeśli bezopieczeństwo sieci jest dla ciebie ważne, natychmiast zainstaluj najnowszą wersję binda. Jeśli nie, możesz pracować dalej tak jak jest. Tylko zamiast uruchamiac `ndc start` muszisz wydać poleceni `named`. `ndc reload` to `named.reload`, a `ndc restart` to `named.restart`. Większość tych programów znajduje się w `/usr/sbin`.

5. Jak soknfigurować drugorzędny serwer domeny?

   Jeśłi serwer podstawowy posiada adres 127.0.0.1, to do pliku `named.boot` musisz dodac wiersz:

         secondary     linux.bogus             127.0.0.1       sz/linux.bogus

6. Chciałbym aby named działał nawet wtedy, gdy nie ejstem przyłączony do internetu.

   Ian Clark przesłał mi następującą wiadomość, w której wyjaśnia jak to zrobić:

   > `

   >     Moj named działa na komputerze. ktory robi 'Masquerade'. Posiadam dwa
   >     pliki root.cache, jeden root.cache.real zawierający prawdziwe adresy
   >     serwerów głównych i drugi root.cache.fake zawierający ...

   >     --------------
   >     ; root.cache.fake
   >     ; this file contains no information
   >     --------------

   >     Po rozłączeniu kopiuje root.cache.fake na root.cache i restartuje
   >     named.

   >     Po podłączeniu, kopiuje root.cache.real na root.cache i restartuje
   >     named.

   >     Jest to robione automatycznie w skryptach, odpowiednio ip-down i
   >     ip-up.

   >     Przy pierwszym zapytaniu w trybie off-line, serwer nie posiada
   >     wszystkich niezbędnych informacji i raportuje t ow syslogu, ale jakoś
   >     mogę z tym żyć:

   >     Jan 28 20:10:11 hazchem named[10147]: No root nameserver for class IN

   >     U mnie ten schemat działa poprwnie.Mogę korzystać z nameserwera na
   >     komputerach lokalnych bez dodatkowych czasów oczekiwania na połączenie
   >     z nieosiągalnymi serwerami zewnętrzymi w trybie off-line i poprawnie
   >     działającym DNSem w trybie on-line.

   > `

7. Gdzie serwer podręczny przechowuje zgromadzone w czasie pracy informacje? Czy jest jakaś metoda sterowania rozmiarem tych zasobów?

   Wszelkie pośrednie informacje są gromadzone w pamięci, nigdy nie są zachowywane na dysku. Za każdym razem, kedy named konćzy prace, inforamacje przechowywane w pamięci podręcznej są gubione. Administrator nie ma żadnej kontroli nad pamięcią podręczną, ani nad jej rozmiarem (najnowsze wersje pozwalaja sterowac rozmiarem pamieci cache [pp]). Możesz to naprawic "modyfikując" named. Nie jest to jednak zalecane.

8. Czy named między kolejnymi uruchomieniami zachowuje pamięc podręczną na dysku? Czy mogę go do tego zmusic?

   Nie, named nie zachowuje pamięci podręcznej na dysk w momencie zakończenia pracy. To znaczy, że informacje w pamięc podręczna muszą być odtwarzne od początku po każdym zrestartowaniu programu. Możesz to naprawic "modyfikując" named. Nie jest to jednak zalecane.

## 9. Jak zostać pełno etatowym administratorem DNSu.

Dokumnetacja i narzędzia.

Istnieje prwdziwa dokumentacja. Drukowana i OnLine. Aby stać się prawdziwym administratorem DNS należy przeczytać kilkanaście pozycji. Jeśli ktoś preferuje papier polecam DNS and BIND by C. Liu and P. Albitz from O'Reilly & Associates, Sebastopol, CA, ISBN 0-937175-82-X. Czytałem, jest doskonała. Rozdział poświęcony DNSowi można znaleźć w TCP/IP Network Administration, by Craig Hunt from O'Reilly..., ISBN 0-937175-82-X. Dobry administrator DNS (lub jakikolwiek) musi również przeczytać Zen and the Art of Motorcycle Maintenance by Robert M. Prisig :-) Dostępne jako ISBN 0688052304 oraz inne pozycje.

ONLine dostępne są na przykład takie pozycje: http://www.dns.net/dnsrd/, http://www.vix.com/isc/bind.html; FAQ, podręcznik (BOG; Bind Operations Guide) jak również dokumenty opisujące protokoły i chwyty dotyczące DNSu. Większości z tego nie przeczytałem, dlatego nie jestem pełnoetatowym administratorem DNS. Z drugiej strony Arnt Gulbrandsen przeczytał BOG i jest nim zachwycony. Grupa nowinkowa comp.protocols.tcp-ip.domains jest poświęcona DNSowi. I na koniec wiele dokumentów RFC dotyczy DNSu. Prawdopodobnie najważniejsze z nich to:

RFC 2052

  A. Gulbrandsen, P. Vixie, A DNS RR for specifying the location of services (DNS SRV), October 1996

RFC 1918

  Y. Rekhter, R. Moskowitz, D. Karrenberg, G. de Groot, E. Lear, Address Allocation for Private Internets, 02/29/1996.

RFC 1912

  D. Barr, Common DNS Operational and Configuration Errors, 02/28/1996.

RFC 1713

  A. Romao, Tools for DNS debugging, 11/03/1994.

RFC 1712

  C. Farrell, M. Schulze, S. Pleitner, D. Baldoni, DNS Encoding of Geographical Location, 11/01/1994.

RFC 1183

  R. Ullmann, P. Mockapetris, L. Mamakos, C. Everhart, New DNS RR Definitions, 10/08/1990.

RFC 1035

  P. Mockapetris, Domain names - implementation and specification, 11/01/1987.

RFC 1034

  P. Mockapetris, Domain names - concepts and facilities, 11/01/1987.

RFC 1033

  M. Lottor, Domain administrators operations guide, 11/01/1987.

RFC 1032

  M. Stahl, Domain administrators guide, 11/01/1987.

RFC 974

  C. Partridge, Mail routing and the domain system, 01/01/1986.

## 10. Od tłumacza

Zdaje sobie sprawę, że niniejsze tłumaczenie zawiera mnóstwo błędów. Niestety nie jestem w stanie dokładnie sprawdzić całego dokumentu i świadomie pozostawiam tę pracę czytelnikowi. Będę wdzięczny za wszelkie uwagi na temat tego dokumentu, wytykanie błędów, literówek, składni i wszelkie inne, które mogą przyczynić się do jego ulepszenia.

Wszelkie tego typu uwagi proszę przesyłać na adres piotr.pogorzelski@ippt.gov.pl

Inne przetłumaczone dokumenty można znaleźć na stronie http://www.jtz.org.pl/. Zapraszamy!.

piotr.pogorzelski@ippt.gov.pl.