Wgłąb DNS – named.conf

Skoro wiemy już czym jest usługa DNS i w jaki sposób odbywa się rozpoznawanie nazw przez resolver – warto zastanowić się nad możliwościami i szczegółami budowy tego serwisu.

Wspomnieliśmy, że DNS jest usługą która może zostać oparta o różne systemy operacyjne – najpopularniejszymi z nich są darmowy DNS bind oraz zintegrowana z systemem Windows rola DNS server. Dziś przyjrzymy się demonowi bind.

Jego konfigurację najogólniej rzecz biorąc rozbić można na konfigurację pliku stref named.conf wraz z opcjami domyślnymi oraz konfigurację samych zon określonych w powyższym pliku.

Plik named.conf pozwala na określenie tzw ACLek czyli list kontroli dostępu, które mogą następnie zostać użyte do ograniczenia użycia poszczególnych elementów skłądowych w dalszej części pliku np. transferów stref, aktualizacji sterf czy samych odpytań o rekordy.

Ponieważ plik named.conf podobnie jak inne pliki konfiguracyjne w systemie Linux ma konstrukcję opartą o opcje, nawiasy klamrowe oraz średniki kończące linie kodu lista kontroli dostępu może wyglądać w sposób następujący:

acl ACL_transfer_allowed {
10.0.1.0/24;
};

ACLek można używać, chociaż nie jest to wymagany element konfiguracji. Mają one jednak bardzo duże możliwości i pozwalają na dowolne kształtowanie ruchu DNS między klientami a serwerem oraz między serwerami DNS.

Kluczowym elementem konfiguracji jest sekcja options. To tutaj konfigurowane są kluczowe opcje globalne systemu. W tym momencie zaczyna się prawdziwa konfiguracja pliku DNS i jednocześnie pierwsza próba rozumienia zasad jego działania. Przykładowe dostępne opcje:

  • allow-query – pozwala na określenie kto może odpytywać nasz serwer. Można w tym miejscu użyć właśnie ACLek lub wprowadzać adresy sieci wprost. Dopuszczalne jest także używanie słów kluczowych np. any, localnets, none, localhost
  • allow-recursion – określa jacy klienci serwisu DNS mogą dokonywać odpytań rekursywnych czyli żądań zajęcia się rozpoznaniem rekordu DNS od A do Z i zwróceniu ostatecznego wyniku. Zazwyczaj lokalne serwery DNS w naszych sieciach są rekursywne, natomiast serwery wysokiego szczebla nie pozwalają na tego typu zapytania. Co zrozumiałe zapytania rekursywne wymagają znacznie więcej czasu i zasobów, a serwery root czy domen głównych .com, .net, itd. nie mogą pozostawać obciążone (DNS jest hierarchiczny). W tej opcji także możemy używać ACLek.
  • blackhole – tu określamy kto nie może odpytywać serwera – zapytania z tych ACLek lub adresów zostaną wysłane do ciemnej * i pozostaną bez echa.
  • directory – miejsce w którym demon DNS pracuje – najczęściej /var/named
  • forwarders – ponieważ nasz serwer nie ma wiedzy odnośnie całego świata, musi jakoś przesyłać zapytania odnośnie nieznanych domen dalej – temu służy opcja forwarders – czyli adresy IP serwerów do których przekierowane są zapytania jesli nasz serwer nie zna rekordu (nie jest cache’owany lub nasz serwer nie jest autorytatywny – czyli sam nie posiada strefy dla odpytywanej domeny).
  • forward – tu potrzebujemy trochę teorii. Nasz serwer DNS może być autorytatywnym (tzn. posiada jakieś strefy dla domen i rekordy wewnątrz jeśli np. obsługuje naszą firmową domenę) lub może być wyłącznie serwerem cache – czyli nie ma nic swojego tylko przechowuje rozwiązywane nazwy aby zwiększyć szybkość rozwiązywania w naszej sieci. Opcja forward może przyjąć dwie wartości – only oraz first. Pierwsza oznacza, że po otrzymaniu jakiegoś zapytania serwer DNS nie będzie nawet zaglądał do swoich stref tylko od razu przekaże zapytanie dalej. Opcja first oznacza, że serwer DNS przekaże co prawda zapytanie dalej ale w przypadku braku rozpoznania nazwy sprawdzi jeszcze swoje rekordy przed zwróceniem wyniku do klienta .
  • listen-on – tu zwyczajnie podajemy na jakich interfejsach usługa będzie nasłuchiwała na zapytania. Nie mamy możliwości konfiguracji portu, gdyż DNS zawsze prowadzi nasłuch na portach 53 tcp/udp
  • notify – tu ponownie potrzebujemy odrobinę więcej wiedzy odnośnie rodzajów stref jakie mogą występować, ponieważ ta opcja określa czy i jak nasz serwer ma informować o zmianach w swoich strefach serwery podrzędne. DNS posiadać może następujące strefy: Primary (strefa podstawowa autorytatywna); Secondary (strefa zapasowa autorytatywna – stanowiąca kopię ze strefy podstawowej – jest to swoisty mechanizm zwiększający dostępność usługi); Delegation – strefa delegowana na inny serwer DNS; Stub – strefa zawierająca wyłącznie informacje o rekordach NS/A typu glue – czyli najbardziej istotnych z punktu widzenia istnienia strefy. Ponieważ brak w niej informacji odnośnie innych rekordów celem ich uzyskania trzeba odpytywać zewnętrznych (wskazany w rekordach glue) serwer nazw; Strefa wyszukiwania wstecznego – przekształcająca adresy na nazwy. Rodzajom stref i ich działaniu poświęcimy osobny rozdział historii o DNS.
  • pid-file –określa gdzie znajduje się plik procesu named (tzw. process ID).

Poza opcjami kluczowym elementem pliku konfiguracyjnego jest definiowanie stref. Przykładowo strefa może być definiowana w następujący sposób:

zone "fafik.com" {
type master;
file "fafik.com.zone";
};

Wewnątrz strefy możliwe jest również konfigurowanie parametrów które nadpiszą wartości globalne np.: notify, allow-query, allow-update czy allow-transfer. Z punktu widzenia strefy kluczowym jest parametr type określający typ strefy. Może przybierać wartości delegation-only, master, slave, forward, in-view, redirect, static-stub i stub. Master i slave to strefy podstawowa i zapasowa. Stub to tłumaczona wcześniej strefa zawierająca tylko rekordy glue, Static-stub to strefa podobna do stub z tą różnicą, że możliwe jest skonfigurowanie adresów NS. Hint to strefa definiująca podstawowe serwery (root). Forward to strefa przekierowująca, a delegation-only to strefa umożliwiająca przeciwdziałanie wildcardom dla stref.

Wildcard to specjalne definiowanie stref przy użyciu * np dla strefy fafik.com możliwe jest zdefiniowanie wildcardu *.fafik.com rozwijającego wszystkie nazwy w domenie na konkretny adres IP.

Z punktu widzenia istnienia strefy musi istnieć także wskaźnik do pliku z zasobami strefy definiowany poprzez parametr file oraz w przypadku stref typu slave definiowane są także serwery z których pobiera się dane dyrektywą masters { x.x.x.x; };

W następnej części zapoznamy się z plikami stref i resourcami DNS.

Dodaj komentarz