BIND 9.x

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.

Contents

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.

Dodaj komentarz