inicio mail me! sindicaci;ón
 

DNS dla opornych

DNS – czyli Domain Name System – cóż to. Otóż podstawą protokołu TCP/IP jest adres IP – czyli czteroliczbowy numer przypisany do każdego komputera, np. 192.168.1.1. Jak jednak da się zauważyć w przeglądarkach internetowych i w innych programach wykorzystujemy z reguły przecież nie adresy IP a nazwy. Każda taka nazwa wskazuje na jakiś adres IP, i to dlatego program wie z jakim komputerem ma się docelowo połączyć. Postaram się tutaj w miare łopatologiczny sposób opisać jak skonfigurować swoją domene.


DNS jest systemem hierarchicznym – jak to wytłumaczyć hmmm… Są domeny główne – tzw. Top Level Domain’s – domeny najwyższego poziomu (chyba to będzie dobre tłumaczenie). TLD to jest np. ‘com’ (komercyjne), ‘net’ (networks – sieci), czy też ‘pl’ (polska) albo ‘de’ (niemcy). Są to domeny z góry określone przez odpowiednie postanowienia i są opisane w odpowiednich dokumentach, ale to nie tutaj będę o tym pisał. W TLD’s są poddomeny, np. com.pl, wp.pl, wiosenna.com (:->) czy też ahead.de. W poddomenach mogę być kolejne poddomeny albo hosty – np. slayer.wiosenna.com. I tak w kółko. Ale nie przejmuj się jak tego nie rozumiesz, przyjdzie Ci z czasem :-).

Konfiguracja DNS (Bind 8/9)

Według wszelakich norm, każda domena powinna mieć dwa nameservery – podstawowy i zapasowy. Podstawowy posiada wszelakie informacje o domenie, na nim dopisujemy hosty i wszelakie ustawienia, a poprawnie skonfigurowany zapasowy poprostu transferuje sobie plik strefy do siebie i go przechowuje wspomagając tego pierwszego.

/etc/named.conf

Jest to główny plik konfiguracyjny Binda 8.x/9.x – w tym pliku ustawiamy katalog w którym są pliki stref, nazwy domen jakie nasz dns utrzymuje. Plik ten wygląda mniej więcej tak:

options {        directory "/var/named";        // query-source address * port 53;};
zone "." {
        type hint;
        file "named.ca";
};
zone "0.0.127.in-addr.arpa" {
        type master;
        file "named.local";
};

Jak widać najpierw jest sekcja options – standardowo definiuje katalog /var/named (w PLD /var/lib/named – gdyż tam named jest chrootowany) aby był domyślnym katalogiem ze strefami. Później jest zdefiniowana strefa ‘.’ – wytłumaczenie tej strefy opiszę za parę dni – w każdym bądź razie plik /var/named/named.ca (named.ca jest zdefiniowane w sekcji zone – file „named.ca”, katalog wyżej, w options) musi się znajdować aby bind poprawnie działał. Czasami ma on nazwę root.cache, albo samo cache. Następny wpis to wpis domeny odwrotnej (rDNS) dla 127.0.0.* – czyli dla localhosta.

Ok, więc dopiszmy teraz jakąś domene. Zakładam że ona już jest wydelegowana na Twój nameserver i jest to podstawowy nameserver, a zapasowy użyczył Ci administrator z Twojej uczelni albo jakoś tak ;) Więc piszemy:

zone "naszadomena.pl" {
	type master;
	file "naszadomena.pl";
	allow-transfer { 213.25.209.97; };
	notify yes;
};

Pokoleji opisuje jeszcze raz co oznacza co:
- zone „naszadomena.pl” – to oznacza że ten wpis w configu będzie się odnosił do domeny naszadomena.pl;
- file „naszadomena.pl” – to oznacza że wszystkie wpisy co do tej domeny będą w pliku naszadomena.pl w katalogu /var/named – katalog ten ustawia się na samym początku configu;
- allow-transfer {ldelim} 213.25.209.97; {rdelim} – tutaj zamiast 213.25.209.97 wpisujemy adresy IP zapasowego serwera DNS; – notify yes – ta opcja włącza powiadamianie zapasowego serwera DNS o tym że zmieniliśmy jakieś wpisy w naszej domenie.

Teraz plik /var/named/naszadomena.pl…

Zaczynamy edycję. Tak w ramach uprzedzenia – wszystkie wpisy w plikach stref poprzedzone średnikami ‘;;’ są ignorowane i traktowane jako komentarz, więc postanowiłem na żywo komentować co oznaczają poszczególne wpisy. Będąc przy okazji katalogów – w PLD wszystkie pliki domen primary znajdują się w katalogu /var/lib/named/M a secondary w /var/lib/named/S. Takie są założenia nameda w PLD i warto się ich trzymać (czytaj: pamiętać o tym przy wpisach zone w named.conf ;)). Generalnie rekordy w takim pliku mają postać: [rekord] IN [typ] wartosc

Typy wpisów, najczęściej stosowane to:

- A – wpis wskazujący na adres IP – czyli że dany host w domenie ma podany adres IP:

komp1	IN	A	192.168.1.1

- NS – wpis informujący o tym że dany fragment domeny jest obsługiwany przez konkretne serwery DNS:

poddomena	IN	NS	dns1.jakasfirma.pl.
poddomena	IN	NS	dns2.jakasfirma.pl.

I tutaj mała uwaga. Jeżeli wpis dotyczy jakiegoś hosta w naszej domenie, np. tak jak przy przykładzie wpisu IN A użyłem hosta komp1, to domyślnie jest doklejana jest nazwa domeny do hosta, inaczej mówiąc jeżeli robimy wpis komp1 IN A 192.168.1.1 w pliku domeny naszadomena.pl, to w tym momencie przypisalismy nazwie komp1.naszadomena.pl adres IP 192.168.1.1. Natomiast jak widzicie na przykładzie rekordu IN NS na końcu dns*.jakasfirma.pl dodałem kropki. Dlaczego? Bo jak bym wpisał dns1.jakasfirma.pl bez kropki, to w tym momencie Bind dokleiłby na końcu dns*.jakasfirma.pl nazwe naszej domeny i przykladowo efekt bylby taki ze poddomena.naszadomena.pl jest obsługiwana przez dns*.jakasfirma.pl.naszadomena.pl ;-). Więc pamiętaj o tych kropkach jeżeli wpis jest spoza domeny. Tak btw. to przy wpisie komp1 można równierz wpisać komp1.naszadomena.pl. IN A 192.168.1.1, ale po co jeżeli można prościej samo komp1 ;-). Nadążasz? To dobrze, ja też nie, jest 4:15 nad ranem i sam się dziwie że jeszcze chce mi się kończyć ten tekst. Dobra. Jedziemy dalej ;-).

- MX – wpis informujący jaki serwer trzyma pocztę dla danej (pod)domeny:

poczta	IN	MX	5	listonosz

Taki wpis oznacza że wszystkie maile w formie użytkownik@poczta.naszadomena.pl będą kierowane na komputer który się zowie listonosz.naszadomena.pl. Oczywiście musimy mu jakiś adres IP przydzielić pisząc np. listonosz IN A 217.8.186.23. Ta cyferka między MX a listonosz definiuje priorytet z jakim ma być używany serwer listonosz.naszadomena.pl. Możemy naprzykład zdefiniować dwa serwery do poczty:

poczta	IN	MX	5	listonosz
poczta	IN	MX	10	poczta.jakasdomena.pl.

Efekt takiego wpisu jest taki, że jeżeli listonosz.naszadomena.pl sobie padnie, to w tym momencie cała poczta jest puszczana do poczta.jakasdomena.pl. Oczywiście obydwa serwery muszą być poprawnie skonfigurowane, a poczta.jakasdomena.pl powinna być wysyłana na listonosz.naszadomena.pl gdy ten powróci do życia. Ale tego zdeydowanie w bindzie się nie skonfiguruje tylko gdzie indziej. Jeżeli masz tylko jeden serwer pocztowy poprostu wpisz jeden z numerkiem np. 10.

- CNAME – tzw. alias:

www	IN	CNAME	superserwer
ftp	IN	CNAME	ftp.uczelnia.pl.

tak więc www.naszadomena.pl to alias dla superserwer.naszadomena.pl. Natomiast jak ktoś wbije się na ftp.naszadomena.pl to defacto połączy się z ftp.uczelnia.pl – tam jest dosyć duże i ładne archiwum niech tam sobie ludzie szukają ;-). I znowu uwaga co do kropek!

Te cztery wpisy są najczęściej używane. Do tego dochodzi jeszcze rekord SOA, ale o nim napiszę już poniżej, w przykładowym pliku sterfy:

$TTL 86400
$ORIGIN naszadomena.pl.

;; Te dwie linijki oznaczają jaki ma być domyślny czas
;; ważności rekordów w sekundach, oraz jaką domenę opisujemy.
;; 86400 = 1 dzień. Są to informacje dla bind'a które określają
;; co ma doklejić do rekordu jeżeli na jego końcu nie ma '.'

@	IN	SOA	naszserwer.pl. root.naszadomena.pl. (

;; Start Of Authority czyli rekord SOA - opisuje on kto
;; zarządza naszą domeną (root@naszadomena.pl) oraz czasy
;; ważności wpisów w domenie, odświeżania i
;; numer seryjny domeny. Zamiast @ w adresie e-mail
;; (root.naszadomena.pl) należy wpisać '.'! Podobnie znak
;; '(' jest konieczny gdyż na tym rekord SOA się nie kończy.
;; A co oznacza to @ na początku? '@' znaczy iż rekord
;; dotyczy naszadomena.pl samej w sobie.
;; Pierwsze pole (naszserwer.pl) oznacza iz pod tym adresem
;; znalezc mozna glowny DNS tej domeny - wpisuje sie tam nazwe
;; Primary DNS.

2001052501

;; Numer seryjny domeny - powinien być przy każdej modyfikacji
;; pliku strefy zwiększany, a w dobrym tonie jest utrzymywanie
;; go w formacie YYYYMMDDnn - czyli rok, miesiąc, dzień i
;; i numer modyfikacji danego dnia o ile jest to któraś
;; z koleji modyfikacja danego dnia

1200

;; refresh - To pole rekordu SOA definiuje jak często serwery
;; slave mają sprawdzać czy dane o domenie zmieniły się na
;; masterze. Według RFC, wartość ta powinna się zawierać
;; pomiędzy 1200 a 43200 (czyli od 20 minut do 12 godzin).
;; W praktyce, najlepsza wartość to 3600-7200 sekund.

1200

;; retry - Tutaj ustawiamy po jakim czasie secondary ma ponowić
;; próbę kontaktu z masterem gdy taka się nie powiedzie.
;; Zalecana wartość to 120-7200 sekund.

2419200

;; expire - Ta wartość określa po jakim czasie dane domeny mają
;; zostać uznane za nieaktualne gdy secondary nie będzie mógł
;; się dobić do primary dns'a. Zalecana wartość to od 1209600
;; do 2419200 sekund (od 2 do 4 tygodni).

86400 )

;; time-to-live - czyli TTL. Określa ile czasu informacja o
;; każdym rekordzie ma być ważna, czyli ile czasu nameserver
;; który gdzieś po drodze zcacheował jakiś rekord z naszej
;; domeny ma go pamiętać. Zalecana wartość to 86400 - 432000
;; (1 do 5 dni). Na końcu tego pola znajduje się znak ')'
;; oznaczający rekord SOA.

@	IN	NS	naszserwer.pl.
@	IN	NS	czyjsdns.innasiec.pl.

;; Tutaj zdefiniowalismy że domene obsługują w/w serwery dns.
;; No dobrze, a jak nasz komputer nie ma żadnej domeny jeszcze,
;; albo chcemy mieć ładne wpisy dns1.naszadomena.pl i
;; dns2.naszadomena.pl ? Osoba która nam wydelegowała domene
;; (w przypadku .pl to jest nask ale o tym poniżej)
;; prawdpopdobnie wzieła od nas adresy IP i odrazu je
;; definiowała ale my też powinniśmy to wpisać w taki sposób:
;;
;;	@	IN	NS	dns1
;;	@	IN	NS	dns2
;;	dns1	IN	A	192.168.1.1
;;	dns2	IN	A	192.168.1.2
;;
;; Oczywiście te adresy IP to nasz adres i adres zapasowego
;; DNS'a.

;; definiujemy że poczta@naszadomena.pl obsługiwana jest przez
;; serwer mail.naszadomena.pl:

@	IN	MX	10	mail

;; który musimy oczywiście jakoś stworzyć:

mail	IN	A	192.168.1.3

;; natomiast poczta@poczta.naszadomena.pl ma iść na serwer
;; mail2.naszadomena.pl:

poczta	IN	MX	5	mail2

;; chyba że mail2 padnie to wtedy ma iść na serwer mail:

poczta	IN	MX	10	mail

;; definiujemy jeszcze tylko mail2 (mail już wyżej
;; zdefiniowaliśmy):

mail2	IN	A	192.168.1.4

;; Generalnie chcemy aby przy użyciu naszadomena.pl był
;; podawany taki adres IP:

@	IN	A	192.168.1.10

;; będzie to nasz serwer www, więc dajmy mu takowy wpis:

www	IN	A	192.168.1.10

;; Jest to poprawne - kilka domen/hostów może wskazywać na
;; dany adres IP... Stwórzmy jeszcze wpisy na komputery w
;; naszej sieci:

komp1	IN	A	192.168.1.101
komp2	IN	A	192.168.1.102
komp3	IN	A	192.168.1.103
komp4	IN	A	192.168.1.104
komp5	IN	A	192.168.1.105

;; No tak, znajomemu się bardzo nazwa naszej domeny
;; spodobała i chciałby sobie cosik w niej pomajstrować,
;; więc wydelegujmy mu poddomene, która będzie obsługiwana
;; przez jego serwer DNS:

znajomy	IN	NS	znajomy.pl.

;; i zapasowy damy mu u siebie:

znajomy	IN	NS	dns

;; i przydzielmy hostowi dns.naszadomena.pl w końcu jakiś
;; adres:

dns	IN	A	192.168.1.7

;; Zróbmy jeszcze wpis ftp.naszadomena.pl. W sumie to więcej
;; oprogramowania jest u nas na uczelni i niech tam sobie
;; ludziki grzebią ;)

ftp	IN	CNAME	ftp.uczelnia.edu.pl.

;; Uf... To już chyba wszystko. Możemy zapisać plik z naszą
;; domeną.

Ok, domena stworzona, trzeba teraz uruchomić nasz serwer DNS. Jeżeli jest już uruchomiony, wystarczy poprostu rozkazać mu przeładować konfiguracje. Robi się to na kilka sposobów:
- komendą named.reload – spowoduje to wywołanie skryptu zmuszającego binda do przeładowania konfiguracji;
- komendą killall -HUP named – efekt ten sam jak wyżej;
- /etc/rc.d/init.d/named reload – efekt ten sam jak wyżej, komenda zadziała na RedHat’ach, Mandrake’ach i tym podobnych (nie wiem jak SuSe i Debian – jak ktoś by mógł mnie uświadomić…)
- /etc/rc.d/init.d/named restart – spowoduje to zatrzymanie pracy binda (o ile chodził już) i jego ponowne uruchomienie.

Jeżeli bind nie uruchamia się automatycznie podczas startowania sewera to są 3 sposoby na zmuszenie go do pracy:
- W Slackware modyfikacja pliku /etc/rc.d/rc.inet2;
- W RH, MDK, PLD, Gentusie, prawdopodobnie SuSE i podobnych: chkconfig –level 345 named on;
- echo „/usr/bin/named -u nobody -g nobody” >> /etc/rc.d/rc.local – metoda nieestetyczna ale skuteczna ;-). W tym momencie trzeba zmienić właścieciela katalogu bind’a: chown nobody.nobody /var/named (lub inny katalog ustalony w /etc/named.conf).

Jeżeli chcemy zmodyfikować jakiś wpis w domenie zmieniamy numer seryjny w pliku strefy przy każdej zmianie. Na tej podstawie serwery DNS rozpoznają.

Zapasowy DNS

A jeżeli chcemy postawić zapasowy DNS? To już jest o wiele prostsze. Wystarczy że ktoś wpisze adres IP w allow transfer w /etc/named.conf i w tym momencie nasz dns ma prawo tranferu sterfy. W tym momencie należy wykonać następujący wpis w /etc/named.conf na secondary dns:

zone "naszadomena.pl" IN {
        type slave;
        file "naszadomena.pl";
        masters { 195.116.163.58; };
};

W polu masters ustawiamy adres IP podstawowego DNS’a. Należy się upewnić czy użytkownik z którego pracuje bind (ps -aux|grep named) ma prawa do zapisu w katalogu z plikami stref. Po paru chwilach od wykonania killall -HUP named powinniśmy mieć w katalogu ze strefami ściągnięty plik strefy. Oczywiście zasady tworzenia strefy na podstawowym NS’ie są takie same jak opisałem powyżej.

Obydwa NS’y na jednym serwerze

Jeżeli posiadamy dwa adresy IP na jednym hoście możemy dns’a skonfigurować w taki sposób że on sam obsługuje odstawowy dns:

@	IN	NS	dns1.naszadomena.pl.
@	IN	NS	dns2.naszadomena.pl.
dns1	IN	A	192.168.1.30
dns2	IN	A	192.168.1.31

Oczywiście 192.168.1.30 i 31 to nasz serwer. W tym momencie ustawiamy opcje allow-transfer na none w /etc/named.conf i konfigurujemy dns’a tak jakby był to podstawowy dns.

Uf… No to w sumie by było na tyle. Mam nadzieje że o niczym nie zapomniałem. Uwagi mile widziane. Wszystko opisałem najprościej jak się dało – jeżeli nie rozumiesz tego co napisałem nie męcz mnie – nie mam nic więcej do powiedzenia w temacie DNS ;-)…

Michal:

10 lip 2008, 14:20

Bardzo fajny opis, no i oczywiście pomocny ;)

Jack:

11 lip 2008, 10:03

PTR jeszcze by trzeba omówić, nie?

Baseciq:

11 lip 2008, 10:48

PTR jest opisany w tekście o rDNS.

Grabek:

6 lis 2008, 18:31

A ja mam takie pytanko dotyczace primary i secondary na jedym hoscie z jednym IP – czy sie da?
wiem ze to nie ma wiekszego sensu bo jesli padnie np lacze to nie bedzie serwera ktory by obsluzyl dana domene ale chodzi mi jedynie o sam fakt uruchomienia takiej konfiguracji dla celow czysto testowych.

ozi:

24 lis 2008, 21:02

nie da rady primary i secondary na jednym ip no chyba ze registrant Ci na to zezwoli nask nie daje takiej mozliwosci

cosset:

9 gru 2008, 11:47

Mam pytanie:)
nie wiem co jest nie tak. wpisując adres strony bez (mojadomena.pl) www nie wyświeltla sie, natomiast po wpisaniu http://www.mojadomena.pl działa….?? Co jest nie tak? DNS mam u siebie.

Baseciq:

9 gru 2008, 17:13

cosset, przeczytaj uważnie:

@ IN A adres.ip.wpisz.tutaj

Nowaker:

22 gru 2008, 17:39

@ IN SOA naszserwer.pl. root.naszadomena.pl. (

Tutaj znajduje się błąd. RFC definiuje, że po IN SOA powinna znajdować się FQDN, a „naszserwer.pl” nie jest FQDN nie jest.

Baseciq:

6 sty 2009, 3:40

To chociaż powiedz że czego ma to być FQDN. Bo OIDP SOA powinien zawierać FQDN do serwera NS który jest masterem. Konkretnie rzecz biorąc, błąd polega na tym, że jako NS został wybrany nieprawidłowy host, ale generalnie zawartość SOA pokrywa się z masterem.

Poprawię w tzw. wolnej chwili.

waldi:

12 sty 2009, 0:31

mam pytanie jezeli nie okresle adresu IP poddomeny, domeny naszadomena.pl to czy pytajac sie o nia serwer przekieruje mnie na inny serwer dns? wiem troche glupie pytanie ale w windowsowym serwerze dns spotkalem sie z tym problemem,
kiedys na wlasnym serwerze dns(windows 2003) stworzylem domene pl i poddomene ja czyli ja.pl, ustawilem przekazywanie dalej, i przy wpisywaniu wp.pl pisalo ze nie moze znales strony ale google.com i inne koncowki de net odnajdywal. wiec z tad problem;/

Radzio:

15 sty 2009, 19:21

Witam

Mam pytanko a mianowicie mój wykładowca zlecił mi zadanie na zaliczanie abym tak skonfigurował pliki ( nie wiem jeszcze jakie ) aby np: http://www.nazaszkołalinux1.pl i http://www.naszaszkołalinux2.pl działały na tym samym adresie IP

Rozumiem ( albo bynajmniej tak mi się wydaje ) podstawy Linux no ale niestety z tym zadankiem mam problem
Proszę o pomoc
Pozdrawiam

Krzysztof:

17 mar 2009, 17:23

Jak sprawa wygląda z domenami IDN ?
można prosić o jakiś przykład ? Próbowałem skopiować działający przykład i tylko podmienic nazwe domeny i nic z tego nie wyszlo ( oczywiscie nazwe wpisywalem z: xn--)…
Bind 9.

zatyrany:

31 maj 2009, 18:42

@Radzio, pewnie juz Ci sie udalo, ale dla potomnych omijajac dns, wystarczy postawic np nginx i w konfiguracji domeny podac IP serwera.

Co do artykulu, przyjemnie sie czyta bo nie wszedzie jest opisany dns krok po kroku, a to chyba jedna z trudniejszych czesci konfiguracji systemu.

Michał Dąbrowski:

11 cze 2009, 13:05

Bardzo dobry, merytoryczny, uporządkowany, pomocny opis przedstawiony w czytelnej, lekkiej i łatwej do przyswojenia formie. IMHO to jest WZÓR jak się powinno robić takie rzeczy – za równo pod kątem treści jak i formy.

Osobiście bardzo dziękuję, bardzo mi pomógł :-)

Pozdrawiam

Michał Dąbrowski:

11 cze 2009, 13:07

BTW. (sory za drugi post, ale nie ma edit ;-) ) — trafiłem tu z googl’a, nie pamiętam dokładnie zapytania ale jakiś drugi – trzeci link, tak więc strona jest doceniona :-)

Krzysztof:

14 lip 2009, 11:08

No to jak to jest z tym IDN …. bo mi za cholerę nie działa….

Rafał Żelazko:

18 wrz 2009, 9:55

Doskonale HOWTO. Moim zdaniem wszystkie informacje potrzebne do konfiguracji BINDA opisane i wyjasionne w przystepny sposob.

Morderca:

14 sty 2010, 15:07

Bardzo dobrze opisane zasady konfigurowania BIND’a. Dzięki, bardzo mi pomogłeś.

Dominik:

5 mar 2010, 23:31

witam,
a ja mam takie pytanko odnosnie opisanego padniecia serwera pocztowego
wyobrazmy sobie ze dajemy dwa serwery:
mx 5 mail1.mojadomena.pl
mx 10 mail.mojadomena.pl

jesli mi padnie pierwszy (5), poczta przechodzi na ten drugi a po podniesieniu pierwszego przeciez maile siedza na drugim.
mowa konkretnie teraz o postfixie, to przeciez jak wstanie pierwszy to maile z ostatniego okresu sa trzymane na drugim, czego pierwszy teraz nie ma. czy dzieki bindowi te dwa serwery pocztowe moga miedzy soba wymieniac informacje mailowe tak zeby byla zachowana integralnosc danych ?

BLOG FIRMY PEGASUS » Konfiguracja BIND:

29 kwi 2010, 11:44

[...] Jeżeli mimo wszystko będą problemy z delegacją domeny to polecam skorzystać z FreeDNS. Konfiguracja bind Napiszę tylko jak przejść na DNSSEC. #Generujemy parę kluczy ZSK dnssec-keygen -a RSASHA1 -b [...]

BLOG FIRMY PEGASUS » Konfiguracja DNS i DNSSEC:

27 gru 2010, 21:26

[...] Jeżeli mimo wszystko będą problemy z delegacją domeny to polecam skorzystać z FreeDNS. Konfiguracja bind Napiszę tylko jak przejść na DNSSEC. #Generujemy parę kluczy ZSK dnssec-keygen -a RSASHA1 -b [...]

Grzegorz:

2 mar 2012, 9:50

Hej, dzieki za artykuł. Naprawdę super to wszystko opisałeś :) Przejrzyście itp. Od jakiegos czasu szukałem właśnie czegoś, zeby skonfigurowac sobie wlasny Named, ale wszystko jest popisane tak, że aż sie czytać nie chce. Jeszcze raz wielki THX :D

RSS dla komentarzy tego posta · TrackBack URI

Skomentuj

English users please note: since my blog is primary in Polish, English comments can be marked by Akismet (antispam) plugin as a spam. Please, allow few days for moderate action if You don't see your comment instanly.