Chyba najbardziej rozbudowany z moich "utworów". Nadal w dużej mierze aktualny i mam nadzieję że przydatny.
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 :-).
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.
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;
};
Po koleji 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 { 213.25.209.97; } – 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ą.
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.
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 ;-)…