Ten materiał poświęcony będzie instalacji serwera DHCP na Ubuntu 20.04. Tym samym rozpoczniemy instalację
pierwszego z trzech podstawowych serwerów – zostaje jeszcze serwer routingu oraz serwer DNS. DHCP
to skrót od Dynamic Host Configuration Protocol – protokół dynamicznego konfigurowania hostów.
Jak nie trudno się domyśleć, jest to mechanizm pozwalający ”dynamicznie konfigurować hosty”. Oznacza to, że w
sieci w której działa serwer DHCP, inne urządzenia będą mogły od niego pobierać potrzebne ustawienia do działania
w sieci. Wśród tych ustawień są: adres IP, maska sieci, adres bramy domyślnej oraz adresy DNS. Pytanie się
nasuwa: Skąd klient wie, gdzie zgłosić swoje zapytanie skoro nie ma przypisanego adresu IP? Odpowiedź brzmi: nie
wie. Klient znajduje w sieci serwer DHCP wysyłając odpowiednią wiadomość na limitowany adres rozgłoszeniowy
– 255.255.255.255. Kiedy serwer zostanie odnaleziony, klient wysyła odpowiednie zapytania, na które serwer
DHCP odpowiada odpowiednią konfiguracją.
Adres IP przypisany przez DHCP jest dynamiczny. Oznacza to, że po jakimś czasie następuje jego zwolnienie
i pobranie nowego adresu. W większości przypadków DHCP przypisze ten sam adres IP, jednak może się tak zdarzyć,
iż DHCP przypisze inny adres. Otóż adresy IP są dzierżawione na określoną ilość czasu. Po tym czasie wracają do
puli wolnych adresów IP, a serwer przypisuje inne. DHCP jest na pewno wygodnym mechanizmem jednak tylko w
przypadku klientów. Wszelkiego rodzaju urządzenia sieciowe, serwery, drukarki i inny sprzęt tego typu musi być
adresowany statycznie. Dzieje się tak iż istnieje ryzyko, że takie urządzenie dostanie inne IP, a wtedy
mogą się pojawić problemy z działaniem niektórych usług.
Dodatkowo przed instalacją serwera DHCP warto zaktualizować repozytoria i pakiety znanymi komendami:
$ sudo apt update
$ sudo apt upgrade
Jako, że protokół DHCP to tylko przepis na gotowy produkt, to na rynku istnieje wiele rozwiązań, różnych
producentów implementujących ten mechanizm. Jedną z najpopularniejszych implementacji serwer DHCP jest
ISC DHCP. Została ona stworzona przez Internet Systems Consortium – organizację
non-profit zajmującą się tworzeniem oprogramowania dla sieci komputerowych. Pierwsza wersja ISC DHCP została
opublikowana w 1999 roku i jest rozwijana po dziś dzień. Pokazuje to jak nie wiele wymaga dziedzina sieci
komputerowych.
Aby zainstalować ISC DHCP należy wydać polecenie:
$ sudo apt install isc-dhcp-server
Tak bowiem nazywa się pakiet z tą implementacją. Po poprawnej instalacji możemy przejść do konfiguracji.
Konfiguracja serwera DHCP jest bajecznie prosta. Wszystko opiera się o odpowiednie pliki konfiguracyjne,
które muszą być odpowiednio edytowane, inaczej wszystko może się uszkodzić. Na podstawie naszych plików
konfiguracyjnych będą tworzone inne pliki i dowiązania. W momencie kiedy coś pójdzie nie tak, to może być
trudno naprawić powstałe problemy. Dlatego proszę zwracać uwagę na wszystko co robimy.
Najpierw musimy sprawdzić czy nasza usługa jest aktywna. Można to zrobić korzystając z polecenia
systemctl wraz z parametrem status. Nasza usługa nazywa
się isc-dhcp-server. Wpisujemy, więc:
$ sudo systemctl status isc-dhcp-server
Interesuje nas przede wszystkim pole Active. Bardzo ważne jest aby usługa NIE DZIAŁAŁA. Czyli
failed jest tutaj poprawnym statusem. Jeżeli usługa by nam się podniosła to
sudo systemctl stop isc-dhcp-server skutecznie ją ubije. Dodatkowymi błędami się obecnie nie
przejmujemy. Informują nas, że usługa nie została skonfigurowana. Wyjść z tego okienka możemy korzystając z Ctrl+C.
Generalnie, aby serwer DHCP zadziałał poprawnie, musimy dokonać zmian w dwóch plikach:
/etc/default/isc-dhcp-server
/etc/dhcp/dhcpd.conf
Aby otworzyć pierwszy z tych plików wpisujemy:
$ sudo nano /etc/default/isc-dhcp-server
Plik /etc/default/isc-dhcp-server przechowuje informacje na temat interfejsów na których
usługa będzie nasłuchiwać żądań. Poprawnie wygenerowany plik wygląda następująco (pomijając komentarze):
(…)
INTERFACESv4=""
INTERFACESv6=""
Jeżeli otworzony plik nie ma takiej struktury to należy takową utworzyć. Nas interesuje pole INTERFACESv4 gdzie w cudzysłowie wpisujemy nazwę interfejsu LAN. W naszym przypadku jest to enp0s8. Ostatecznie plik ma wyglądać tak jak na screenie.
Istotniejszym z naszego punktu widzenia plikiem jest /etc/dhcp/dhcpd.conf. Przechowuje
on konfigurację naszego demona DHCP (inaczej usługi w nomenklaturze Windowsowej) i stanowi najważniejszy
element całej konfiguracji. Jego złe edytowanie może spowodować wiele problemów, dlatego należy
podchodzić do niego ostrożnie. Najlepiej wykonać sobie jego kopię.
Aby wykonać kopię pliku /etc/dhcp/dhcpd.conf należy wpisać polecenie:
$ sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf-kopia
Potem możemy wyświetlić zawartość katalogu /etc/dhcp/ poleceniem:
$ ls -l /etc/dhcp
i widzimy, że kopia została wykonana.
Edytujemy zatem nasz plik poleceniem:
$ sudo nano /etc/dhcp/dhcpd.conf
Pierwszym interesującym nas elementem będzie wpis authoritative. Domyślnie
jest umieszczony w komentarzu, który można rozpoznać po znaku # na początku linii. Wpis ten informuje
nasz serwer DHCP iż jest jedynym serwerem tego typu w sieci. Dzięki temu ISC DHCP będzie odmawiać klientom z innych
podsieci przyznania adresu IP. Kiedy ta opcja pozostałaby wyłączona to serwer DHCP po prostu ignorowałby żądania
klienta. Wpis ten istotny jest przy konfiguracji serwera DNS dlatego już na początku warto zdjąć z niego komentarz –
kasując znak #
Następnie odnajdujemy sekcję w której komentarz mówi "A slightly different configuration for an internal
subnet". Jest to przykładowa konfiguracja serwera DHCP, która wystarczy nam do ćwiczeń. Na początku musimy
odkomentować wszystkie komentarze od subnet do znaku }, tak jak jest pokazane
na powyższym screenie. Jest to bardzo istotne ponieważ w przypadku złego odkomentowania, usługa może już
nie wstać. Oczywiście musimy dostosować konfigurację do naszej sieci. Pozwolę sobie przypomnieć parametry naszej sieci:
- Adres sieci: 192.168.10.0
- Maska sieci: 255.255.255.0 - /24
- Adres (przyszłej) bramy: 192.168.10.10
- Adres (przyszłego) serwera DNS: 192.168.10.10
- Adres serwera: 192.168.10.10
- Adres rozgłoszeniowy: 192.168.10.255
Oczywiście parametry te zależą od adresacji i u każdego mogą być zupełnie inne, dlatego też proszę nie
przepisywać bezmyślnie tych danych z tego dokumentu.
Analiza sekcji "A slightly different configuration for an internal subnet"
Omówmy sobie teraz ten fragment pliku
konfiguracyjnego, a konkretnie, co poszczególne opcje oznaczają.
- subnet X.X.X.X netmask Y.Y.Y.Y { - jest to opcja definiująca naszą sieć w serwerze
DHCP. Podaję mu podstawowe informacje o niej. W miejscu X.X.X.X podajemy adres sieci np. 192.168.10.0, zaś
w miejscu Y.Y.Y.Y podajemy maskę naszej sieci np. 255.255.255.0;
- range X.X.X.X Y.Y.Y.Y; - definiuje nam przedział z którego serwer DHCP będzie przydzielał
adresy IP. W miejscu X.X.X.X podajemy najniższy adres IP, który chcemy przeznaczyć z naszej puli. W miejscu
Y.Y.Y.Y podajemy najwyższy adres IP z naszej puli. My ustawiamy pulę liczącą 21 adresów;
- option domain-name-servers X.X.X.X/example.org; - w tej sekcji podajemy adresy
DNS, które chcemy aby nasi klienci używali. Mogą być w formie adresów IP (X.X.X.X) lub w formie adresów
mnemonicznych (example.org). W moim przypadku będzie to adres serwera;
- option domain-name „internal.example.org”; - tutaj podajemy nazwę domenową naszej
sieci. Obecnie możemy zostawić to co jest oryginalnie wpisane;
- option subnet-mask X.X.X.X; - w tym miejscu podajemy maskę naszej sieci. W moim przypadku
będzie to maska /24 czyli 255.255.255.0;
- option routers X.X.X.X; - tutaj podajemy bramę domyślną naszej sieci. Obecnie takowej nie ma, jednak w
przyszłości będzie, więc podajemy adres naszego serwera Ubuntowego;
- option broadcast-address X.X.X.X; - zamiast X.X.X.X podajemy adres rozgłoszeniowy naszej sieci. Rzecz prosta. W moim
przypadku jest to 192.168.10.255;
- default-lease-time X; - domyślny czas utrzymywania dzierżawionego adresu IP. Czas ten podajemy w
sekundach. Domyślna wartość czyli 600 jest wystarczająca;
- max-lease-time X; - maksymalny czas dzierżawy o jaki klient może poprosić serwer.
Tym samym kończymy też omawianie tegoż pliku konfiguracyjnego. Kiedy wszystko zostanie już skonfigurowane
to należy pamiętać o zapisaniu zmian w pliku. Aby dowiedzieć się więcej informacji na temat ISC DHCP
zalecam skorzystać z zasobów Internetu.
Po zapisaniu pliku pozostało nam już tylko uruchomić lub
zrestartować serwer DHCP. Wykorzystamy do tego znaną już komendę, jednak z innymi parametrami:
$ sudo systemctl start isc-dhcp-server
lub
$ sudo systemctl restart isc-dhcp-server
Następnie możemy sprawdzić czy poprawnie usługa została
uruchomiona wykorzystując komendę systemctl z parametrem status:
$ sudo systemctl status isc-dhcp-server
Pole Active musi wskazywać active (running) zaś jedyny błąd
jaki może się pojawić to błąd o braku deklaracji zakresu dla karty enp0s3. Błąd ten zniknie po
instalacji serwera routingu, więc nie należy się nim przejmować. Jeżeli pojawia się inny błąd
to może oznaczać to złą konfigurację serwera DHCP.
Kolejną rzeczą jaką należy zrobić, jest konfiguracja klienta lub tak jak w naszym przypadku
klientów tak aby korzystali z serwera DHCP. Podłączymy do naszego serwera dwóch klientów, jeden
z systemem Ubuntu Desktop 20.04, a drugi z Windows 8.1.
W Ubuntu możemy to zrobić w ustawieniach sieci tak jak wcześniej ustawialiśmy stałe IP. Tam wybieramy Przewodowe, wchodzimy w Opcje i w zakładce IPv4 ustawiamy Automatycznie. Zapisujemy zmiany i warto przeładować sobie interfejs korzystając z odpowiedniego do tego przycisku (przełącznik na głównym ekranie, ten fioletowy).
Następnie klikamy ponownie w Ustawienia i w zakładce Informacje sprawdzamy co pobrała nasza karta. Jak widzimy karta sieciowa pobrała pierwszy dostępny adres, czyli 192.168.10.200.
Możemy też uruchomić terminal i tam przy użyciu polecenia ip a także sprawdzić czy pobrany adres jest właściwy. Dodatkowo możemy zapingować na serwer i jak widać odpowiedź wraca.
Podobną czynność wykonamy na kliencie z systemem Windows 8.1. Ustawiamy kartę sieciową na automatyczny pobór adresacji i po uruchomieniu wiersza poleceń wpisujemy polecenie ipconfig /all. Tym razem widzimy adres 192.168.10.201, czyli następny wolny.
Bardzo ciekawym poleceniem dostarczanym przez ISC DHCP jest:
$ sudo dhcp-lease-list
Wyświetla nam ono wszystkie obecnie trwające dzierżawy adresów IP. Można tutaj sprawdzić chociażby
adres MAC czy IP komputerów, ale jedynie tych które korzystają z usług DHCP. Widać tutaj również datę
wygaśnięcia dzierżawy, a także po wgraniu odpowiedniego pliku – producenta.
Na koniec sprawdzimy połączenie z serwera do naszych klientów. Jak widać działa, połączenie pomiędzy klientami, a serwerem zostało poprawnie nawiązane.
Ostatnią rzeczą jaką pozostaje nam jeszcze zrobić, jest rezerwacja konkretnego adresu IP dla klienta. Wystarczy
skojarzyć konkretny adres IP z adresem fizycznym klienta.
Edytujemy ponownie plik "/etc/dhcp/dhcpd.conf" poleceniem:
$ sudo nano /etc/dhcp/dhcpd.conf
i odszukujemy pozycję #host fantasia {
Oczywiście należy zdjąć komentarze zaczynając od host..., a kończąc na } i podać nazwę naszego hosta, jego adres MAC oraz adres IP, który chcemy dla niego zarezerwować. U nas będzie to 192.168.10.25. Zapisujemy zmiany w pliku i restartujemy serwer DHCP.
Na koniec pozostaje nam w ustawieniach sieci na kliencie, znanym już "suwakiem" wyłączyć i włączyć "Ustawienia sieci przewodowej" oraz sprawdzić jaki adres IP pobrał klient. Jak widać jest to 192.168.10.25, czyli taki jaki został dla niego zarezerwowany.