Dokument ten stanowi zwieńczenie trylogii o najważniejszych serwerach. Uruchamialiśmy serwer Dynamic Host Configuration Protocol, powoływaliśmy do życie Routing i NAT, przyszła
więc pora na uruchomienie kolejnego istotnego w sieci serwera - serwera DNS.
Czym jest usługa DNS to raczej każdy wie, jednak na wszelki wypadek pozwolę sobie przypomnieć. DNS to skrót od Domain Name System i jest to hierarchiczny,
rozproszony system nazw sieciowych, odpowiadający na zapytania o nazwy domen. Stwierdzenie "jest to usługa zamieniająca domenę na nazwę IP" jest dość powierzchownym stwierdzeniem i nadaje się na
lekcje Informatyki w szkole podstawowej. DNS nie tylko tłumaczy domeny na adresy IP, ale może np. tłumaczyć adresy IP na domeny (tzw. RevDNS), a nawet domeny na domeny (CNAME). Hierarchiczny
oznacza, że opiera się na jakiejś hierarchii, w tym przypadku będziemy mieć 13 głównym serwerów zwanych root-servers, do których są podłączone mniejsze serwery w różnych krajach.
Do tych serwerów mogą być podłączone inne serwery np. operatorów domen, operatorów internetowych itd. Z kolei do tych serwerów często podłączone są serwery mniejsze – firmowe, domowe. Rozproszony
oznacza, że nie skupia się w jednym miejscu. Serwery DNS rozproszone są po krajach, kontynentach, miastach itd.
Znając to, możemy przejść do instalacji naszego serwera DNS. Użyjemy do tego implementacji o nazwie BIND w wersji 9. Jest to serwer stworzony przez Internet Systems Consortium,
które można kojarzyć z serwera DHCP. BIND to skrót od Berkley Internet Name Domain. Wpierw jednak warto zaktualizować repozytoria i pakiety na naszym serwerze. Jeżeli zaś
chodzi o dalsze wyjaśnienia na temat DNS, to będę wszystko tłumaczył w dalszej części tego dokumentu.
Najpierw będziemy musieli zainstalować nasz serwer DNS. Użyjemy do tego następującej komendy:
$ sudo apt install -y bind9 bind9utils bind9-doc dnsutils
Zainstaluje nam ona serwer BIND9, dodatkowe oprogramowanie oraz dokumentację do serwera. Po pomyślnej instalacji, możemy przejść do właściwej konfiguracji.
Zanim przejdziemy do dalszej konfiguracji, wypunktujmy sobie najważniejsze informacje:
- Adres IP serwera: 192.168.10.10
- Docelowa domena: mydomain.local
- Nazwa domenowa serwera: serwer.mydomain.local
- Nazwa domenowa klienta: klient1.mydomain.local
Oczywiście każdy może sobie wybrać inną domenę. Ważne jest aby nie była to domena publiczna jak .com .pl .edu itd. Najlepiej korzystać z domeny .local
przeznaczonej dla sieci lokalnej. Jednak nikt nie zabroni nam korzystać np. z domeny .uwu.
Konfiguracja BIND9 przechowywana jest w folderze /etc/bind. Najlepiej będzie jeżeli przejdziemy do tego katalogu i sobie go wylistujemy poleceniem:
$ ls -l
Interesują nas pliki zaznaczone na zielono, gdyż te wykorzystamy sobie do konfiguracji naszego serwera DNS.
- db.127 - przykładowa konfiguracja strefy przeszukiwania wstecznego
- db.local - przykładowa konfiguracja strefy przeszukiwania do przodu
- named.conf - globalna konfiguracja DNS
- named.conf.default-zones - domyślne strefy przeszukiwania
- named.conf.local - lokalna konfiguracja DNS
- named.conf.options - konfiguracja serwera DNS
UWAGA! ACHTUNG! ATTENTION!
Serwer BIND9 posiada dość wybredną składnię plików konfiguracyjnych. Należy uważać aby WSZYSTKO było wpisane poprawnie. W przeciwnym wypadku serwer NIE ZADZIAŁA. Proszę się pilnować
aby NIE POMIJAĆ znaków ani NIE PRZEPISYWAĆ WSZYSTKIEGO NA ŚLEPO.
Konfigurację serwera BIND9 rozpoczniemy sobie od edycji pliku /etc/bind/named.conf.options znanym edytorem stosując polecenie:
$ sudo nano /etc/bind/named.conf.options
Musimy sobie odnaleźć w nim zakomentowaną opcję nazwaną forwarders. Odkomentujemy całą opcję, a następnie w miejsce 0.0.0.0 wpisujemy adres IP jakiegoś serwera DNS. Ja w swojej
sieci domowej posiadam własny serwer DNS, więc tego też używam. Wy możecie, a nawet musicie, wpisać inny serwer. Zapisujemy plik i opuszczamy edytor.
Teraz skonfigurujemy sobie plik /etc/bind/named.conf.local. Dodamy sobie do niego dwie strefy przeszukiwania – naprzód i wstecz. Zanim jednak to zrobimy, warto wyjaśnić
znaczenie poszczególnych pól, które będą uzupełniane.
Zone (pol. Strefa) jest to wydzielony obszar w systemie nazw domenowych (Domain Name System) gdzie obowiązek administrowania został oddelegowany do pojedynczego
menadżera. Aby to zrozumieć należy przypomnieć sobie czym jest DNS – jest to "hierarchiczny, rozproszony system nazw sieciowych, odpowiadający na zapytania o nazwy domen". System ten
rozproszony jest na całym świecie i składa się z wielu domen. Strefa to jest obszar, który zajmuje się jedną domeną i wszystkimi subdomenami i innymi sprawami związanymi z daną
domeną. Menadżerem jest główny serwer DNS danej domeny. Oczywiście jeden serwer może być menadżerem wielu domen, czyli wielu stref.
Strefa przeszukiwania naprzód jest strefą która zawiera rekordy mapujące nazwy domenowe na adresy IP lub inne informacje. Zaś strefa przeszukiwania wstecz
jest strefą, która zawiera rekordy mapujące adresy IP lub inne informacje na nazwy domenowe. Jest to element związany z usługą Reverse DNS, która właśnie mapuje adresy IP na domeny.
Wróćmy jednak do naszego pliku. Edytujemy go poleceniem:
$ sudo nano /etc/bind/named.conf.local
Utworzenie strefy rozpoczniemy od napisania słowa "zone"”", następnie w cudzysłowie podajemy adres naszej domeny "mydomain.local", a następnie "IN",
czyli "w". Otwieramy nawiasy klamrowe "{}", w których podamy potrzebne parametry na podstawie, których BIND9 będzie obsługiwał domenę.
Pierwszy z nich, czyli type master; informuje serwer, że będzie on głównym serwerem DNS dla strefy. Innym typem jest slave. Wtedy serwer pobiera
dane o strefie (czyli domeny, subdomeny itd.) z serwera master. File "(…)" wskazuje nam na plik przechowywujący informacje o strefie. Później
mamy allow-update {none;}; allow-transfer {adresip;}; oraz also-notify {adresip;};. Co te parametry oznaczają zostało wyjaśnione na screenie.
Następnie dodamy do pliku drugą strefę jednak tym razem strefę przeszukiwania wstecznego. Zapis będzie taki sam jak wcześniej z tą różnicą, że wskazujemy inny
plik, a domena ma następujący zapis:
X.in-addr.arpa
Tam gdzie jest X podajemy odwrócony adres IP serwera DNS bez części hosta. Czyli dla adresu IP 192.168.10.10/24 piszemy
10.168.192.in-addr.arpa. Dla IP 10.0.0.1/8 piszemy 10.in-addr.arpa. Dla adresów publicznych np. 8.8.4.4
piszemy 4.4.8.8.in.addr.arpa. Kiedy nasz plik wygląda jak powyżej, to możemy go zapisać i przejść dalej.
Teraz przejdziemy do konfiguracji strefy przeszukiwania do przodu. Najpierw musimy skopiować przykładowy plik konfiguracyjny (/etc/bind/db.local) i nadać mu taką
nazwę jaką podaliśmy w poprzednim pliku przy opcji file. W moim przypadku komenda będzie wyglądać następująco:
$ sudo cp /etc/bind/db.local /etc/bind/forward.mydomain.local.db
Następnie edytujemy sobie plik /etc/bind/forward.mydomain.local.db poleceniem:
$ sudo nano /etc/bind/forward.mydomain.local.db
Widzimy oryginalną zawartość tego pliku, którą za chwilę zmienimy. Pierwsze co musimy zrobić to zmienić localhost. oraz root.localhost. na nazwę domenową jaką wybraliśmy dla naszego serwera. Ja wybrałem
serwer.mydomain.local, więc taką też podaję.
PROSZĘ PAMIĘTAĆ O KROPCE NA KOŃCU KAŻDEJ NAZWY DOMENOWEJ.
Później zmieniamy numer seryjny (Serial) pliku o 1. DOKONUJEMY TEGO ZAWSZE PO KAŻDORAZOWEJ ZMIANIE TEGO PLIKU. Jest to istotne, gdyż wtedy
informujemy serwer DNS, że strefa uległa zmianie. Na samym końcu dodajemy już interesujące nas rekordy. Ich składnia wygląda następująco:
nazwa_domenowa   IN   typ_rekordu   wartość
serwer                          IN            A            192.168.10.10
Znak @ oznacza tutaj sam serwer.
Rekordy to są poszczególne wpisy w strefie, które mapują odpowiednie informacje. Typów rekordów jest wiele jednak takimi najpopularniejszymi są:
- A - mapuje nazwę domenową na adres IP
- NS - informuje o serwerach DNS
- CNAME - mapuje nazwę domenową na nazwę domenową
- MX - informuje o serwerze poczty
- AAAA - mapuje nazwę domenową na adres IPv6
- TXT - przechowuje czysty tekst. Używany przez chociażby przez Google do autoryzacji właściciela
Skoro już wszystko wiemy, to dokonujemy odpowiednich wpisów w naszym pliku. Oprócz wprowadzenia nazwy serwera i domeny, ja dodam jeszcze cztery rekordy. Jeden informuje nas istnieniu serwera DNS pod adresem serwer.mydomain.local. Drugi informuje, że pod nazwą serwer.mydomain.local skryje się adres IP 192.168.10.10. Trzeci informuje nas, że pod nazwą klient1.mydomain.local znajduje się IP 192.168.10.11. Ostatni typ CNAME (taki alias) informuje nas, że pod nazwą alKli1.mydomain.local kryje się klient1.mydomain.local. Jeżeli mamy w sieci większą ilość klientów to również możemy ich dodać. Ważne jest to aby mieli oni stały adres IP, a nie przydzielany przez DHCP. Jeżeli nasz plik wygląda jak powyżej to zapisujemy w nim zmiany i zamykamy go.
Teraz pora na drugi plik, czyli strefa przeszukiwania wstecznego. Również tworzymy sobie kopię pliku z tym, że zamiast /etc/bind/db.local musimy użyć /etc/bind/db.127
Nadajemy mu taką nazwę jaką podaliśmy wcześniej przy opcji file. W moim przypadku komenda będzie wyglądać następująco:
$ sudo cp /etc/bind/db.127 /etc/bind/reverse.mydomain.local.db
Kiedy to już zrobiliśmy to możemy przejść do edycji tego pliku znanym już poleceniem:
$ sudo nano /etc/bind/reverse.mydomain.local.db
Widzimy oryginalną zawartość tego pliku i postępujemy tak samo jak w poprzednim przypadku (zmiana localhost i numeru seryjnego). Aż do momentu dodawania rekordów. Najpierw tak
jak poprzednio dodajemy dwa rekordy – NS i A informujące o serwerze DNS. Na samym końcu dodajemy interesujące nas rekordy, a ich składnia wygląda następująco:
część_hosta_ip   IN   PTR   adres_domenowy
np. 10                     IN   PTR   serwer.mydomain.local.
PAMIĘTAJMY O KROPCE NA KOŃCU.
Skoro już wszystko wiemy, to dokonujemy odpowiednich wpisów w naszym pliku. Dodajemy tyle rekordów PTR, używanych przy RevDNS ile mamy zdefiniowanych subdomen w strefie przeszukiwania do przodu. Ja mam dwa – serwer oraz klienta, więc dodaję tylko dwa rekordy. Jeżeli nasz plik wygląda jak powyżej to zapisujemy w nim zmiany i zamykamy go.
Teraz pozostało nam tylko sprawdzić i zaakceptować opcje trzema komendami:
$ sudo named-checkconf
Powyższa komenda sprawdzi nam konfigurację serwera DNS.
$ sudo nano /etc/bind/reverse.mydomain.local.db
Ta komenda sprawdzi nam poprawność konfiguracji strefy przeszukiwania do przodu dla naszej domeny.
$ sudo nano /etc/bind/reverse.mydomain.local.db
Ostatnia komenda sprawdzi nam poprawność konfiguracji strefy przeszukiwania wstecznego dla naszej domeny.
Jeżeli komendy te zachowają się tak samo jak na screenie to gratuluję! Wszystko zostało skonfigurowane poprawnie. Jeżeli coś pójdzie nie tak to komendy te poinformują nas
gdzie jest błąd i co nim jest.
Ostatnim etapem będzie przygotowanie serwera do świadczenia usług DNS-owych. W tym celu musimy dodać w Netplanie do karty LAN adres IP serwera DNS, czyli samego siebie.
Wpisujemy zatem polecenie:
$ sudo nano /etc/netplan/00-installer-config.yaml
I dodajemy adres IP 192.168.10.10
Sprawdzamy poprawność konfiguracji poleceniami:
$ sudo netplan try
$ sudo netplan apply
Jeśli uzyskamy powyższy efekt, to znaczy, że wszystko jest ok.
Teraz możemy przetestować działanie serwera DNS korzystając z dwóch poleceń. Pierwsze bardziej zaawansowane, które wchodzi w skład pakietu bind9utils, czyli dig
wyświetla nam więcej informacji o danej domenie. Istotna dla nas jest sekcja ANSWER SECTION. Tutaj wyświetlana jest informacja o rekordzie.
Znacznie prostszym poleceniem jest nslookup. Wyświetla ono tylko podstawowe informacje. Wpisujemy zatem:
$ dig serwer.mydomain.local
$ nslookup serwer.mydomain.local
UWAGA! Czasem (tak jak u nas) te komendy mogą nie działać. Musimy wtedy do pliku /etc/resolv.conf dopisać nasz serwer DNS.
W związkuz powyższym edytujemy sobie plik /etc/resolv.conf poleceniem:
$ sudo nano /etc/resolv.conf
I zmieniamy adres 127.0.0.53 na 192.168.10.10. Zapisujemy zmiany w pliku i zamykamy go.
Teraz ponownie możemy przetestować działanie serwera DNS korzystając z tych dwóch poleceń. Wpisujemy zatem:
$ dig serwer.mydomain.local
$ nslookup serwer.mydomain.local
I teraz już wszystko działa.
Spróbujemy teraz zapingować na naszego klienta. Najpierw na samą subdomenę (klient1) wpisujemy:
$ ping klient1
Niestety nie działa, ale możemy sprawdzić, czy zadziała na pełną nazwę domenową:
$ ping klient1.mydomain.local
I teraz już otrzymujemy odpowiedż. Możemy wporowadzić małą poprawkę, po to, żeby działało to pierwsze polecenie.
Żeby zadziałał ping na samą subdomenę (klient1) musimy wprowadzić nazwę domenową do naszego pliku /etc/resolv.conf. Edytujemy go zatem poleceniem:
$ sudo nano /etc/resolv.conf
I wpisujemy na końcu search mydomain.local, zapisujemy zmiany i zamykamy plik.
Sprawdzamy ponownie ping na samą subdomenę (klient1). I teraz już wszystko działa.
Przechodzimy teraz na klienta i również sprawdzamy poprawność działania serwera DNS. Sytuacja się powtarza, więc ponownie musimy dokonać zmian w pliku /etc/resolv.conf
Edytujemy więc na kliencie plik /etc/resolv.conf znanym już poleceniem:
$ sudo nano /etc/resolv.conf
I wpisujemy adres IP serwera DNS 192.168.10.10 oraz na końcu search mydomain.local, zapisujemy zmiany i zamykamy plik.
Jak widać serwer DNS poprawnie podaje adres IP dla pełnej domeny (serwer.mydomain.local) oraz dla samej subdomeny (serwer). Do tego poprawnie pinguje na serwer korzystając z subdomeny. Jeżeli pamiętacie testy routingu, to nie działało pingowanie do google.pl, gdyż nie było serwera DNS. Teraz już to się zmieniło i jak widać pingi do google.pl też lecą. Jeżeli tak to wszystko wygląda to jest sukces. Jeżeli nie to sprawdzamy po kolei – serwer DNS oraz Routing. Tym akcentem też kończymy ten dokument, a także trylogię najważniejszych serwerów.