Domain Name System (DNS) to drzewiasta struktura, która jest w Internecie standardowym rozwiązaniem do tłumaczenia nazw domenowych na adresy IP hostów. Rozpoznawanie nazw (name resolution) to proces, który wykonuje serwer DNS. Rozpoznawanie nazw naprzód (forward name resolution) to ustalanie adresu IP na podstawie nazwy domenowej , rozpoznawanie nazw od tyłu (reverse name resolution) to ustalanie nazwy domenowej na podstawie adresu IP. DNS jest usługą niezależną od platformy i wspieraną przez każdy system operacyjny.
Przestrzeń adresowa DNS (DNS name space) to hierarchiczna struktura wszystkich domen w Internecie. Korzeń przestrzeni adresowej reprezentowany jest przez kropkę. Poniżej korzenia znajdują się domeny najwyższego poziomu (top-level domains – TLDs), takie jak .pl, .eu, .com czy .net.
Domeny najwyższego poziomu mogą zawierać domeny drugiego poziomu (second level domains) takie jak np. linux.pl. Później domeny mogą być trzeciego poziomu jak np. news.linux.pl. Pełna nazwa domenowa hosta to FQDN (Fully Qualified Domain Name). Dzielenie domen na pod-domeny pozwala na zarządzanie nimi przez inne grupy administratorów. Taka po-domena musi zostań zarejestrowana przez akredytowanego rejestratora domen, licencjonowanego przez Internet Corporation for Assigned Names and Numbers (ICANN).
Root serwery DNS.
Na szczycie hierarchii DNS znajdują się root serwery, które są zarządzane przez różne organizacje autoryzowane przez ICANN. Aktualnie jest trzynaście działających root serwerów z pewną ilością mirrorów, które mają odciążać root serwery. Lista root serwerów znajduje się w pliku /var/named/named.ca
, należącym do pakietu bind.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
a.root-servers.net. 198.41.0.4 b.root-servers.net. 192.228.79.201 c.root-servers.net. 192.33.4.12 d.root-servers.net. 199.7.91.13 e.root-servers.net. 192.203.230.10 f.root-servers.net. 192.5.5.241 g.root-servers.net. 192.112.36.4 h.root-servers.net. 128.63.2.53 i.root-servers.net. 192.36.148.17 j.root-servers.net. 192.58.128.30 k.root-servers.net. 193.0.14.129 l.root-servers.net. 199.7.83.42 m.root-servers.net. 202.12.27.33 |
Root serwery obsługują zapytania tylko dla domen najwyższego poziomu i dostarczają klientom adresy IP serwerów odpowiedzialnych za dane domeny TLD.
Role jakie mogą pełnić hosty w związku DNS.
Podstawowy serwer DNS – primary DNS server. Ma zwierzchnią rolę w domenie, utrzymuje oryginalne dane domeny.
Zapasowy serwer DNS – secondary DNS server. Również ma zwierzchnią rolę w domenie jednak jego dane są kopiowane z serwera podstawowego. Taki serwer uruchamiany jest dla redundancji lub odciążenia serwera podstawowego.
Cachujący serwer DNS – caching DNS server. Nie odgrywa zwierzchniej roli w domenie, jego dane kopiowane są z serwera podstawowego lub zapasowego i caschowane w pamięci operacyjnej.
Forwardujący serwer DNS – forwarding DNS server. Nie odgrywa zwierzchniej roli w domenie, przekazuje przychodzące zapytania od klientów do określonego serwera DNS.
Klient DNS – dns client. Host, który korzysta z serwerów DNS do rozpoznawania nazw domenowych.
Typy konfiguracji serwerów nazw.
- Autorytatywny (authoritative) – zazwyczaj podstawowy lub zapasowy serwer DNS, który udziela odpowiedzi na wysyłane przez klientów zapytania DNS odnośnie jego domeny.
- Rekursywny (recursive) – zazwyczaj serwer cachujący, który jest w stanie odpytać dostępny dla niego serwer DNS aby rozwiązać nazwę domenową, której jeszcze nie ma jeszcze w cache’u.
Strefy DNS i pliki stref.
Przestrzeń adresowa, którą zarządza dany serwer DNS nazywana jest strefą, a pliki z danymi nazywane są plikami stref lub bazą danych strefy. Pliki stref zawierają dyrektywy i rekordy zasobów. Dyrektywy kontrolują zachowanie serwera DNS i instruują jak przeprowadzać określone zadania lub stosować ustawienia specjalne dla strefy. Rekordy zasobów opisują limity strefy i mają zastosowanie dla indywidualnych hostów lub podmiotów. Dyrektywy w pliku strefy zaczynają się od znaku $, np. $INCLUDE (dodanie dodatkowego pliku strefy), $ORIGIN (dodanie nazwy domeny do prostej nazwy hosta) i $TTL (domyślna ważność ustawień strefy w sekundach). Rekordy zasobów przedstawia tabela poniżej.
Rekord | Opis |
A lub AAAA | Rekord adresu, określa adres IPv4 lub IPv6 jaki ma być mapowany dla nazwy hosta. |
CNAME | Rekord nazwy kanonicznej (canonical name), przyporządkowuje alias dla nazwy rzeczywistej. |
MX | Rekord poczty. Wskazuje na listę serwerów poczty obsługujących daną domenę. |
NS | Rekord serwera nazw. Określa nazwę autorytatywnego serwera nazw. |
PTR | Rekord wskaźnika. Wskazuje na różne lokalizacje w przestrzeni nazw. Zazwyczaj jest używany dla reverse DNS. |
SOA | Rekord Start Of Authority. Definiuje kluczowy autorytatyene dane takie jak podstawowy serwer DNS, adres email administratora oraz:
Serial – ile razy pliku strefy był aktualizowany. Refresh – czas po jaki zapasowe serwery DNS będą pobierać aktualizację strefy. Retry – czas przez jaki zapasowe serwery będą czekać przed ponownym pobraniem aktualizacji strefy. Expiry – czas po jakim zapasowe serwery ustawią strefę jako nie autorytatywną jeżeli nie mogą skontaktować się z podstawowym serwerem nazw. Minimum – czas przez jaki serwery nazw cashują dane strefy. Wartości mogą być podane w sekundach (domyślne), minutach (M), godzinach (H), dniach (D) lub tygodniach (W). Znakiem komentarza jest średnik ;. Domena na samym początku wskazuje na domenę, która jest właścicielem strefy. Znak @ wskazuje na wartość zmiennej $ORIGIN. IN przed SOA wskazuje na rekord Internet. |
Przykładowy plik strefy:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$TTL 86400 [24h, czas trzymania danych w cachu] $ORIGIN example.com [Nazwa domeny] @ IN SOA server1.example.com. root.examle.com. ( [Znak @ zastępuję nazwę domeny] 0 ; serial [0 aktualizacji tego pliku] 1D; refresh 1H ; retry 1W ; expire 3H); minimum IN NS server1.example.com. [Nazwa serwera DNS] server1 IN A 192.168.0.110 [IP serwera DNS] IN MX 8 server1.example.com. [Serwer poczty dla domeny. Im mniejsza liczba MX tym większy priorytet] server1 IN A 192.168.0.110 [IP serwera poczty] IN MX 9 server2.example.com. [Nazwa drugiego serwera poczty] server2 IN A 192.168.0.120 [IP drugiego serwera poczty] |
Wszystkie pliki strefy są utrzymywane na podstawowym serwerze DNS.
Domyślny plik konfiguracyjny /etc/named.conf
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
options { listen-on port 53 { 127.0.0.1; }; // Port i IP, na którym nasłuchuje serwer listen-on-v6 port 53 { ::1; }; directory "/var/named"; // Katalog, w którym uruchomiany jest named dump-file "/var/named/data/cache_dump.db"; // Położenie pliku z cache. statistics-file "/var/named/data/named_stats.txt"; // Położenie pliku ze statystykami memstatistics-file "/var/named/data/named_mem_stats.txt"; // Plik ze statystykami zużycia pamięci. allow-query { localhost; }; // Lista hostów, które może obsługiwać serwer. recursion yes; // Serwer będzie pracował jako serwer rekursywny. dnssec-enable yes; // Dyrektywa związana z bezpieczeństwem DNS. dnssec-validation yes; // Dyrektywa związana z bezpieczeństwem DNS. /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; // Plik strefy. include "/etc/named.root.key"; |
Plik domyślnie skonfigurowany jest dla serwera DNS cache-only. Komentarze w tym pliku zaczynają się od znaków // lub mogą być w bloku /* */ tak jak w języku C/C++. Opcje globalne definiowane są w sekcji options, opcje indywidualnego poziomu definiowane są wewnątrz sekcji zone. Opcje indywidualnych stref nadpisują opcje globalne.
Domyślny plik strefy /etc/named.rfc1912.zones.
Domyślnie plik ten dostarcza tylko strefę dla lokalhosta. Każdy blok w tym pliku wskazuje na odpowiedni plik strefy w katalogu /var/named
: named.empty, named.localhost
oraz named.loopback
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
zone "localhost.localdomain" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "localhost" IN { type master; file "named.localhost"; allow-update { none; }; }; zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "named.loopback"; allow-update { none; }; }; zone "0.in-addr.arpa" IN { type master; file "named.empty"; allow-update { none; }; }; |
Pakiety i logi w RHEL związane z BIND.
- bind – oprogramowanie do konfiguracji serwera DNS.
- bind-libs – biblioteki dla binda.
- bind-utils – zawiera takie narzędzia resolvera jak dig, host czy nslookup.
Wszystkie komunikaty związane z bindem logowane są do pliku /var/log/messages
.
Bind a SELinux.
Typ SELinux związany z portem DNS to dns_port_t :
1 2 3 |
# semanage port –l | grep dns_ dns_port_t tcp 53 dns_port_t udp 53 |
Zmienne boolean SELinux:
1 2 3 |
# getsebool –a | grep ^named named_tcp_bind_http_port --> off named_write_master_zones --> off |
Zmienna named_tcp_bind_http_port określa czy named może wykorzystywać port http. Zmienna named_write_master_zones określa czy named może modyfikować strefę master.
Konfiguracja serwera DNS cache-only.
1. Instalacja pakietu bind i bind-utils.
1 |
# yum –y install bind bind-utils |
2. Edycja pliku named.conf
i modyfikacja poniższych dyrektyw. Pozostałe dyrektywy zostawiamy niezmienione.
1 2 3 4 5 6 7 |
options { listen-on port 53 { any; }; allow-query { any; }; dnssec-enable no; dnssec-validation no; recursion yes; } |
3. Sprawdzenie poprawności składni pliku named.conf
.
1 |
# named-checkconf |
4. Autostart i start binda.
1 2 |
# systemctl enable named # systemctl start named |
5. Odblokowanie usługi DNS na firewallu.
1 2 |
# firewall-cmd --permanent --add-service dns # firewall-cmd --reload |