===== Konfiguracja DNS =====
Rodzaje serwerów – master (pri), slave (sec)
W trakcie laboratoriów jest używany serwer DNS [[https://www.isc.org/bind/|BIND]] w wersji 9 którego rozwój dba [[https://en.wikipedia.org/wiki/Internet_Systems_Consortium|ISC]]. \\ BIND9 pozwala tworzyć zarówno serwery authoritative jak i caching (i serwery pełniące obie role naraz, co zwykle jest odradzane). \\ Inne popularne authoritative DNS to [[https://www.nlnetlabs.nl/projects/nsd|NSD]] i [[https://www.knot-dns.cz/|Knot DNS]]. \\
Inne popularne caching DNS to [[https://www.nlnetlabs.nl/projects/unbound/about/|Unbound]] czy [[https://pl.wikipedia.org/wiki/Dnsmasq|dnsmasq]] (który łączy w sobie serwer DNS i DHCP).
Format [[https://en.wikipedia.org/wiki/Zone_file|plików stref]] (zone files) opisujących informacje znajdujące się w DNS (a pochodzący z BIND) stał się standardem używanym do konfiguracji rekordów DNS w większości serwerów DNS.
Standardowa nazwa głównego programu serwera DNS to ''named'' (od //name daemon//).
**Uwaga:** ścieżki, polecenia i przykłady named.conf są w konwencji przyjętej w OpenSUSE. \\ Pliki stref są standardowe.
**Uwaga:** przykłady są dla adresu lab-net-1 i domeny example.com. Proszę je odpowiednio zmodyfikować
==== Przykładowe pliki ====
Przykładowa konfiguracja authoritative serwera bind: {{bind9_example_config.tar.xz}}
++++Toy example konfiguracji caching serwera bind: |
options {
querylog yes; // loguje wszystkie zapytania
recursion yes; // pozwala wykonywać zapytania rekursywne
};
Uruchomienie w/w konfiguracji w trybie pierwszoplanowym z logowaniem na konsolę: ''named -g -c named.conf'' \\ Sensowniejszy przykład konfiguracji jest np. [[https://bind9.readthedocs.io/en/latest/configuration.html#a-caching-only-name-server|tutaj]].
++++
==== Uruchamianie ====
Aby uruchomić bind9 do testów wykonaj komendę: \\
** ''named -g'' **
Można ręcznie podać inną niż domyślną ścieżkę do głównego pliku z konfiguracją: \\ ''named -g -c sciezka/do/named.conf''
Do sprawdzenia konfiguracji możesz wykonać komendę: \\
''named-checkconf'' \\
natomiast do sprawdzenia pliku strefy: \\
''named-checkzone example.com sciezka/do/pliku/example.com.zone''
++++Aby uruchomić bind9 w dystrybucjach używających systemd, należy:|
* Start usługi: \\ ''systemctl start named''
* Sprawdzanie stanu: \\ ''journalctl _SYSTEMD_UNIT=named.service''
* Wczytanie na nowo plików konfiguracyjnych i wyświetlenie stanu: \\ ''systemctl reload named ; systemctl status named''
++++
==== Główny plik konfiguracyjny ====
Główny plik konfiguracyjny BIND9 to ''/etc/named.conf'' lub ''/etc/bind/named.conf'' ([[https://bind9.readthedocs.io/en/latest/reference.html|ref]]) i jest podzielony na sekcje, np:
acl nazwa { … }; options { nazwa_opcji wartość; … }; zone nazwa { … };Plik pozwala on na skonfigurowanie: * W sekcji ''options'' [[https://bind9.readthedocs.io/en/latest/reference.html#options-statement-grammar|[1]]]: * ''directory //katalog//'' – katalog względem którego będą liczone wszystkie względne ścieżki * ''allow-query …'' – ogranicza kto może wysyłać zapytania [[https://bind9.readthedocs.io/en/latest/reference.html#access-control|[2]]], np: \\ ''allow query { any; };'' - ktokolwiek; \\ ''allow query { 127.0.0.1; 172.16.0.0/16; };'' - tylko podane IP/sieci; \\ ''allow query { localhost; };'' wszystkie IP tego komputera; * ''recursion no|yes'' (domyślnie wyłączone) – pozwala działać jako caching nameserver * ''forwarders …'' – lista IP, do których mają być przesyłane nieobsłużone zapytania (zmienia serwer w pośrednika) [[https://bind9.readthedocs.io/en/latest/reference.html#forwarding|[3]]] * ''allow-recursion …'' – ogranicza kto może wysyłać zapytania rekursywne [[https://bind9.readthedocs.io/en/latest/reference.html#access-control|[2]]] * Sekcje ''zone'' definiują strefy. * Składnia dla serwera master to:
zone "pelna.nazwa.domenowa.pl" IN {
type master;
file "sciezka_do/pliku_strefy.zone";
};
IN oznacza INternet (alternatywą jest np. CHaos)
* ++Składnia dla serwera slave|:
zone "pelna.nazwa.domenowa.pl" IN {
type slave;
masters { 10.0.0.1; }; # lista adresów IP serwerów master
file "sciezka_gdzie/serwer_stworzy_plik_strefy.zone";
};
++
++++ Odwzorowanie odwrotne |
zone "130.32.254.150.in-addr.arpa" IN {
type master;
file "master/130.32.254.150.in-addr.arpa.zone";
};
## Rzadko deleguje się rozwiązywanie pojedynczych adresów IP; częściej całych sieci, np:
#zone "32.254.150.in-addr.arpa" IN {
# type master;
# file "master/32.254.150.in-addr.arpa.zone";
#};
++++
//Zadanie 8.// Sprawdź gdzie znajduje się główny plik konfiguracyjny programu bind. Sprawdź w jakim katalogu na twoim systemie bind będzie domyślnie szukać plików stref. Wyświetl zawartość tego katalogu.
==== Pliki strefy ====
//Zadanie 9.// Jakie pliki stref są dostarczane z serwerem bind9 (i umieszczone w OpenSUSE w katalogu ''/var/lib/named'')?
Składnia plików stref:
* plik strefy musi zaczynać się od rekordu SOA, który zawiera:
* **serial** – monotonicznie rosnący numer kolejnej wersji pliku strefy, używany przez slave'y do sprawdzania czy wiedzą co powinny
* timeouty (patrz przykład pliku)
* mail (w przykładzie: root → root.example.com → root@example.com)
* plik strefy musi zawierać **przynajmniej** jeden rekord **NS** dla domeny
* **komentarze** zaczynają się od '';''
* **znak ''@''** oznacza nazwę strefy (z pliku ''named.conf'', nie z nazwy pliku strefy)
* **pustka** (brak tekstu) oznacza powtórzenie z linii wyżej
* brak ''.'' (kropki) po tekście w dowolnym miejscu gdzie BIND spodziewa się nazwy domeny spowoduje doklejenie ''.@'' na koniec tekstu; stąd do podania adresu bezwzględnego trzeba zakończyć go kropką, np: ''domain.com.''
$TTL 1H ; czas jaki ważny będzie cache dla poniższych rekordów ; jednostki: sekundy
@ IN SOA ns root (
2015121600 ; serial number
6H ; / refresh time
1H ; slave | time to retry refresh
1W ; \ slave expiry after no refresh
1D ) ; minimum TTL for caching NS; on timeout NXDOMAIN
IN NS ns
IN A 150.254.32.130
ns IN A 150.254.32.130
www IN CNAME @
//Zadanie 10.// Włącz bind i przetestuj działanie przykładowej konfiguracji.
Następnie przerób konfigurację tak, Twój komputer działał jako serwer nazw dla wybranej domeny (innej niż example.com).
++++ Odwzorowanie odwrotne |
$TTL 1H
@ IN SOA ns.example.com. root.example.com. (
2015121600 ; serial
6H ; refresh
1H ; retry
1W ; expiry
1D ) ; minimum
IN NS ns.example.com.
IN PTR example.com.
$TTL 1H
@ IN SOA ns.example.com. root.example.com. (
2015121600 ; serial
6H ; refresh
1H ; retry
1W ; expiry
1D ) ; minimum
IN NS ns.example.com.
1 IN PTR somehost.example.com.
2 IN PTR anotherhost.example.com.
# ...
130 IN PTR example.com.
# ...
++++
//Zadanie 11.// Dodaj przykładowe rekordy typu A, CNAME, MX i TXT i odpytaj o nie. Dla rekordu CNAME podaj nazwę domenową spoza swojej domeny.