Przejdź do głównej zawartości

RHCE - Server DNS - konfiguracja serwera DNS - system organizacji nazw domenowych

DNS czyli system nazw domenowych (ang. Domain Name System) ma za zadania przekształcać nazwy domenowe przyjazne człowiekowi czyli znane nam adresy stron www na IP serwerów na których znajdują się dane strony i odwrotnie czyli zamiana adresów IP na nazwy domenowe. DNS jest jedną z największych i najważniejszych rozproszonych baz danych świata obsługującą miliardy zapytań dziennie. Większość publicznych serwerów DNS utrzymywanych jest przez największych dostawców usług internetowych i firm komercyjnych. Prywatne serwery DNS mogą być przydatne nawet w lokalnej sieci domowej. Usługą DNS powiązaną z RHEL jest BIND ( ang. Berkeley Internet Name Domain). Ponieważ żaden indywidualny serwer nie jest tak duży by przechowywać informacje dla całego internetu domyślnie skonfigurowany jest on w taki sposób by mieć możliwość odpytywania się innych serwerów DNS. 

Informacje podstawowe 

DNS w RHEL6 bazuje na demonie "named" wbudowanym w pakiet BIND. RHEL6 zawiera BIND w wersji 9.7. Do zarządzania usługą DNS stosuje się polecenie "rndc" które w swoim działaniu zbliżone jest do sposobu korzystania z polecenia "apachectl" w przypadku zarządzania serwerem webowym Apache. 

Opcje pakietu DNS

By skonfigurować serwer DNS należy zainteresować się pakietem powiązanym z grupą pakietów o nazwie Network Infrastructure Server package group. Wszystkie pakiety z tej grupy posiadają potrzebne opcje by dopasować je według indywidualnych potrzeb. Mając to na uwadze powinniśmy dowiedzieć się czegoś na temat RPM powiązanego z DNS.
  • bind - zawiera podstawowe oprogramowanie serwera nazw z dokumentacją
  • bind-chroot - Dodaje wyizolowaną lokalizacje BIND ograniczającą dostęp do DNS
  • bind-devel - Zawiera biblioteki programistyczne dla BIND
  • bind-dyndb-ldap - Wsparcie dynamicznych aktualizacji z LDAP
  • bind-libs - Pliki bibliotek używanych w bind i bind-utils RPM's
  • bind-sdb - Wsparcie dla alternatywnych baz danych takich jak LDAP
  • bind-utils - Zawiera narzędzia takie jak dig i host udostępniające informacje o specyfice sieci i hostach w bazie DNS. 
Teraz znając już znaczenie poszczególnych pakietów możemy przejść do upewnienia się , że wszystkie  znajdują się w systemie lub przystąpić do ich instalacji.

Różne typy serwera DNS.

Kiedy dodatkowe opcje zostały poprawnie zainstalowane i są już dostępne, mamy cztery podstawowe typy serwera DNS.
  • Master DNS server , główny autorytatywny dla jednej lub więcej domen, zwiera rekordy dotyczące hostów danej domeny
  • Slave DNS server, oparty na wzorcu master DNS server dla danych, może być zamiennie z serwerem głównym 
  • Caching-only DNS server - przechowuje ostatnie zapytania tak jak serwer proxy. Jeżeli zostanie skonfigurowany jako odwołanie do innego serwera DNS zapytania nie są przechowywane we jego własnym cache. 
  • Forwarding-only DNS server - przekazuje odwołania do innego serwera DNS
Wszystkie wymienione typy serwerów DNS mogą zostać skonfigurowane z ograniczonym dostępem jedynie w obrębie lokalnej sieci. Alternatywą może być konfiguracja jako publiczny serwer DNS, dostępny z sieci internet jednak wiąże się to z większym ryzykiem i zagrożeniem dla bezpieczeństwa poprzez ataki . 

Minimalna konfiguracja serwera DNS

Konfiguracje serwera DNS przeprowadzamy w plikach konfiguracyjnych. W tej sekcji przyjrzymy się plikom konfiguracyjnym jakie zostały zainstalowane wraz z BIND. Pokazane zostanie jak skonfigurować serwer typu caching-only nameserver wraz z przekierowaniem zapytań do innego DNS serwera. 

Pliki konfiguracyjne BIND

Pliki konfiguracyjne DNS pomogą skonfigurować środowisko Linux jako bazę danych hostów i adresów IP. Ta baza danych będzie zbirem informacji i lokalną bazą danych dla zapytań przesyłanych z innych hostów.  Poniżej znajduje się list plików konfiguracyjnych wraz z ich opisem. Lista zawiera odwołania do standardowej lokalizacji plików /var/named to pliki te nie są konieczne w przypadku konfiguracji caching-only oraz forwarding DNS server. 

/etc/sysconfig/named - Ustawienia nie standardowej konfiguracji oraz lokalizacji plików danych

/etc/named.conf - Główny plik konfiguracyjny serwera DNS

/etc/named.iscdlv.key - określa standardowy klucz szyfrowania DNS

/etc/named.rfc1912.zones - nadaje właściwą strefę dla nazwy i adresu lokalnego hosta

/etc/rndc.key - lista kluczy autentykujących umożliwiających wsparcie zapytań do serwera DNS

/var/named/named.empty - Zawiera szablon pliku strefy 

/var/named/named.localhost - Lista plików strefowych dla lokalnego komputera 

/var/named/named.loopback - Lista plików strefy dla adresu loopback

Teraz pakiet bind-chroot został zainstalowany , a usługa named jest już uruchomiona oraz dostęp do tych plików mamy również z lokalizacji /var/named/chroot. Lokalizację głównego katalogu konfigurujemy w pliku /etc/sysconfig/named. W następnej sekcji poeksperymentujemy trochę z /etc/named.conf pamiętając by zawsze wykonywać kopię zapasową plików w jakich coś majstrujemy. Należy również zdawać sobie sprawę z działania SELinuxa i związanym z tym kontekstem pliku. Jak widać poniżej : 

# ls -Z /etc/named.conf
-rw-r-----. root named system_u:object_r:named_conf_t:s0 /etc/named.conf

Jeżeli kopie plików zostaną przypadkowo odtworzone nawet przez użytkownika root kontekst SELinux może zostać utracony. Więc jeżeli wystąpią jakieś błędy podczas startu lub restartu usługi named sprawdźmy właściciela pliku oraz kontekst SELinux dla pliku /etc/named.conf. W razie potrzeby należy zastosować poniższe polecenia:

# chgrp named /etc/named.conf 
# chcon -u system_u -t named_conf_t /etc/named.conf

Dodatkowo po testowaniu konfiguracji DNS niektóre informacje mogą pozostać w pamięci podręcznej. Co jest naturalne w przypadku pamięci podręcznej serwera DNS. Jeżeli zawartość pamięci podręcznej pozostaje po zmianie konfiguracji w plikach serwera DNS może to wpływać na jego działanie. Tak więc po zmianach i przeprowadzonych testach warto wyczyścić pamięć podręczną serwera DNS przy pomocy polecenia : 

# rndc flush 

DNS serwer typu Caching-only 

Kiedy wysyłasz zapytanie o stronę internetową www.onet.pl zapytanie to trafia do serwera DNS. Odpowiedzią jest adres IP pod którym znajduje się wybrana strona. By skonfigurować serwer DNS oparty tylko o pamieć podręczną (caching-only) zobaczmy co znajduje się w pliku /etc/named.conf . Dyrektywy w podstawowym niemodyfikowanym pliku są zorganizowane tak by konfigurować serwer DNS właśnie w postaci wykorzystującej tylko pamięć podręczną ( caching-only).

Plik ten zawiera kilka podstawowych opcji konfiguracyjnych : 
  • listen-on port oraz listen-on-v6 port - port nasłuchiwania. By rozszerzyć nasłuchiwanie również o sieć lokalną musimy dodać adres IP lokalnej karty sieciowej np.:  
listen-on port 53 { 127.0.0.1;  192.168.0.50};

Dla sieci IpV6 wykonujemy wszystko w podobny sposób.
  • Lokalizacja plików serwera DNS w których program przechowuje swoje dane. 
/var/named/chrootat

  • Opcja dump-file wskazuje na plik bazy danych w jakim przechowywane są ostatnie zapytania do serwera DNS
  • Opcja statistics-file przechowuje tymczasowo dane aktualnego rekordu DNS oraz jest wynikiem dla polecenia rndc stats 
  • Opcja memstatistics-file - określa lokalizacje statystyk zużycia pamięci 
  • Opcja allow-query - lista adresów IP posiadających zezwolenie na uzyskanie informacji z tego serwera DNS. Domyślnie lista jest ograniczona do systemu lokalnego. Można to rozszerzyć o inne sieci dodając adres tej sieci : 
 allow-query     { localhost;  192.168.0.0/24; }; 
  • Odwołania do programu zapewniającego bezpieczeństwo serwera DNS dnssec.*
                   dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;
        bindkeys-file "/etc/named.iscdlv.key";


Dla podstawowej konfiguracji serwera DNS instalujemy pakiety :
  • bind
  • bind-utils
  • bind-libs

Instalacja : 
# yum install -y bind bind-utils bind-libs

Sprawdzenie instalacji :

# rpm -qa | grep ^bind
bind-libs-9.7.3-8.P3.el6.i686
bind-9.7.3-8.P3.el6.i686
bind-utils-9.7.3-8.P3.el6.i686

Włączamy uruchomienie usługi ze startem systemu 

# chkconfig named on

Sprawdzamy poprawność uruchamiania usługi ze startem systemu

# chkconfig --list named

named           0:off   1:off   2:on    3:on    4:on    5:on    6:off

Wprowadzamy odpowiednie reguły zapory iptables: 

# iptables -I INPUT 5 -p udp -m udp --dport 53 -j ACCEPT
# iptables -I INPUT 5 -p tcp -m tcp --dport 53 -j ACCEPT

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[OK]

Restart usługi iptables dla wprowadzenie zmian:

# service iptables restart
iptables: Flushing firewall rules:                      [  OK  ]
iptables: Setting chains to policy ACCEPT: filter       [  OK  ]
iptables: Unloading modules:                            [  OK  ]
iptables: Applying firewall rules:                      [  OK  ]


W celu uruchomienia usługi named wydajemy polecenie : 

/etc/init.d/named start


DNS serwer typu Forwarding-only

Następnie przy pomocy polecenia # rndc status. Narzędzie rndc pozwala zdalnie zarządzać działaniem serwera nazw.

PODSTAWOWA KONFIGURACJA SERWERA DNS

Plik konfiguracyjny jaki poddamy modyfikacji znajduję się w lokalizacji :

/etc/named/named.conf 

Zawartość pliku wraz z modyfikacjami: 

options {
        listen-on port 53 { 127.0.0.1; 192.168.0.50; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; 192.168.0.0/24; };
        recursion yes;

        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

Tak jak omówiono już wcześniej podstawowa konfiguracja ogranicza się do ustawienia portu nasłuchu w raz z podaniem interfejsu, co w tym przykładzie przedstawia się następująco :

listen-on port 53 { 127.0.0.1; 192.168.0.50; };

oraz wskazaniu z jakiej puli adresów hosty mogą odpytywać ten serwer DNS :

allow-query     { localhost; 192.168.0.0/24; };

Powyższy przykład przedstawia ustawienie serwera DNS typu Caching-only. 

Jeżeli interesuje nas serwer typu Forward-only dodajemy wpis: 


options {
        listen-on port 53 { 127.0.0.1; 192.168.0.50; };
        listen-on-v6 port 53 { ::1; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { localhost; 192.168.0.0/24; };
        recursion yes;
        forward only;
        forwarders { 192.168.0.1; };

        dnssec-enable yes;
        dnssec-validation no;
        dnssec-lookaside auto;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.iscdlv.key";

        managed-keys-directory "/var/named/dynamic";
};


Ze wskazaniem na inny serwer DNS do jakiego przekierowywane będą zapytania. 

Komentarze

Najczęściej czytane w tym miesiącu

50 popularnych pytań dotyczących systemu Linux zadawanych na rozmowach kwalifikacyjnych. (Pytania & Odpowiedzi)

Jak dodać użytkownika w systemie Windows z poziomu konsoli CMD? (net user, net localgroup)

Generowanie testowych plików o określonej wielkości