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.
Zaczynamy od instalacji pakietów, wykonując polecenia:
$ sudo apt update $ sudo apt install -y bind9 bind9-doc bind9-utils bind9-dnsutils
Komendy te zainstalują serwer BIND9, dodatkowe oprogramowanie oraz dokumentację. Po zakończeniu instalacji możemy przejść do właściwej konfiguracji.
Przed przystąpieniem do dalszej konfiguracji podsumujmy najważniejsze informacje:
Zamiast .local można wybrać inną domenę, pamiętając, aby nie była to domena publiczna, taka jak .com, .pl czy .edu. Najlepiej skorzystać z domeny przeznaczonej do sieci lokalnych.
Zaczynamy od ustawienia nazwy domenowej naszego serwera. Edytujemy plik hosts na naszym serwerze za pomocą komendy:
$ sudo nano /etc/hosts
Dopisujemy w nim naszą docelową nazwę domenową zgodnie ze schematem przedstawionym na zrzucie ekranu.
Następnie sprawdzamy, czy serwer posiada zdefiniowaną przez nas nazwę domenową, używając polecenia:
$ hostname -f
UWAGA!
Zanim przejdziemy dalej: serwer BIND9 posiada bardzo restrykcyjną składnię plików konfiguracyjnych. Podczas edycji należy zwrócić uwagę, aby wszystko było wpisane poprawnie, ponieważ w przeciwnym razie serwer nie zadziała. Należy pilnować, aby nie pomijać znaków oraz nie przepisywać parametrów bezrefleksyjnie. Wysoko zalecane jest zrobienie kopii pliku przed jego edycją.
Konfiguracja BIND9 znajduje się w katalogu /etc/bind.
Kolorem zielonym oznaczono najważniejsze pliki, których będziemy używać podczas dalszej konfiguracji:
$ cd /etc/bind/ $ ls -l
Konfigurację naszego serwera DNS zaczynamy od pliku named.conf.options.
Zaznaczone na żółto ukośniki komentarza należy usunąć, a adres 0.0.0.0 zmienić na adres serwera DNS, do którego będą przekazywane zapytania w przypadku braku wpisu w naszych strefach. Czerwonym podświetleniem w edytorze nano nie musimy się przejmować.
$ sudo nano /etc/bind/named.conf.options
Wpisujemy adres DNS Google, czyli 8.8.8.8. Zapisujemy plik.
$ sudo nano /etc/bind/named.conf
Przechodzimy do pliku named.conf, gdzie jedynie sprawdzamy obecność trzech linii oznaczonych kolorem zielonym.
$ sudo nano /etc/bind/named.conf.local
Kolejnym plikiem jest named.conf.local, zainkludowany w named.conf.
Konfigurację można zapisać w obu plikach, lecz zalecaną i przejrzystą metodą jest umieszczenie jej w named.conf.local, dlatego właśnie z niego korzystamy.
Kolorem zielonym oznaczono strefę forward, a kolorem niebieskim strefę reverse.
Tworzenie strefy zaczynamy od słowa zone, po czym podajemy nazwę naszej domeny (egzamin.local), klasę IN oraz otwieramy nawias klamrowy.
Wewnątrz nawiasów klamrowych podajemy parametry obsługi domeny:
Następnie przechodzimy do konfiguracji strefy reverse. Zapis parametrów jest analogiczny, różnicą jest wskazanie dedykowanego pliku oraz nazwa domeny w postaci X.in-addr.arpa. Zmienna X to odwrócona część sieciowa adresu IP. Jeśli nasz serwer pracuje w sieci 192.168.10.0/24, to część sieciowa po odwróceniu daje 10.168.192. W przypadku adresu publicznego (na przykład serwera DNS Google 8.8.4.4) podaje się po prostu pełny adres zapisany od tyłu, czyli 4.4.8.8.in-addr.arpa. Podajemy odpowiednią ścieżkę pliku dla strefy wstecznej, a reszta parametrów pozostaje taka sama jak w strefie wyszukiwania do przodu.
Należy bezwzględnie pamiętać o średnikach po zamknięciu nawiasów klamrowych.
Przechodzimy do konfiguracji strefy forward. Kopiujemy przykładowy plik konfiguracyjny db.local i nadajemy mu taką nazwę, jaką zadeklarowaliśmy przy parametrze file – w naszym przypadku forward.egzamin.local.db.
Po skopiowaniu otwieramy plik do edycji:
$ sudo cp /etc/bind/db.local /etc/bind/forward.egzamin.local.db $ sudo nano /etc/bind/forward.egzamin.local.db
W oryginalnej zawartości pliku modyfikujemy wpisy nagłówka SOA:
Wpisy oznaczone kolorem zielonym (localhost. oraz root.localhost.) zamieniamy na pełną nazwę domenową wybraną dla naszego serwera oraz skrzynkę administratora: server00.egzamin.local. oraz root.server00.egzamin.local.
Należy pamiętać o kropce na końcu każdej nazwy FQDN.
Kolorem niebieskim oznaczono numer serial, który zwiększamy przy każdej edycji pliku, informując w ten sposób serwery o zmianie zawartości bazy.
Linie oznaczone na czerwono (odnoszące się do pętli zwrotnej) usuwamy lub zastępujemy własnymi wpisami.
Po uzupełnieniu nagłówka SOA przechodzimy do dodawania właściwych rekordów:
Jeżeli adres IP przydziela serwer DHCP, w sytuacji pobrania innego adresu nasze wpisy statyczne przestaną działać. Należy wówczas ustawić statyczną konfigurację interfejsu lub wykonać stałą rezerwację adresu w DHCP.
Przechodzimy do konfiguracji strefy reverse.
Kopiujemy plik szablonu db.127 pod nazwę podaną w named.conf.local (reverse.egzamin.local.db) i otwieramy go:
$ sudo cp /etc/bind/db.127 /etc/bind/reverse.egzamin.local.db $ sudo nano /etc/bind/reverse.egzamin.local.db
Podobnie jak w strefie forward, w nagłówku zamieniamy localhost. na nazwę domenową naszego serwera oraz aktualizujemy numer serial przy każdej zmianie.
Modyfikujemy właściwe rekordy strefy:
Również tutaj bezwzględnie pamiętamy o kropkach na końcach nazw domenowych.
W tym pliku dodajemy rekordy PTR dla wszystkich hostów posiadających rekordy A w strefie forward (z pominięciem aliasów CNAME). Zapisujemy plik i opuszczamy edytor.
Sprawdzamy poprawność składniową plików konfiguracyjnych za pomocą komend:
$ sudo named-checkconf $ sudo named-checkzone egzamin.local /etc/bind/forward.egzamin.local.db $ sudo named-checkzone 10.168.192.in-addr.arpa /etc/bind/reverse.egzamin.local.db
W poleceniach named-checkzone najpierw podajemy nazwę strefy, a następnie ścieżkę do weryfikowanego pliku. Prawidłowy wynik kończy się komunikatem OK.
Gdy konfiguracja nie wykazuje błędów, restartujemy usługę BIND9 i sprawdzamy jej stan:
$ sudo systemctl restart named $ systemctl status named
Ostatnim etapem jest przygotowanie systemu do kierowania zapytań do naszego serwera DNS.
Konfigurację zaczynamy od weryfikacji Netplana. Upewniamy się, że w sekcji nameservers aktywnej karty sieciowej wprowadzony jest adres naszego serwera DNS, czyli 192.168.10.10.
Wprowadzoną konfigurację stosujemy komendą:
$ sudo netplan apply
Testujemy działanie serwera za pomocą poleceń dig oraz nslookup:
$ dig klient1.egzamin.local $ nslookup klient1.egzamin.local
Zdarza się, że zapytanie nie zostanie obsłużone od razu. W narzędziu dig widzimy brak sekcji odpowiedzi, a nslookup zwraca błąd SERVFAIL. Wynika to z faktu, że system odpytuje domyślny lokalny stub-resolver 127.0.0.53, omijając BIND9.
W takim przypadku należy wyedytować plik /etc/resolv.conf. W stanie domyślnym wskazuje on adres pętli zwrotnej oraz domyślną domenę localdomain.
Plik modyfikujemy w następujący sposób:
Po naniesieniu zmian zapisujemy plik i wychodzimy.
Ponowne wywołanie polecenia dig zwraca sekcję ANSWER: 1 (zaznaczoną na zielono), a nslookup bez problemu tłumaczy nazwę na docelowy adres IP. Od tego momentu usługa odpowiada prawidłowo.
Opcja search w pliku resolv.conf określa domenę przeszukiwania. Standardowo przy weryfikacji hosta podaje się pełną nazwę domenową. Dzięki opcji search wystarczy wpisać samą nazwę hosta (klient1), a system sam doklei resztę domeny. Działa to analogicznie przy poleceniu ping.
W systemie Ubuntu plik resolv.conf jest dynamicznie generowany, przez co po restarcie powraca do stanu pierwotnego. Przechodzimy do trwałego zapisania wprowadzonych zmian.
Usuwamy istniejący link symboliczny i tworzymy fizyczny plik:
$ sudo rm /etc/resolv.conf $ sudo nano /etc/resolv.conf
W pliku wpisujemy następującą zawartość:
nameserver 192.168.10.10 options edns0 search egzamin.local
Zapisujemy plik i opuszczamy nano.
Nadajemy plikowi atrybut niezmienności (ang. immutable) i restartujemy nasz serwer, aby potwierdzić trwałość konfiguracji:
$ sudo chattr +i /etc/resolv.conf $ sudo reboot
Po restarcie sprawdzamy zawartość pliku poleceniem cat /etc/resolv.conf.
Wpisy pozostały zachowane. W ten sposób prawidłowo skonfigurowaliśmy nasz serwer DNS i jest on gotowy do obsługi ruchu stacji klienckich. Adres serwera DNS przekazujemy klientom za pośrednictwem serwera DHCP lub konfigurujemy go statycznie na ich kartach sieciowych. Na stacjach z systemem Ubuntu Desktop plik resolv.conf konfigurujemy analogicznie jak na serwerze.