DNSHOWTO





DNS HOWTO


DNS HOWTO

Autor: Nicolai Langfeldt
janl@math.uio.no
v2.0.6, 22 Lipca 1998
Wersja polska: Leszek Urbański
tygrys@fidonet.org.pl
v2.1, 4 Sierpnia 1998

Jak zostać małoetatowym administratorem DNS. Dokument ten został napisany
w standardzie ISO-8859-2. Oryginał tego dokumentu znajduje się pod adresem
ftp.icm.edu.pl/pub/Linux/sunsite/docs/HOWTO/.

1. Preambuła


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



1.1 Legalność


(C)opyright 1995 Nicolai Langfeldt. Nie zmieniać bez zachowania praw
autorskich. Dokument ten może być dowolnie rozpowszechniany dotąd,
dokąd zostanie zachowana wiadomość o prawach autorskich.



1.2 Osoby pracujące nad tym dokumentem; prośba o pomoc


Chciałbym podziękować Arntowi Gulbrandsenowi, który przeczytał szkice tej
pracy niezliczoną ilość razy i dostarczył wielu przydatnych sugestii.
Chcę też podziękować ludziom, którzy wysyłali mi e-mailem sugestie i uwagi.
Ten dokument nigdy nie będzie ukończony - wysyłaj mi listy o twoich
problemach i sukcesach, może to sprawić, że HOWTO będzie dokładniejsze.
Pieniądze, komentarze i/lub pytania możesz wysyłać do janl@math.uio.no.
Jeżeli wyślesz mi e-mail i będziesz żądał odpowiedzi, upewnij się,
że adres zwrotny jest poprawny i działający. Proszę, przeczytaj
sekcję
FAQ przed wysłaniem do mnie listu.
Jeśi chcesz przetłumaczyć to HOWTO, zawiadom mnie, abym mógł śledzić,
w jakich językach zostałem opublikowany, mogę też zawiadamiać cię, kiedy
HOWTO będzie uaktualniane.



1.3 Dedykacja


To HOWTO jest dedykuję dla Anne Line Norheim Langfeldt. Zresztą pewnie nigdy
tego nie przeczyta, bo nie jest tego rodzaju dziewczyną.



2. Wprowadzenie


Czym ten dokument jest, a czym nie.
Dla początkujących: DNS to System Nazw Domen (Domain Name System).
DNS przekształca nazwy maszyn na numery IP, które są ich adresami,
mapuje z nazwy na adres i odwrotnie. To HOWTO opisuje, jak zdefiniować takie
mapowanie używając systemu Linux. Mapowanie to po prostu związek jednej
rzeczy z drugą, w tym przypadku nazwy maszyny, jak ftp.linux.org i jej
adresu IP, 199.249.150.4.
DNS jest dla początkujących (ciebie ;-)) jednym z najtrudniejszych zagadnień
administracji sieci. To HOWTO
wyjaśnia parę rzeczy - opisuje jak postawić prosty serwer nazw DNS,
zaczynając z serwerem cache i przechodząc do ustawiania podstawowego (primary)
serwera DNS dla domeny. Żeby uzyskać informację o bardziej złożnonych
konfiguracjach, zobacz sekcję
FAQ tego dokumentu.
Jeżeli i tam nie znajdziesz potrzebnego opisu, bedziesz musiał
przeczytać Prawdziwą Dokumentację. Powrócę do jej składników w
ostatnim rodziale.
Zanim zaczniesz, powinieneś tak skonfigurować swoją maszynę, żebyś mógł telnetować
się na nią i z niej, oraz z powodzeniem przeprowadzić wszystkie rodzaje
połączeń
z siecią, a zwłaszcza móc wykonać telnet 127.0.0.1
i uzyskać połączenie z własnym komputerem (przetestuj to teraz!).
Potrzebne będą też poprawne: /etc/nsswitch.conf (lub
/etc/host.conf), /etc/resolv.conf i /etc/hosts,
jako punkt startowy, ponieważ nie będę wyjaśniał tu ich funkcji.
Jeśli nie masz tego wszystkiego ustawionego i działającego, NET-3 HOWTO
i/lub PPP-HOWTO wyjaśniają jak to ustawić. Przeczytaj je.
Kiedy mówię ,,twoja maszyna'', mam na myśli komputer, na którym chcesz
ustawić DNS, a nie żadną inną maszynę, jaką możesz mieć, która jest
związana z twoją siecią.
Przyjmuję, że nie jesteś za żadnym rodzajem ściany ognia (firewall), która
blokuje zapytania (queries) o nazwy. Jeżeli jesteś, będziesz potrzebował
specjalnej konfiguracji, przeczytaj sekcję
FAQ.
Serwerem nazw w Unixie jest program nazywany named.
Jest on częścią pakietu bind, który jest koordynowana przez Paula Vixie z
Internet Software Consortium. Named jest załączony w większości
dystrybucji Linuxa i zazwyczaj zainstalowany jako /usr/sbin/named.
Jeżeli masz już named, możesz go prawdopodobnie używać; jeśli nie,
możesz wziąć binaria z jakiegoś Linuxowego serwera ftp, lub najnowsze
i najlepsze źródła z
ftp.isc.org/isc/bind/src/cur/bind-8/.
To HOWTO opisuje wersję 8 bind'a. Stara wersja tego HOWTO (o bind 4) jest
dostępna na
http://www.math.uio.no/~janl/DNS/.
Jeżeli strona man named'a mówi o named.conf masz bind'a 8, a jeżeli
o named.boot, bind 4. Jeśli masz 4 i obchodzi cię bezpieczeństwo,
naprawdę powinieneś dokonać rozszerzenia do nowego 8.
DNS to baza danych szeroka jak sama sieć. Uważaj, co do niej wkładasz. Jeżeli
włożysz do niej śmieci, ty i inni wyjmą także śmieci.
Jeżeli utrzymasz swój DNS w czystości i ciągłości, będzie ci dobrze służył.
Naucz się go używać, administrować i znajdować błędy, a zostaniesz kolejnym
dobrym administratorem, utrzymującym sieć przed upadnięciem na kolana z powodu
przeładowania niedobrym zarządzaniem.
W tym dokumencie napisałem parę wyjaśnień, które nie są całkowicie prawdziwe
(jednakże są przynajmniej w połowie prawdą). Wszystko w interesie uproszczenia.
Wszystko będzie (prawdopodobnie ;-)) działać, jeżeli uwierzysz w to, co mówię.
Podpowiedź: Zrób kopie zapasowe wszystkich plików, które będziesz
zmieniać, żebyś mógł wrócić do starej, działającej konfiguracji, jeżeli nic się
nie powiedzie.

3. Serwer nazw z pamięcią podręczną (cache)


Pierwszy krok w konfigurowaniu DNS'u, bardzo przydatny dla korzystających
z modemu.
Serwer z pamięcią podręczną będzie szukał odpowiedzi na zapytania o nazwy
i pamiętał
odpowiedź, żebyś mógł jej użyć następnym razem, kiedy będziesz jej potrzebował.
To skróci czas oczekiwania za drugim razem kiedy będziesz potrzebował nazwy,
zwłaszcza jeżeli korzystasz z wolnego połączenia.
Po pierwsze, potrzebujesz pliku /etc/named.conf. Jest on
czytany, kiedy named zostaje uruchamiany. Narazie powinien po prostu zawierać:



// Plik konfiguracyjny dla serwera nazw ,,caching''

options {
directory "/var/named";

// Odkomentowanie tego może pomóc, jeżeli musisz przejść przez
// ścianę ognia (firewall), a coś nie działa:

// query-source address * port 53;
};

zone "." {
type hint;
file "root.hints";
};

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


Linia directory mówi named'owi, gdzie szukać plików. Wszystkie pliki
w podkatalogach będą odpowiadały tej zmiennej. A więc pz jest
podkatalogiem
w /var/named, czyli /var/named/pz. /var/named to
odpowiedni katalog, zgodnie z Linux File system Standard.
Plik o nazwie /var/named/root.hints jest zdefiniowany w named.conf.
Powinien on zawierać następujące rekordy:



. 6D IN NS G.ROOT-SERVERS.NET.
. 6D IN NS J.ROOT-SERVERS.NET.
. 6D IN NS K.ROOT-SERVERS.NET.
. 6D IN NS L.ROOT-SERVERS.NET.
. 6D IN NS M.ROOT-SERVERS.NET.
. 6D IN NS A.ROOT-SERVERS.NET.
. 6D IN NS H.ROOT-SERVERS.NET.
. 6D IN NS B.ROOT-SERVERS.NET.
. 6D IN NS C.ROOT-SERVERS.NET.
. 6D IN NS D.ROOT-SERVERS.NET.
. 6D IN NS E.ROOT-SERVERS.NET.
. 6D IN NS I.ROOT-SERVERS.NET.
. 6D IN NS F.ROOT-SERVERS.NET.

G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4
J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10
K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129
L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12
M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33
A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4
H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53
B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107
C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12
D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90
E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10
I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17
F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241


BARDZO WAŻNE: W niektórych wersjach tego dokumentu zawartość
powyższego pliku będzie posiadać kilka spacji albo tab przed pierwszym
wypełnionym (non blank) znakiem. Nie powinny się one znaleźć w pliku.
Skasuj każdą poprzedzającą spację w plikach, które wycinasz i
wklejasz z tego HOWTO.
Pamiętaj, co powiedziałem o poprzedzających spacjach!
Plik opisuje główne serwery (root servers) na świecie. Dane zmieniają się
z biegiem
czasu i muszą być nadzorowane. Przeczytaj
sekcję o nadzorze,
żeby uzyskać informacje o uaktualnianiu serwera.
Następna linia w named.conf to linia primary. Wyjaśnię jej
funkcję w następnym rozdziale, a teraz tylko utwórz plik 127.0.0
w podkatalogu pz:



@ IN SOA linux.bogus. hostmaster.linux.bogus. (
1 ; Numer seryjny
8H ; Odświeżenie
2H ; Powtórzenie
1W ; Przedawnienie
1D) ; Minimalny TTL
NS ns.linux.bogus.
1 PTR localhost.


Następnie, potrzebujesz pliku /etc/resolv.conf, wyglądającego
następująco:



search poddomena.twoja-domena.edu twoja-domena.edu
nameserver 127.0.0.1



Linia ,,search'' ustala, które domeny powinny być przeszukane dla
jakichkolwiek nazw węzłów, z jakimi chcesz się połączyć. Linia
nameserver definiuje adres twojego serwera nazw, w tym przypadku twoją
własną maszynę, ponieważ tu pracuje named (127.0.0.1 wystarczy, nie ma
znaczenia, czy twój komputer ma inny adres). Jeśli chcesz wyznaczyć kilka
serwerów nazw, wstaw oddzielną linię ,,nameserver'' dla każdego.
(Zauważ: Named nigdy nie czyta tego pliku, robi to resolver, który używa
named.)
Żeby zilustrować, co ten plik robi: Jeśli klient próbuje znaleźć foo,
wtedy jako pierwsze próbowane jest foo.poddomena.twoja-domena.edu,
potem foo.twoja-domena.edu, a w końcu foo. Jeżeli klient
próbuje szukać sunsite.unc.edu, najpierw próbowane jest
sunsite.unc.edu.poddomena.twoja-domena.edu
(tak, to jest głupie, ale w ten sposób działa), potem
sunsite.unc.edu.twoja-domena.edu, a w końcu sunsite.unc.edu.
Nie wpisuj za wielu domen w linii search, ponieważ zabiera to trochę czasu,
żeby je wszystkie przeszukać.
Przykład przyjmuje, że należysz do domeny
poddomena.twoja-domena.edu, twój komputer jest wtedy prawdopodownie
nazwany twój-komputer.poddomena.twoja-domena.edu. Linia search nie
powinna zawierać twojej TLD (Top Level Domain, Domena Najwyższego Poziomu,
w tym przypadku edu). Jeżeli często łączysz się z węzłami w innej
domenie, możesz dodać tą domenę do linii search w ten sposób:



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


i tak dalej. Oczywiście musisz wpisać prawdziwe nazwy domen zamiast podanych.
Zauważ brak kropek na końcach nazw domen.
Następnie, zależnie od twojej wersji libc, musisz poprawiać
albo /etc/nsswitch.conf, albo /etc/host.conf. Jeżeli już masz
nsswitch.conf, będziemy poprawiać właśnie ten plik, a jeśli nie,
host.conf. (NAPRAWDĘ zalecam poprawianie host.conf we
wszystkich systemach, w których istnieje, np. u mnie jest i jeden
i drugi - przyp. tłum.)
/etc/nsswitch.conf
Jest to długi plik, który ustala, skąd wziąć różne rodzaje typów danych,
z jakiego pliku lub bazy. Zazwyczaj zawiera on na górze pomocne
komentarze, które powinieneś teraz przeczytać. Potem znajdź linię zaczynającą
się na ,,hosts:'' - powinna zawierać:



hosts: files dns


Jeżeli nie ma linii zaczynającej się na ,,hosts:'', wpisz powyższą.
Mówi, że programy powinny najpierw spojrzeć do pliku /etc/hosts, potem
sprawdzić DNS zgodnie z resolv.conf.
/etc/host.conf
Prawdopodobnie zawiera kilka linii, jedna powinna zaczynać się na
order i wyglądać następująco:



order hosts,bind


Jeżeli nie ma linii ,,order'' powinieneś ją dopisać. Mówi ona
procedurom szukającym nazw, żeby najpierw zajrzeć do /etc/hosts,
a potem spytać serwer nazw (który ustaliłeś w pliku resolv.conf
jako 127.0.0.1).
Te dwa pliki są omówione w podręczniku man resolv(8)
(wykonaj polecenie ,,man 8 resolv'') w większości dystrybucji Linuxa.
Ta strona man jest według mnie całkiem możliwa do zrozumienia, a każdy,
zwłaszcza administratorzy DNS, powinni ją przeczytać. Zrób to teraz -
jeżeli powiesz sobie ,,później'', nigdy nie będziesz miał okazji ich przeczytać.



3.1 Uruchamianie named


Po tym wszystkim nadszedł czas, aby uruchomić named. Jeżeli używasz połączenia
modemowego, połącz się najpierw. Wpisz ,,ndc start'', bez opcji,
i naciśnij
enter. Jeżeli to nie działa, spróbuj
,,/usr/sbin/ndc start''.
Jeśli to też nie działa, zobacz sekcję
FAQ.
Teraz możesz przetestować swoją konfigurację. Jeżeli obejrzysz plik z
komunikatami sysloga (zazwyczaj /var/adm/messages, inny katalog
w którym można ich szukać to /var/log, inną nazwą pliku jest
syslog) kiedy uruchamiasz named (wykonaj tail -f /var/log/messages),
powinieneś ujrzeć coś takiego:
(linie kończące się na \ są kontynuowane w następnej linii)




Feb 15 01:26:17 roke named[6091]: starting. named 8.1.1 Sat Feb 14 \
00:18:20 MET 1998 ^Ijanl@roke.uio.no:/var/tmp/bind-8.1.1/src/bin/named
Feb 15 01:26:17 roke named[6091]: cache zone "" (IN) loaded (serial 0)
Feb 15 01:26:17 roke named[6091]: master zone "0.0.127.in-addr.arpa" \
(IN) loaded (serial 1)
Feb 15 01:26:17 roke named[6091]: listening [127.0.0.1].53 (lo)
Feb 15 01:26:17 roke named[6091]: listening [129.240.230.92].53 (ippp0)
Feb 15 01:26:17 roke named[6091]: Forwarding source address is [0.0.0.0].1040
Feb 15 01:26:17 roke named[6092]: Ready to answer queries.


Jeżeli pojawią się jakieś komunikaty o błędach, popełniłeś jakiś. Named
powie, w którym
pliku jest błąd (mam nadzieję, że jest to named.conf albo root.hints :-)).
Zabij named i sprawdź plik. (jest też bardziej ,,humanitarny'' :-) od zabijania
sposób - napisz ,,ndc stop'', odczekaj dłuższą chwilę i nameserver zostanie
wyłączony - przyp. tłum.)
Teraz uruchom nslookup, żeby sprawdzić twoje robótki ręczne.



$ nslookup
Default Server: localhost
Address: 127.0.0.1

>


Jeżeli otrzymałeś takie coś, to znaczy, że działa. Miejmy nadzieję.
Jeśli co innego, sprawdź wszystko od początku. Za każdym razem, kiedy zmienisz
plik named.conf musisz ponownie uruchomić named komendą
ndc restart.
Teraz możesz wprowadzić zapytanie. Spróbuj poszukać jakiegoś komputera blisko
ciebie. pat.uio.no jest blisko mnie, na Uniwersytecie w Oslo:



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

Name: pat.uio.no
Address: 129.240.130.16


Nslookup poprosił twojego named'a o poszukanie maszyny pat.uio.no.
Połączył się wtedy z jednym z serwerów nazw w twoim pliku root.hints
i zapytał stamtąd o drogę.
Może to zająć troszeczkę czasu, zanim otrzymasz wynik, ponieważ szuka we
wszystkich domenach, które wymieniłeś w /etc/resolv.conf.
Jeżeli zapytasz znowu o to samo, otrzymasz coś takiego:



> 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 linię ,,Non-authoritative answer:'', która pojawiła się
tym razem. Znaczy to, że named nie szukał nazwy w sieci, tylko popatrzył
w swojej pamięci podręcznej i tam ją znalazł. Ale informacja z pamięci
podręcznej może być przedawniona. Zostajesz więc poinformowany
o tym (bardzo niewielkim) niebezpieczeństwie, poprzez komunikat
,,Non-authorative answer:''. Kiedy nslookup mówi to za drugim
razem, kiedy pytasz o komputer, jest to pewny znak, że named zapamiętuje
informacje i działa. Możesz wyjść z nslookup wydając komendę
exit.
Teraz już wiesz, jak postawić przyspieszający (caching) named. Wypij piwo,
mleko, lub cokolwiek innego, żeby to uczcić.

4. Prosta domena


Jak skonfigurować własną domenę.



4.1 Ale najpierw trochę czystej teorii


Zanim naprawdę zaczniemy ten rozdział, zamierzam podać ci trochę
teorii o działaniu DNSu. A ty to przeczytasz, ponieważ jest to przydatne.
Jeśli nie chcesz, powinieneś przynajmniej przejść przez to bardzo
szybko. Przestań przeglądać, kiedy dojdziesz do opisu, mówiącego co powinieneś
wstawić do pliku named.conf.
DNS to system hierarchiczny. Najwyższa pozycja to ,,.'', nazywa się
,,root''. Pod . istnieje kilka Domen Najwyższego Poziomu (Top Level Doamins, TLD),
najpopularniejsze to ORG, COM, EDU i NET, ale jest jeszcze wiele innych.
(np. MIL, GOV, ART, NOM, PRIV - przyp. tłum.)
Kiedy poszukiwany jest komputer, zapytanie jest przeprowadzane rekursywnie,
zgodnie z hierarchią, począwszy od góry. Jeżeli chcesz znaleźć adres
komputera prep.ai.mit.edu, twój serwer nazw musi znaleźć serwer
obsługujący domenę edu. Pyta serwer . (zna już serwery . -
po to jest plik root.hints), serwer . zwraca listę serwerów
edu:



$ nslookup
Default Server: localhost
Address: 127.0.0.1


Zacznij pytać server root:



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


Ustaw typ zapytania na NS (rekordy serwerów nazw):



%gt; set q=ns


Spytaj o edu:



> edu.


Końcowa kropka jest wymagana, mówi serwerowi, że edu jest pod . (to zawęża
obszar poszukiwań).



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


Wynik mówi nam, że *.root-servers.net podaje edu.,
możemy więc
dalej pytać c. Teraz chcemy wiedzieć, kto obsługuje następny poziom
nazwy domeny: mit.edu.:



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

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

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


STRAWB, W20NS i BITSY obsługują mit,
wybierz jeden i pytaj o ai.mit.edu:



> server W20NS.mit.edu.


Serwery nazw nie rozróżniają wielkości liter, ale używam myszki do wycinania
i wklejania, więc kopiuje wynik prosto z ekranu.



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 = 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
ai.mit.edu nameserver = LIFE.AI.MIT.EDU
ai.mit.edu nameserver = BEET-CHEX.AI.MIT.EDU
ai.mit.edu nameserver = MINI-WHEATS.AI.MIT.EDU
ai.mit.edu nameserver = COUNT-CHOCULA.AI.MIT.EDU
ai.mit.edu nameserver = MINTAKA.LCS.MIT.EDU

Authoritative answers can be found from:
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
AI.MIT.EDU nameserver = LIFE.AI.MIT.EDU
AI.MIT.EDU nameserver = BEET-CHEX.AI.MIT.EDU
AI.MIT.EDU nameserver = MINI-WHEATS.AI.MIT.EDU
AI.MIT.EDU nameserver = COUNT-CHOCULA.AI.MIT.EDU
AI.MIT.EDU nameserver = MINTAKA.LCS.MIT.EDU
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4
TRIX.AI.MIT.EDU internet address = 128.52.37.6
MUESLI.AI.MIT.EDU internet address = 128.52.39.7
LIFE.AI.MIT.EDU internet address = 128.52.32.80
BEET-CHEX.AI.MIT.EDU internet address = 128.52.32.22
MINI-WHEATS.AI.MIT.EDU internet address = 128.52.54.11
COUNT-CHOCULA.AI.MIT.EDU internet address = 128.52.38.22
MINTAKA.LCS.MIT.EDU internet address = 18.26.0.36


A więc muesli.ai mit.edu jest serwerem nazw dla ai.mit.edu:



> server MUESLI.AI.MIT.EDU
Default Server: MUESLI.AI.MIT.EDU
Address: 128.52.39.7


Teraz zmieniamy typ zapytania - znaleźliśmy serwer nazw, więc teraz zapytajmy go
o wszystko, co wie o prep.ai.mit.edu.



> set q=any
> prep.ai.mit.edu.
Server: MUESLI.AI.MIT.EDU
Address: 128.52.39.7

prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix
prep.ai.mit.edu
inet address = 18.159.0.42, protocol = tcp
ftp telnet smtp finger
prep.ai.mit.edu preference = 1, mail exchanger = gnu-life.ai.mit.edu
prep.ai.mit.edu internet address = 18.159.0.42
ai.mit.edu nameserver = beet-chex.ai.mit.edu
ai.mit.edu nameserver = alpha-bits.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 = mintaka.lcs.mit.edu
ai.mit.edu nameserver = life.ai.mit.edu
gnu-life.ai.mit.edu internet address = 128.52.32.60
beet-chex.ai.mit.edu internet address = 128.52.32.22
alpha-bits.ai.mit.edu internet address = 128.52.32.5
mini-wheats.ai.mit.edu internet address = 128.52.54.11
trix.ai.mit.edu internet address = 128.52.37.6
muesli.ai.mit.edu internet address = 128.52.39.7
count-chocula.ai.mit.edu internet address = 128.52.38.22
mintaka.lcs.mit.edu internet address = 18.26.0.36
life.ai.mit.edu internet address = 128.52.32.80


Zaczynając od ., znaleźliśmy sukcesywne serwery nazw dla
następnych poziomów w nazwie domeny. Jeżeli używałbyś własnego serwera DNS
zamiast wszystkich innych, twój named zapisałby wszystkie informacje w czasie
poszukiwań, nie musiałbyś więc znowu ich pytać przez jakiś czas.
O wiele mniej mówi się o, tak samo ważnej domenie in-addr.arpa.
Jest ona też podzielona jak normalne domeny.
in-addr.arpa pozwala otrzymywać nazwy maszyn kiedy posiadamy ich
adresy.
Ważne: numery IP w domenie in-addr.arpa są pisane w odwrotnej
kolejności. Jeżeli adres maszyny to 192.128.52.43, named poszukuje tak, jak
dla przykładu z prep.ai.mit.edu: znaleźć serwery arpa..
Znaleźć seerwery in-addr.arpa., znaleźć serwery
192.in-addr.arpa., znaleźć serwery 128.192.in-addr.arpa.,
znaleźć serwery 52.128.192.in-addr.arpa..
Znaleźć potrzebne rekordy dla 43.52.128.192.in-addr.arpa..
Sprytne, no nie? (Powiedz ,,tak''.) Odwracanie numerów IP może sprawiać kłopoty
przez pierwsze dwa lata.
Właśnie skłamałem. DNS nie działa dokładnie tak jak przedstawiłem.
Ale byłem wystarczająco blisko.



4.2 Własna domena


Teraz zdefiniujemy naszą własną domenę. Nazwijmy ją linux.bogus
(,,bogus'', to po angielsku coś fałszywego, bzdurnego - przyp. tłum.)
i zdefiniujemy w niej maszyny. Używam całkowicie bzdurnej (bogus) nazwy domeny,
żeby upenić się, że nie przeszkadzamy nikomu Gdzieś Tam.
Jeszcze jedna rzecz zanim zaczniemy: Nie wszystkie znaki mogą wchodzić w skład
nazw komputerów. Jesteśmy ograniczeni do znaków angielskiego alfabetu, tzn.
a-z,
numerów 0-9 i znaku ,,-'' (łącznika). Trzymajmy się tych znaków. Wielkie i małe
litery nie są rozróżniane przez DNS, a więc pat.uio.no jest identyczne
z Pat.UiO.No.
Już zaczeliśmy część z linią 0.0.127 w pliku named.conf:



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


Zauważ brak kropki na końcu nazw domen w tym pliku -
definiujemy strefę 0.0.127.in-addr.arpa, że jesteśmy głównym jej
serwerem i jest zapisana w pliku pz/127.0.0. Mamy już ten plik,
zawiera on:



@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
1 ; Serial
8H ; Refresh
2H ; Retry
1W ; Expire
1D) ; Minimum TTL
NS ns.linux.bogus.
1 PTR localhost.


Zauważ znak ,,.'' na końcu wszystkich pełnych nazw domen w tym pliku,
kontrastuje to z plikiem named.conf powyżej. Niektórzy ludzie lubią
rozpocząć każdą strefę z dyrektywą $ORIGIN, ale to już
ekstrawagancja. Origin (pochodzenie - gdzie znajduje się w hierarchii DNS),
pliku strefy jest zdefiniowany w linii strefy w pliku named.conf,
w tym przypadku 0.0.127.in-addr.arpa.
Ten ,,plik strefy'' zawiera 3 ,,rekordy zasobów'' (resource records, RR):
RR SOA, RR NS i RR PTR. SOA to skrót od Start of Authority. Znak ,,@''
jest specjalną notacją znaczącą pochodzenie (origin), a jeżeli kolumna
domeny dla tego pliku to ,,0.0.127.in-addr.arpa'', pierwsza linia tak
naprawdę znaczy



0.0.127.in-addr.arpa. IN SOA ...


NS to RR Name Server - rekord serwera nazw. Nie jest potrzebne ,,@''
na końcu tej linii, ponieważ ostatnia linia zaczęła sie na ,,@''.
Oszczędza to trochę pisania. A więc linia NS tak naprawdę znaczy



0.0.127.in-addr.arpa. IN NS ns.linux.bogus


Mówi DNS'owi, która maszyna jest serwerem nazw domeny
0.0.127.in-addr.arpa - jest to ns.linux.bogus. ,,ns'' to
zazwyczaj stosowana nazwa serwera nazw, ale skoro serwery www są nazywane
www.cośtam, nazwą może być cokolwiek.
I w końcu rekord PTR. Mówi, że komputer o adresie 1 w podsieci
0.0.127.in-addr.arpa, np. 127.0.0.1, nazywa się localhost.
Rekord SOA jest początkiem wszystkich plików stref. W każdym pliku
musi być dokładnie jeden, jako pierwszy rekord. Opisuje strefę, z której
pochodzi (z maszyny nazwanej ns.linux.bogus), osobę, która jest
za nią odpowiedzialna (hostmaster@linux.bogus), wersję pliku strefy
(numer seryjny: 1) i inne rzeczy mające związek z zapamiętywaniem (caching)
i drugorzędnymi (secondary) serwerami DNS. Dla reszty pól: odświeżenia,
powtórzenia, przedawnienia i minimalnego TTL użycie wartości podanych w tym
HOWTO powinno być bezpieczne.
Teraz uruchom ponownie named'a (komendą ndc restart)
i użyj nslookup, żeby sprawdzić, co zrobiłeś:



$ 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


a więc udaje mu się otrzymać localhost ze 127.0.0.1, to dobrze.
Teraz nasze główne zadanie, domena linux.bogus. Wstaw nową sekcję
,,zone'' w pliku named.conf:



zone "linux.bogus" {
notify no;
type master;
file "pz/linux.bogus";
};


Zauważ dalszy brak kończącej kropki w nazwie domeny w pliku
named.conf.
W pliku strefy linux.bogus umieścimy pewne całkowicie bzdurne (bogus) dane:



;
; Plik strefy dla linux.bogus
;
; Pełny plik strefy
;
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; numer seryjny, dzisiejsza data i numer zmiany
8H ; odświeżanie, w sekundach
2H ; powtórzenie, w sekundach
1W ; przedawnienie, w sekundach
1D ) ; minimum, w sekundach
;
NS ns ; Adres Internetowy serwera nazw
MX 10 mail.linux.bogus ; Podstawowy serwer poczty
MX 20 mail.friend.bogus. ; Drugorzędny serwer poczty
;
localhost A 127.0.0.1
ns A 192.168.196.2
mail A 192.168.196.4


Należy zwrócić uwagę na dwie rzeczy w rekordzie SOA. ns.linux.bogus
musi być prawdziwą maszyna z rekordem A. Nie jest dozwolone
wpisaanie rekordu CNAME dla maszyny w rekordzie SOA. Jej nazwą nie musi być
,,ns'', może być jakąkolwiek dozwoloną nazwą komputera. Po drugie,
hostmaster.linux.bogus powinien być odczytany jako hostmaster@linux.bogus,
a powinien być to alias pocztowy lub oddzielna skrzynka, gdzie osoba(y)
nadzorujące DNS powinny często czytać pocztę. Jakikolwiek list w sprawie
domeny będzie wysłany na adres podany w tej linii. Nazwą nie musi być
,,hostmaster'',
może to być jakikolwiek dozwolony adres e-mail, ale adres ,,hostmaster''
będzie również działał.
Jest jeden nowy typ RR w tym pliku, MX czyli Mail eXchanger.
Mówi systemom pocztowym gdzie wysyłać pocztę zaadresowaną do
ktośtam@linux.bogus, odpowiednio do mail.linux.bogus lub
mail.friend.bogus. Liczba przed każdą nazwą maszyny oznacza
priorytet MX'ów. RR z najmniejszą liczbą (10) jest tym, do którego poczta
powinna być wysyłana najpierw. Jeżeli to się nie uda, może być wysłana do
serwera z wyższą liczbą, drugorzędnego serwera poczty, np.
mail.friend.bogus, który ma tu priorytet 20.
Uruchom ponownie named, używając komendy ndc restart. Sprawdź wynik
z nslookup:



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

linux.bogus
origin = ns.linux.bogus
mail addr = hostmaster.linux.bogus
serial = 199802151
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 preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
linux.bogus preference = 20, mail exchanger = mail.friend.bogus
linux.bogus nameserver = ns.linux.bogus
ns.linux.bogus internet address = 192.168.196.2
mail.linux.bogus internet address = 192.168.196.4


Przy dokładnym sprawdzaniu, odkryjesz błąd. Linia



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


jest niepoprawna. Powinno być



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


Specjalnie popełniłem błąd, żebyś mógł się z niego uczyć :-) Patrząc na plik
strefy zobaczymy, że w linii



MX 10 mail.linux.bogus ; Podstawowy serwer poczty


brakuje kropki. Można też powiedzieć, że ma o jeden człon ,,linux.bogus'' za
dużo. Jeżeli nazwa komputera nie kończy się kropką w pliku strefy, pochodzenie
(origin) zostaje dodane do niej, powodując podwójny
linux.bogus.linux.bogus. Więc piszemy albo



MX 10 mail.linux.bogus. ; Podstawowy serwer poczty


albo



MX 10 mail ; Podstawowy serwer poczty


Oba są poprawne. Wolę ostatnią formę, mniej pisania. Są znani użytkownicy
bind'a którzy nie zgadzają się z tym, są też tacy, którzy zgadzają się z tą
regułą. W pliku strefy domena powinna bądź to być całkowita i zakończona
kropką, bądź to nie powinna być wogóle załączona, w tym przypadku zawiera
domyślne pochodzenie (origin).
Muszę zaznaczyć, że w pliku named.conf nie powinno być kropek po
nazwach domen. Nie masz pojęcia, jak często ludzie głupieli i klęli na czym
świat stoi z powodu znaku ,,.''.
A więc po wyjaśnieniu mojej uwagi, mamy nowy plik strefy, zawierający
trochę dodatkowych informacji:



;
; Plik strefy dla linux.bogus
;
; Pełny plik strefy
;
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; numer seryjny, dzisiejsza data + numer zmiany
8H ; odświeżanie, w sekundach
2H ; powtórzenie, w sekundach
1W ; przedawnienie, w sekundach
1D ) ; minimum, w sekundach
;
TXT "Linux.Bogus, twoi konsultanci DNS"
NS ns ; Adresy Internetowe serwerów nazw
NS ns.friend.bogus.
MX 10 mail ; Podstawowy MX
MX 20 mail.friend.bogus. ; Drugorzędny MX

localhost A 127.0.0.1

gw A 192.168.196.1
HINFO "Cisco" "IOS"
TXT "Router"

ns A 192.168.196.2
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "Pentium" "Linux 2.0"
www CNAME ns

donald A 192.168.196.3
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "i486" "Linux 2.0"
TXT "DEK"

mail A 192.168.196.4
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "386sx" "Linux 1.2"

ftp A 192.168.196.5
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "P6" "Linux 2.1.86"


Jest tu kilka nowych RR'ów: HINFO (Host INFOrmation) ma dwie części,
dobrym zwyczajem jest branie każdej w cudzysłowy. Pierwsza część określa
nazwę sprzętową lub procesor komputera, a druga oprogramowanie lub
system operacyjny. Maszyna nazwana ,,ns'' ma procesor Pentium i Linuxa 2.0.
CNAME (Canonical NAME) jest sposobem nadawania każdej maszynie kilku nazw.
Www jest więc aliasem ns.
Używanie rekordów CNAME jest trochę kontrowesyjne. Ale bezpiecznie jest
przestrzegać zasady, że rekordy MX, CNAME lub SOA nigdy nie powinny
odnosić się do rekordu CNAME, powinny odnosić się do czegoś z rekordem A,
więc źle jest



foobar CNAME www ; NIE!


ale poprawnie



foobar CNAME ns ; Tak!


Jest też bezpiecznie przyjąć, że CNAME nie jest dozwoloną nazwą komputera
dla adresu e-mail: webmaster@www.linux.bogus jest niedozwolonym
adresem, jeżeli przyjąć powyższe ustawienia. Możesz się spodziewać, że
wielu adminów Gdzieś Tam będzie wymagało tej zasady, nawet jeśli to działa
u ciebie. Sposobem uniknięcia tego jest używanie rekordów A (i może innych,
takich jak MX) zamiast CNAME:



www A 192.168.196.2


Kilku ,,czarodziejów'' bind'a radzi, aby nie używać CNAME.
Zastanów się więc nad tym bardzo poważnie.
Ale jak widzisz, to HOWTO i wiele serwerów nie przestrzega tej zasady.
Załaduj nową bazę danych komendą ndc reload, sprawi to, że named
przeczyta ponownie swoje pliki.



$ nslookup
Default Server: localhost
Address: 127.0.0.1

> ls -d linux.bogus


Znaczy to, że wszystkie rekordy powinny być wymienione. Wyświetli:



[localhost]
$ORIGIN linux.bogus.
@ 1D IN SOA ns hostmaster (
199802151 ; numer seryjny
8H ; odświeżanie
2H ; powtórzenie
1W ; przedawnienie
1D ) ; minimum

1D IN NS ns
1D IN NS ns.friend.bogus.
1D IN TXT "Linux.Bogus, twoi konsultanci DNS"
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
gw 1D IN A 192.168.196.1
1D IN HINFO "Cisco" "IOS"
1D IN TXT "Router"
mail 1D IN A 192.168.196.4
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
1D IN HINFO "386sx" "Linux 1.0.9"
localhost 1D IN A 127.0.0.1
www 1D IN CNAME ns
donald 1D IN A 192.168.196.3
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
1D IN HINFO "i486" "Linux 1.2"
1D IN TXT "DEK"
ftp 1D IN A 192.168.196.5
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
1D IN HINFO "P6" "Linux 1.3.59"
ns 1D IN A 192.168.196.2
1D IN MX 10 mail
1D IN MX 20 mail.friend.bogus.
1D IN HINFO "Pentium" "Linux 1.2"
@ 1D IN SOA ns hostmaster (
199802151 ; numer seryjny
8H ; odświeżanie
2H ; powtórzenie
1W ; przedawnienie
1D ) ; minimum


To jest w porządku. Jak widzisz, wygląda prawie jak plik strefy.
Sprawdźmy co powie o samym www:



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

www.linux.bogus canonical name = ns.linux.bogus
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
ns.linux.bogus internet address = 192.168.196.2


Inaczej mówiąc, prawdziwa nazwa www.linux.bogus to
ns.linux.bogus. Daje ci to też trochę informacji, które ma o ns,
wystarczjąco dużo, żeby się z nim połączyć, jeżeli byłbyś programem.
Jesteśmy w połowie drogi.



4.3 Strefa odwrotna


Teraz programy mogą konwertować nazwy w linux.bogus na adresy, z którymi mogą
się połączyć. Ale potrzebna jest też strefa odwrotna, która pozwala DNS'owi
przekształcać adresy na nazwy (FTP, IRC, WWW i inne), żeby zdecydować, czy
chcą z tobą rozmawiać, czy nie, a jeżeli tak, może nawet zdecydują jaki
priorytet powinien być ci nadany. Strefa odwrotna jest wymagana dla pełnego
dostępu do wszystkich usług Internetu.
Wstaw następujące linie w named.conf:



zone "196.168.192.in-addr.arpa" {
notify no;
type master;
file "pz/192.168.196";
};


Tak samo jak z 0.0.127.in-addr.arpa, zawartość także jest podobna:



@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; Numer seryjny, data + numer
8H ; odświeżanie
2H ; powtarzanie
1W ; przedawnienie
1D) ; minimalny TTL
NS ns.linux.bogus.

1 PTR gw.linux.bogus.
2 PTR ns.linux.bogus.
3 PTR donald.linux.bogus.
4 PTR mail.linux.bogus.
5 PTR donald.linux.bogus.


Teraz uruchom ponownie named (ndc restart) i sprawdź swoją pracę
znowu korzystając z nslookup:



> 192.168.196.4
Server: localhost
Address: 127.0.0.1

Name: mail.linux.bogus
Address: 192.168.196.4


Wygląda w porządku, spróbuj wyświetlić wszystko, żeby to sprawdzić:



> ls -d 196.168.192.in-addr.arpa
[localhost]
$ORIGIN 196.168.192.in-addr.arpa.
@ 1D IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; serial
8H ; refresh
2H ; retry
1W ; expiry
1D ) ; minimum

1D IN NS ns.linux.bogus.
1 1D IN PTR gw.linux.bogus.
2 1D IN PTR ns.linux.bogus.
3 1D IN PTR donald.linux.bogus.
4 1D IN PTR mail.linux.bogus.
5 1D IN PTR donald.linux.bogus.
@ 1D IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199802151 ; numer seryjny
8H ; odświeżanie
2H ; powtarzanie
1W ; przedawnienie
1D ) ; minimum


Wygląda dobrze!
Jest kilka rzeczy, które powinienem tu dodać. Numery IP używane w przykładach
pochodzą z jednego z bloków ,,sieci prywatnych'', tzn. nie wolno używać ich
publicznie w internecie. Są bezpieczne do pokazania jako przykład w HOWTO.
Druga rzecz, to linia notify no;. Mówi named, żeby nie zawiadamiać
serwera drugorzędnego (secondary, slave), kiedy jeden z plików stref zostanie
uaktualniony. W bind'dzie-8 named może zawiadamiać inne serwery wymienione
w rekordach NS w pliku strefy, kiedy strefa zostanie uaktualniona. Jest to
przydatne do użytku zwykłego, ale dla prywatnych eksperymentów ze strefami
ta opcja powinna być wyłączona, nie chcemy przecież chyba, żeby nasz
eksperyment zaśmiecał Internet, czyż nie tak?
No i oczywiście ta domena jest nieprawdziwa (bogus) i takie też są
wszystkie adresy w niej. Zobacz następny rozdział dla przykładu z prawdziwą
domeną.

5. Prawdziwa domena


Tutaj opisujemy trochę prawdziwych plików stref.
Użytkownicy zasugerowali, żebym załączył prawdziwy przykład działającej domeny
razem z teoretycznym przykładem.
Używam tego przykładu z zezwoleniem Davida Bullock'a z LAND-5.
Te pliki były aktualne 24 Września 1996 i zostały zmienione przeze mnie,
żeby pasowały do formatu bind-8, używają też moich rozszerzeń.
A więc, to co tu widzisz różni się trochę od tego, co otrzymasz po wysłaniu
zapytania do serwerów nazw LAND-5 obecnie.



5.1 /etc/named.conf (lub /var/named/named.conf)


Tutaj znajdziemy linie główne dla dwóch potrzebnych stref odwrotnych:
sieci 127.0.0, jak i sieci 206.6.177 należącej do LAND-5, oraz
linię primary dla przedniej strefy land-5.com. Zauważ także, że zamiast
umieszczać pliki w katalogu o nazwie pz, jak robię to w tym HOWTO,
znajdują się one w katalogu zone (strefa).



// Plik ładujący dla serwera nazw LAND-5

options {
directory "/var/named";
};

zone "." {
type hint;
file "root.hints";
};

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

zone "land-5.com" {
type master;
file "zone/land-5.com";
};

zone "177.6.206.in-addr.arpa" {
type master;
file "zone/206.6.177";
};


Jeżeli wstawisz to do swojego named.conf, żeby się pobawić, PROSZĘ,
wstaw notify no; w sekcji stref dla dwóch stref land-5, żeby uniknąć
wypadków.



5.2 /var/named/root.hints


Pamiętaj, że ten plik zmienia się, a ten jest stary. Powinieneś używać
nowszego pliku wyprodukowanego używając dig, będzie to wytłumaczone później.
(UWAGA: autor napisał, że było to wytłumaczone wcześniej, ale jest to
wytłumaczone PÓŹNIEJ - przyp. tłum.)



; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET.
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opCODE: QUERY, status: NOERROR, id: 10
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
;; QUERY SECTION:
;; ., type = NS, class = IN

;; ANSWER SECTION:
. 6D IN NS G.ROOT-SERVERS.NET.
. 6D IN NS J.ROOT-SERVERS.NET.
. 6D IN NS K.ROOT-SERVERS.NET.
. 6D IN NS L.ROOT-SERVERS.NET.
. 6D IN NS M.ROOT-SERVERS.NET.
. 6D IN NS A.ROOT-SERVERS.NET.
. 6D IN NS H.ROOT-SERVERS.NET.
. 6D IN NS B.ROOT-SERVERS.NET.
. 6D IN NS C.ROOT-SERVERS.NET.
. 6D IN NS D.ROOT-SERVERS.NET.
. 6D IN NS E.ROOT-SERVERS.NET.
. 6D IN NS I.ROOT-SERVERS.NET.
. 6D IN NS F.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
G.ROOT-SERVERS.NET. 5w6d16h IN A 192.112.36.4
J.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.10
K.ROOT-SERVERS.NET. 5w6d16h IN A 193.0.14.129
L.ROOT-SERVERS.NET. 5w6d16h IN A 198.32.64.12
M.ROOT-SERVERS.NET. 5w6d16h IN A 202.12.27.33
A.ROOT-SERVERS.NET. 5w6d16h IN A 198.41.0.4
H.ROOT-SERVERS.NET. 5w6d16h IN A 128.63.2.53
B.ROOT-SERVERS.NET. 5w6d16h IN A 128.9.0.107
C.ROOT-SERVERS.NET. 5w6d16h IN A 192.33.4.12
D.ROOT-SERVERS.NET. 5w6d16h IN A 128.8.10.90
E.ROOT-SERVERS.NET. 5w6d16h IN A 192.203.230.10
I.ROOT-SERVERS.NET. 5w6d16h IN A 192.36.148.17
F.ROOT-SERVERS.NET. 5w6d16h IN A 192.5.5.241

;; Total query time: 215 msec
;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET. 198.41.0.4
;; WHEN: Sun Feb 15 01:22:51 1998
;; MSG SIZE sent: 17 rcvd: 436





5.3 /var/named/zone/127.0.0


Tylko podstawy, obowiązujący rekord SOA i rekord, który mapuje 127.0.0.1 na
localhost. Oba są wymagane. Nic więcej nie powinno znajdować się w tym
pliku. Prawdopodobnie nigdy nie będzie musiał być uaktualniany, chyba że
twój serwer nazw lub hostmaster zmienią adres.



@ 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


Widzimy tu obowiązujący rekord SOA i potrzebne rekordy NS. Możemy zobaczyć,
że drugorzędny serwer nazw ma adres ns2.psi.net. Jest tak, jak powinno być,
zawsze musi być drugorzędny serwer w innym miejscu Internetu.
Jest tu komputer główny o nazwie land-5, który zajmuje się wieloma różnymi
usługami Internetowymi, jest to załatwione za pomocą rekordów CNAME
(alternatywnie można używać rekordów A).
Jak widzidsz z rekordu SOA, plik strefy pochodzi z land-5.com, osobą kontaktową
jest root@land-5.com. hostmaster jest innym często używanym adresem.
Numer seryjny składa się z daty w formacie yyyymmdd i dziennego numeru
seryjnego; jest to prawdopodobnie szósta wersja pliku strefy z 20 Września
1996. Pamiętaj, że numer seryjny musi zwiększać się monotonicznie,
tutaj jest tylko jedna cyfra numeru seryjnego, więc po 9 zmianach
trzeba czekać do następnego dnia z następnymi edycjami. Rozważ użycie dwóch
cyfr.



@ IN SOA land-5.com. root.land-5.com. (
199609206 ; serial, todays date + todays serial #
8H ; refresh, seconds
2H ; retry, seconds
1W ; expire, seconds
1D ) ; 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 A 206.6.177.3
www A 207.159.141.192

ftp CNAME land-5.com.
mail CNAME land-5.com.
news CNAME land-5.com.

funn A 206.6.177.2
@ 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


Jeżeli sprawdzisz serwer nazw land-5, zobaczysz, że nazwy komputerów
składają się z ws_numer. Późne wersje named'a w bind'dzie 4
zaczęły wymagać ograniczeń znaków składających się na nazwy komputerów.
A więc wogóle nie działałoby to z bind-8, zamieniłem ,,_'' na ,,-''.
Inna rzecz warta zauważenia to fakt, że stacje robocze nie mają własnych nazw,
a raczej prefiks i dwie ostatnie części numeru IP. Używanie takiej konwencji
może znacznie uprościć nadzór, ale jest trochę bezosobowe i może być źródłem
niezadowolenia wśród twoich użytkowników.
Możemy także zobaczyć, że funn.land-5.com jest aliasem land-5.com, ale
używającym rekordu A, a nie CNAME.



5.5 /var/named/zone/206.6.177


Skomentuję ten plik na jego końcu.



@ 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.
2 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.
; {Dużo powtarzających się rekordów - usunięto}
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.


Strefa odwrotna jest kawałkiem ustawień wydającym się sprawiać najwięcej
kłopotów. Jest używany do znalezienia nazwy komputera, jeżeli masz jego numer
IP. Przykład: jesteś serwerem IRC i akceptujesz połączenia od klientów IRC.
Jednakże jesteś serwerem norweskim, a więc chcesz akceptować połączenia
tylko z Norwegii i innych krajów skandynawskich. Kiedy otrzymasz połączenie
od klienta, biblioteka C jest w stanie przekazać ci numer IP łączącej się
maszyny, ponieważ numer IP klienta jest zawarty we wszystkich pakietach
przekazywanych przez sieć. Teraz możesz przywołać funkcję o nazwie
gethostbyaddr, która szuka nazwy komputera z podanym numerem IP. Gethostbyaddr
spyta serwer DNS, który wtedy przetrawersuje DNS, poszukując maszyny.
Przyjmijmy, że połączenie nadeszło z ws-177200.land-5.com. Numer IP podany
przez bibliotekę C serwerowi IRC to 206.6.177.200. Żeby poznać nazwę tej
maszyny, musimy znaleźć 200.177.6.206.in-addr.arpa. Serwer DNS najpierw
odwróci ścieżkę przez 206, potem przez 6, aż w końcu znajdzie serwer dla
strefy 177.6.206.in-addr.arpa na land-5, z którego na końcu dostanie odpowiedź,
że dla 200.177.6.206.in-addr.arpa mamy rekord ,,PTR ws-177200.land-5.com'',
który znaczy, że nazwa 206.6.177.20 to ws-177200.land-5.com.
Tak jak z wyjaśnieniem, jak zostaje znaleziony prep.ai.mit.edu,
jest to trochę fikcyjne.
Wracając do przykładu serwera IRC. Serwer IRC akceptuje połączenia tylko
z krajów skandynawskich, tj. *.no, *.se, *.dk. Od razu widać, że nazwa
ws-177200.land-5.com nie pasuje do żadnego z nich, a więc serwer odmówi
połączenia. Jeżeli nie było mapowania odwrotnego dla 206.6.177.200
przez strefę in-addr.arpa, serwer nie mógłby znaleźć nazwy i porównałby
206.6.177.200 z *.no, *.se i *.dk, oczywiście żadna z nich nie będzie
pasowała.
Niektórzy ludzie będą mówili ci, że odwrotne mapowanie jest ważne tylko dla
serwerów, albo wogóle nie ważne. Nie zawsze: wiele serwerów ftp,
news, IRC i nawet niektóre http (WWW) nie będą akceptowały połączeń
z maszyn, których nazw nie będą w stanie znaleźć. A więc mapowanie odwrotne
jest obowiązkowe.

6. Nadzór


Utrzymywanie w ciągłym działaniu
Jest jedno zadanie nadzorcze, które musisz wykonywać z named'ami, inne niż
utrzymywanie ich w działaniu, tzn. uaktualnianie pliku root.hints.
Najłatwiej jest to zrobić używając dig'a. Najpierw uruchom dig bez żadnych
argumentów, otrzymasz zawartość pliku root.hints zgodnie ze swoim
własnym serwerem. Wtedy spytaj jeden z wymienionych serwerów głównych komendą
dig @rootserver. Zauważysz, że to co otrzymasz będzie bardzo podobne
do pliku root.hints. Zapisz to do pliku
(dig @e.root-servers.net . ns >root.hints.new) i zamień na niego
stary plik root.hints.
Pamiętaj, żeby uruchomić ponownie named po zamianie pliku cache.
Al Longyear wysłał mi ten skrypt. Może on być uruchamiany automatycznie
w celu uaktualniania root.hints. Dodaj wpis do tablicy cron'a,
żeby był uruchamiany raz na miesiąc. Ten skrypt przyjmuje, że masz działający
system
pocztowy i zdefniowany alias pocztowy ,,hostmaster''. Musisz zagłębić się
w ten plik, żeby dostosować go do twoich ustawień.



#!/bin/sh
#
# Uaktualnianie pliku cache raz na miesiąc.
# Ten skrypt jest uruchamiany automatycznie przez cron'a.
#
(
echo "To: hostmaster <hostmaster>"
echo "From: system <root>"
echo "Subject: Automatyczne uaktualnienie pliku named.conf"
echo

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

dig @rs.internic.net . ns >root.hints.new

echo "Plik named.conf został uaktualniony i zawiera następujące informacje:"
echo
cat root.hints.new

chown root.root root.hints.new
chmod 444 root.hints.new
rm -f root.hints.old
mv root.hints root.hints.old
mv root.hints.new root.hints
ndc restart
echo
echo "Serwer nazw został uruchomiony ponownie, aby wprowadzić zmiany"
echo "Poprzedni plik nazywa się teraz /var/named/root.hints.old."
) 2>&1 | /usr/lib/sendmail -t
exit 0


Niektórzy z was mogli zauważyć, że plik root.hints jest też dostępny przez ftp
z Internic'u. Proszę, nie używaj ftp do uaktualniania root.hints,
powyższa metoda jest o wiele bardziej przyjazna dla sieci.

7. Przejście z wersji 4 na wersję 8


Poprzednio była to sekcja o używaniu bind'a 8 napisana przez David'a E. Smith'a
(dave@bureau42.ml.org). Trochę ją zmieniłem, żeby pasowała do nowej nazwy
sekcji.
Nie ma tego wiele. Poza używaniem named.conf zamiast named.boot, wszystko jest
identyczne. Bind-8 jest dostarczany ze skryptem konwertującym pliki w ,,starym
stylu'' na nowe. Przykładowy named.conf (stary) dla serwera cache:



directory /var/named
cache . root.hints
primary 0.0.127.IN-ADDR.ARPA 127.0.0.zone
primary localhost localhost.zone


W linii komend, w katalogu bind8/src/bin/named (Przyjmuję, że masz
dystrybucję źródłową. Jeżeli masz paczkę z binariami skrypt też gdzieś musi
być, jednakże nie jestem pewien gdzie. -ed.), napisz:



./named-bootconf.pl < named.conf > named.conf


Co stworzy named.conf:



// generated by named-bootconf.pl

options {
directory "/var/named";
};

zone "." {
type hint;
file "root.hints";
};

zone "0.0.127.IN-ADDR.ARPA" {
type master;
file "127.0.0.zone";
};

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


Metoda ta konwertuje wszystko, co można wpisać do named.conf, jednakże nie dodaje
żadnych nowych rozszerzeń i opcji konfiguracji, które można uzyskać
w bind-8. Oto bardziej kompletny named.conf, który robi te same rzeczy,
ale trochę bardziej sprawnie.



// To jest plik konfiguracyjny named (bind-8 lub późniejszy)
// Powinien być zainstalowany jako /etc/named.conf.
// Jedyna zmiana pliku ,,fabrycznego'' (poza tym komentarzem :))
// to odkomentowanie linii directory, ponieważ mam już pliki stref
// w /var/named.

options {
directory "/var/named";
check-names master warn; /* domyślne. */
datasize 20M;
};

zone "localhost" IN {
type master;
file "localhost.zone";
check-names fail;
allow-update { none; };
allow-transfer { any; };
};

zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone";
check-names fail;
allow-update { none; };
allow-transfer { any; };
};

zone "." IN {
type hint;
file "root.hints";
};


bind8/src/bin/named/test ma ten plik oraz kopie plików stref, które wiele ludzi
może skopiować i od razu używać.
Formaty plików stref i root.hints są identyczne, tak jak komendy ich
uaktualniania.

8. FAQ


W tej sekcji wymienię kilka spośród najczęściej zadawanych pytań związanych
z DNS'em i tym HOWTO, oraz odpowiedzi na nie. :-) Przeczytaj tą sekcję przed
wysłaniem do mnie listu.


Mój named żąda pliku named.boot.

Czytasz złe HOWTO. Przeczytaj starą wersję tego dokumentu, która opisuje bind 4,
na
http://www.math.uio.no/~janl/DNS/.




Jak używać DNS zza ściany ognia (firewall)?

Kilka podpowiedzi: ,,forwarders'', ,,slave'' oraz spojrzenie na listę
literatury na końcu tego HOWTO.




Jak sprawić, żeby DNS przełączał się między adresami usługi,
np. www.zajęty.serwer, żeby uzyskać efekt wyrównania obciążenia,
lub podobny?

Utwórz kilka rekordów A dla www.zajęty.serwer i użyj bind'a 4.9.3
lub późniejszego. Wtedy bind będzie pokolei przełączał adresy.
Nie będzie to działać z wcześniejszymi wersjami bind'a.




Chcę ustawić DNS w (zamkniętym) intranecie. Co mam zrobić?

Nie zakładaj pliku root.hints, tylko pliki stref. To znaczy także,
że nie będziesz musiał uaktualniać tego pliku.




Jak ustawić drugorzędny (secondary, slave...) serwer DNS?

Jeżeli podstawowy (primary) serwer ma adres 127.0.0.1 wstaw następującą linię
w named.conf drugorzędnego serwera:



zone "linux.bogus" {
type slave;
file "sz/linux.bogus";
masters { 127.0.0.1; };
};



Możesz wymienić kilka alternatywnych serwerów głównych, z których
strefa może być kopiowana w liście masters, oddzielone przez ,,;''.




Chcę, żeby bind działał nawet wtedy, kiedy jestem odłączony od sieci.

Otrzymałem taki list od Ian'a Clark'a <ic@deakin.edu.au>, gdzie
wyjaśnia on jego sposób dokonania tego:



Uruchamiam named na mojej ,,maskującej się'' maszynie. Mam dwa pliki
root.hints, jeden nazywa się root.hints.real i zawiera prawdziwe nazwy serwerów
nazw głównych, oraz drugi, root.hints.fake, który zawiera...

----
; root.hints.fake
; ten plik nie zawiera żadnych informacji
----

Kiedy rozłączam się, kopiuję root.hints.fake do root.hints i uruchamiam
named ponownie.

Kiedy łączę się, kopiuję root.hints.real do root.hints i restartuję named.

To jest wykonywane odpowiednio przez ip-down i ip-up.

Pierwszy raz, kiedy przeprowadzam zapytanie off-line o nazwę domeny, named
nie ma szczegółów, a więc wstawia taki komunikat w pliku messgaes:

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

z czym można żyć.

U mnie to działa. Mogę używać serwera nazw dla maszyn lokalnych bez opóźnienia,
jak w przypadku zewnętrznych nazw domen, a kiedy jestem w sieci, zapytania
o zewnętrzne domeny funkcjonują normalnie.






Gdzie serwer przyspieszający zapisuje swoją pamięć podręczną?
W jaki sposób można ją kontrolować?

Pamięć podręczna jest zapamiętywana całkowicie w pamięci, nie jest
zapisywana na dysk. Za każdym razem kiedy zabijesz named cache będzie
stracony. Cache nie daje się w żaden sposób kontrolować. Named
zarządza nim zgodnie z pewnymi prostymi zasadami i nie da się tego ominąć.
Nie możesz kontrolować cache'u ani jego rozmiaru w żaden sposób i z żadnego
powodu. Jeżeli chcesz, możesz ,,naprawić'' to zmieniając kod named.
Jednakże nie jest to zalecane.




Czy named zapisuje cache po zakończeniu działania? Czy mogę go jakoś do
tego zmusić?

Nie, named nie zapisuje pamięci podręcznej kiedy umiera. Znaczy to,
że cache musi być zbudowany od nowa za każdym razem, kiedy zabijasz
i uruchamiasz named ponownie. Nie ma sposobu, żeby zmusić go do
zapisywania cache'u w pliku. Jeżeli chcesz, możesz to ,,naprawić'' zmieniając
kod named. Nie jest to jednak zalecane.




9. Jak zostać pełnoetatowym administratorem DNS


Dokumentacja i narzędzia
Prawdziwa Dokumentacja istnieje. Online i drukowana. Przeczytanie kilku z tych
publikacji jest wymagane, żeby zrobić krok od małoetatowego do pełnoetatowego
administratora DNS. W druku, standardową książką jest DNS i BIND,
autorstwa C. Liu i P. Albitz'a, wydawnictwa O'Reilly & Associates,
Sebastopol, CA, ISBN 0-937175-82-X. Czytałem ją, jest świetna. Jest też sekcja
o DNS w książce TCP/IP - Administracja sieci, autorstwa Craig'a
Hunt'a z wydawnictwa O'Reilly..., ISBN 0-937175-82-X. Inna książka koniecznie
do przeczytania przez dobrego admina DNS (lub kogokowiek dobrego z tej branży)
jest Zen i Sztuka Naprawy Motocykli Roberta M. Prisiga, :-) dostępne
pod ISBN 0688052304 i inne.
Online znajdziesz różne rzeczy na
http://www.dns.net/dnsrd/,
http://www.isc.org/bind.html;
FAQ, podręcznik (BOG - Bind Operators Guide), specyfikacje i definicje
protokołów, oraz sztuczki DNS (te, i wiele, jeżeli nie wszystkie RFC wspomniane
poniżej, także znajdują się w dystrybucji bind'a). Nie czytałem większości
z nich, ale przez to nie jestem pełnoetatowym administratorem DNS.
Natomiast Arnt Gulbrandsen przeczytał BOG i bardzo mu się on spodobał :-).
Jest też grupa news
news://comp.protocols.tcp-ip.domains o DNS. Dodatkowo, jest też
trochę RFC o DNS'ie, najważniejsze są prawdopodobnie te:



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

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

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

RFC 1912 ErrorsB. Barr Errors in RFC 1912, jest on dostępny na
http://www.cis.ohio-state.edu/~barr/rfc1912-errors.html
RFC 1713A. Romao, Tools for DNS debugging, 11/03/1994.

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

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

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

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

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

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

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



10. Od tłumacza


To jest druga wersja DNS-HOWTO. Pierwsza wersja, dotycząca bind'a 4 została
przetłumaczona przez Piotra Pogorzelskiego
<piotr.pogorzelski@ippt.gov.pl>. Prawa autorskie tłumaczenia
pierwszej
wersji należą właśnie do niego, a ponieważ ja przetłumaczyłem drugą wersję
od początku, prawa autorskie tłumaczenia drugiej wersji należą do mnie.
Wersja 2.1 jest znacznie poprawiona w stosunku do 2.0.
Jak zwykle, jeżeli znajdziesz jakieś błedy, daj mi znać.




Wyszukiwarka