BIND 9.x to kolejna wersja programu BIND czyli serwera nazw domenowych (DNS). W porównaniu do poprzednich wersji ma kilka usprawnień dotyczących głównie bezpieczeństwa oraz protokołu IPv6.
Wprowadzenie do DNS
Komputery w komunikacji między sobą używają adresów składających się z szeregu liczb czyli adresów IP (postaci x.y.w.z np. 10.0.0.125). Dla ludzi jest on bardzo niewygodny, nam lepiej zapamiętuje się słowa niż szeregi liczb. Powstała więc usługa polegająca na tłumaczeniu adresów słownych np. www.debian.org na adresy IP i odwrotnie. Usługa ta nazywa się właśnie DNS.
Instalacja
Instalacji możesz dokonać z źródeł lub z pakietu. Najprostsza jest oczywiście instalacja z pakietu ale pamiętaj iż program ma wtedy ustawione pewne parametry już podczas kompilacji, które mogą Ci przeszkadzać.
W dystrybucjach używających systemu pakietów rpm instalacje wykonasz wykorzystując polecenie:
rpm -i bind
Instalacje w Debianie dokonasz wydając polecenie:
apt-get install bind9
Uruchomienie, restart i zatrzymanie serwera
Serwer uruchamiamy (w trybie konsoli) w dystrybucjach wykorzystujących schemat V System (czyli np. Red Hat, Debian, Mandriva (dawny Mandrake) ale nie Slackware) przy pomocy polecenia:
/etc/init.d/bind start
albo
/etc/init.d/named start
W zależności od dystrybucji
Serwer restartujemy poleceniem:
/etc/init.d/bind restart
albo
/etc/init.d/named restart
Zatrzymania serwera dokonamy przy pomocy polecenia:
/etc/init.d/bind stop
albo
/etc/init.d/named stop
Konfiguracja demona
Podstawowym plikiem konfiguracyjnym jest /etc/named.conf. W nim definiujemy opcje dotyczące samego demona jak również umieszczamy informacje o domenach którymi zarządzamy. Oprócz tego mamy pliki stref, czyli pliki, w których dokładnie definiujemy jakim adresom IP odpowiadają jakie nazwy domenowe (i odwrotnie).
Możliwość zdalnego zarządzania DNSem
Bind9 ma możliwość bycia zarządzanym zdalnie przy pomocy programu rndc. Aby było to możliwe należy zdefiniować klucz (sekcja key) oraz zezwolić na zarządzanie (sekcja controls).
Przykład:
// secret must be the same as in /etc/rndc.conf key "key" { algorithm hmac-md5; secret "c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K"; }; controls { inet 127.0.0.1 allow { any; } keys { "key"; }; };
Wydaje się iż można by zrezygnować z tej możliwości jeżeli jej nie używamy. Nie jest jednak tak do końca, niektóre dystrybucje wykorzystują je w skryptach do uruchamiania i zatrzymywania demona (np. Red Hat).
Opcje globalne bind9
Secja options pozwala zdefiniować główne cechy serwera DNS. Standardowo tutaj zdefiniowane są: plik w którym przechowywany jest numer procesu serwera (opcja pid-file) i katalog w którym zdefiniowane są pliki stref (opcja directory), dodatkowo możemy zdefiniować adres i port na który przychodzą zapytania (opcja query-source). Zdefiniowanie pliku z PIDem procesu ma to na celu pomóc w zarządzaniu demonami wtórnymi (ang. children daemon) oraz uniemożliwienie uruchomienia nowego głównego demona.
options { pid-file "/var/run/named/named.pid"; directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; };
Serwer cachujący
Zdefiniowanie serwerów odpowiedzialnych za główne domeny pozwala nam stworzyć serwer cachujący, dzięki czemu możemy przechowywać zapytania DNS.
zone "." { type hint; file "named.ca"; };
Rozwiązanie takie ma jednak jedną wadę: droga do głównych serwerów jest daleka i czas odpowiedzi może być tak duży iż zniweczy sens postawienia serwera cachującego. Znacznie lepszym rozwiązaniem w tym przypadku (a także gdy zapytania DNS są selektywnie blokowane przez firewalla) jest skorzystanie z opcji follows definiowanej w sekcji options. Pozwala ona wskazać serwery do których mają być wysyłane zapytania DNS.
Przykład:
forwarders { 212.191.200.6; 212.191.200.7; };
Najczęściej wykorzystuje się DNSy TP SA. Mają one adresy: 217.98.20.34 i 217.98.63.164.
Pliki strefy lokalnej
Każdy komputer posiada adres zwrotny 127.0.0.1. Jego definicję (oprócz zapisu w pliku /etc/hosts) możemy znaleźć także w konfiguracji DNSa.
Widzimy tutaj podział na dwa pliki: strefy prostej i odwrotnej. Prosta definiuje co odpowiada serwer gdy zapytamy o adres domenowy (czyli np. www.pingwin.rak.pl) a odwrotna gdy pytamy o jakiś adres IP (np. 127.0.0.1). Podział taki wynika z funkcjonalności.
zone "0.0.127.in-addr.arpa" { type master; file "named.local"; };
Przykład definicji "prawdziwej" strefy
Przyjmijmy iż mamy domenę lasy.pl oraz przypisany do niej adresy IP 10.0.0.1 – 10.0.0.240. Musimy więc zdefiniować dwie strefy (prostą i odwrotną) oraz stworzyć ich definicje dla serwera podstawowego (Primery DNS) i zapasowego (Secendary DNS).
Definicje stref dla serwera podstawowego będą następujące (zakładając iż umieścimy je w plikach db.lasy.pl oraz db.10.0.0:
; plik strefy prostej zone "lasy.pl" { type master; file "db.lasy.pl"; allow-update { none; }; allow-transfer { 213.25.209.97; }; notify yes; }; ; plik strefy odwrotnej zone "0.0.10.in-addr.arpa" { type master; allow-update { none; }; allow-transfer { 213.25.209.97; }; notify yes; file "db.10.0.0"; };
Jak widać definicje stref umieszczamy w nawiasach sześciennym poprzedzonych słowem kluczowym zone i nazwą domeny umieszczoną w cudzysłowie. W przypadku strefy prostej (czyli przekładającej adres domenowy na IP) umieszczamy nazwę domeny. Natomiast w przypadku strefy odwrotnej (czyli przekładającej adres IP na adres domeny) umieszczamy specjalną domenę in-addr.arpa poprzedzoną naszym adresem IP (lub jego fragmentem) w odwrotnej kolejności. Jest to specjalna domena pozwalająca w łatwy sposób odszukać informacje o adresie IP.
W nawiasie sześciennym umieszczamy opcje dotyczące strefy. Podstawowe to:
- type określa czy jest to definicja dla głównego serwera (master) czy zapasowego (slave)
- allow-update określa serwer, który ma prawo zmienić zawartość pliku strefy
- allow-transfer określa komputery, które mają prawo pobrać całą strefę
- notify jest nakazuje poinformować zapasowy serwer DNS o tym iż dokonaliśmy zmian
- file plik z dokładną definicją
Plik strefy prostej
; ; BIND data file for domain lasy.pl ; $TTL 604800 $ORIGIN lasy.pl. @ IN SOA lasy.pl. root.lasy.pl. ( 1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. kurs11 IN A 10.9.91.11 kurs12 IN A 10.9.91.12 kurs13 IN A 10.9.91.13
Znaki ";" oznaczają komentarz. $TTL oznacza jaki ma być domyślny czas ważności rekordów w sekundach (86400 = 1 dzień), a $ORIGIN jaką domenę opisujemy (jest to informacje dla bind’a która określa co ma dokleić do rekordu jeżeli na jego końcu nie ma ’.’)
Następnie jest rekord SOA (Start Of Authority) określający nazwę domeny (tutaj lasy.pl), człowieka odpowiadającego za opiekę nad DNS-em (tutaj root.lasy.pl), numer seryjny pliku oraz czasy ważności domeny.
Przyjrzyjmy się rekordowi SOA. Najpierw określa się nazwę domeny (u nas lasy.pl), następnie osobę odpowiedzialną za opiekę nad wpisem (u nas root.lasy.pl), proszę zauważyć iż znak małpy zastąpiony jest kropką. Dalej definiujemy kilka istotnych liczb:
- Pierwsza to serial (numer wersji pliku), zwyczajowo wpisuje się datę modyfikacji oraz numer poprawki. Dzięki temu zawsze wiemy kiedy dokonano poprawki oraz która to poprawka danego dnia.
- Następnie (refresh) mamy czas w sekundach po którym serwery zapasowe DNS (ang. slave DNS) powinny odnowić informacje o strefie. RFC zaleca,aby wartość ta była pomiędzy 1200 a 43200 (czyli od 20 minut do 12 godzin). W praktyce, często ustawia się wartość między 3600-7200 sekund.
- Kolejna liczba to czas w sekundach, po których zapasowy serwer DNS powinien skontaktować się z głównym serwerem DNS.
- Expire to czas po którym zapasowy DNS powinien usunąć informację jeżeli nie może się skontaktować z głównym serwerem nazw.
- Ostatni wpis (Negative Cache TTL) określa czas, który dane o strefie czy komputerze powinny zostać usunięte z pamięci podręcznej innych serwerów (czyli serwerów cachujących).
Poniżej SOA występują rekordy opisujące poszczególne komputery i ich rolę. W każdej linii mamy pojedynczą informację.
Rekord NS informuje o serwerze nazw obsługującym daną domenę
Rekord A wiąże nazwę komputera z jego adresem IP.
Mała sztuczka: Wyobraźmy sobie, że chcemy aby każda poddomena (nawet jeżeli nie istnieje) wskazywała na określony IP . Przykład: chcemy aby niezależnie czy internauta wpisze mosiek.twojadomena.com czy mistrzu.twojadomena.com otwierała mu się strona twojadomena.com. Należy wtedy nazwę poddomeny w pliku strefy prostej zastąpić gwiazdką.
* A 195.26.22.67
Przydatne jest to, kiedy robimy masowo wirtualne serwery WWW a nie chce się nam za każdym razem konfigurować serwera DNS.
Plik strefy odwrotnej
Bardzo podobny jest do niego plik strefy odwrotnej:
; ; BIND reverse data file for local loopback interface ; $TTL 604800 @ IN SOA lasy.pl. root.lasy.pl. ( 2002092301 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS localhost. 12 IN PTR gateway 21 IN PTR kurs21 22 IN PTR kurs22 23 IN PTR kurs23 24 IN PTR kurs24 25 IN PTR kurs25
Nowością jest tutaj rekord PTR. wiąże on adres IP komputera z jego nazwą domenową.
Secendary DNS
Definicja przykładowego serwera zapasowego ma postać:
zone "lasy.pl" IN { type slave; file "lasy.pl"; allow-update { 195.116.163.58; }; masters { 195.116.163.58; }; };
Jak widać plik jest podobny do definicji dla serwera podstawowego. Zmianie uległ jednak typ (tutaj slave) oraz podano adres serwera, który ma prawo modyfikować informacje o strefie. Podano również adres serwera podstawowego.
Programy pomocnicze
named-checkconf
Program dostarczany razem z pakietem Bind. Pozwala na sprawdzenie poprawności czy dany plik konfiguracyjny nie zawiera błędów składni. Program kończy działanie bez komunikatów jeżeli wszystko jest poprawne lub wyświetla informacje o napotkanym problemie.
Poprawny plik konfiguracyjny:
named-checkconf -t /chroot/named/ /etc/bind/named.conf
Plik konfiguracyjny Binda zawiera błędy:
named-checkconf -t /chroot/named/ /etc/bind/named.conf /etc/bind/named.conf:8: unknown option 'test'
named-checkzone
Program dostarczany jest razem z pakietem bind. Pozwala na sprawdzenie poprawności czy dany plik strefy nie zawiera jakiś podstawowych błędów (np. zbyt dużego numeru seryjnego czy powtarzających się wpisów). Jako parametry podajemy nazwę strefy oraz plik jej plik konfiguracyjny, np:
dns:/chroot/named/var/named/laser# named-checkzone laser.net.pl laser.net.pl.dns zone laser.net.pl/IN: loaded serial 2004061601 OK
dnstop
Program dnstop pozwala przeglądać zapytania, które zostały skierowane do DNSa.
hostcvt
Program hostcvt konwertuje plik /etc/hosts na pliki główne dla Binda. Generuje on wpisy normalne (A) oraz odwrotne (PTR), obsługuje również aliasy (CNAME). Pozostałe rzeczy, jak określenie domyślnych limitów czasowych czy serwerów pocztowych (MX) trzeba zrobić już samodzielnie.
dnswalk
Przegląda konfigurację DNSa i szuka popularnych błędów, sprawdza czy plik jest spójny.
nslint
Podobnie jak dnswalk przegląda konfigurację DNSa i szuka popularnych błędów, sprawdza czy plik jest spójny.
host
Narzędzie do zadawania pytań do DNSa.
dig
Podobnie jak host, narzędzie do zadawania pytań do DNSa.
Przydatne adresy Internetowe
- http://dnsstuff.com/ – zestaw kilku bardzo przydatnych narzędzi sieciowych obsługiwanych przez interfejs WWW (informacje o adresach IP, adresach abuse, drogi do danego serwera itp),
- http://www.dnsreport.com/ – rozbudowane narzędzie z interfejsem WWW pozwalające na ocenę poprawności konfiguracji serwera DNS.