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 ;-)…