ISC DHCP Server Ubuntu Server
Więcej miejsc do posłuchania:
Link do artykułu.
0:00 Wprowadzenie
0:29 Proces Instalacji Systemu Ubuntu Server
4:42 Instalacja Serwera DHCP
7:10 Edycja Konfiguracji Serwera DHCP
10:32 Konfiguracja Klienta DHCP
19:32 Analiza Pakietów
22:32 Podsumowanie
Transkrypcja
Cześć. Chcesz dowiedzieć się jak zainstalować i skonfigurować serwer DHCP w systemie Linux? Jeśli tak, to dobrze trafiłeś. Za chwilę pokażę, jak to zrobić na przykładzie pakietu isc-dhcp-server i systemu Ubuntu Server. Dodatkowo pokażę również, jak wygląda działanie DHCP na podstawie monitorowania pakietów wykorzystując TCP Dump i Wireshark’a. Zapraszam.
Najpierw pokażę proces instalacji systemu Ubuntu Server. Wybieram język i układ klawiatury. Teraz będą konfigurowane interfejsy sieciowe. Do tej maszyny wirtualnej są podłączone dwa interfejsy. Jeden w VLAN 50, czyli ten o nazwie ens160 i drugi w VLAN 253. Dwa interfejsy są podłączone z tego względu, że VLAN 253 dostarcza internet a będziemy go potrzebowali w konfiguracji. Jak widać domyślnie przez DHCP instalator próbuje uzyskać konfigurację. W żadnym z tych VLAN-ów nie ma serwera DHCP. Konfigurację ustawiamy ręcznie. Wpisujemy adres sieci z maską. w tym przypadku dla VLAN-u 53 będzie to 10.53.53.0/24 adres IP 10.53.53.1 brama 10.53.53.254 server DNS 1.1.1.1 Cloudflare. Naciskamy zapisz. To samo robimy z drugim interfejsem. Też konfiguracja ręczna. Adres sieci 10.253.253.0 z maską 24 bitową. Adres IP tego interfejsu to będzie 10.253.253.200 Brama domyślna 10.253.253.254 też wstawiamy serwer DNS Cloudflare. Naciskamy Zapisz. Konfiguracja została zapisana, naciskamy Wykonano. Nie używamy serwera proxy to też naciskamy Wykonano. Tutaj można opcjonalnie zmienić serwer z mirrorem pakietów Ubuntu, naciskamy Wykonano. Tego nie zmieniamy.
To jest zapytanie o aktualizacje instalatora. Tutaj można wybrać np Update to the new installer, wtedy instalator zostanie pobrany najnowszy. Teraz formatowanie dysku. Tutaj potwierdzamy czy chcemy wykonać akcję tzw. destrukcyjną. Teraz podajemy dane do utworzenia konta użytkownika i wstępnej konfiguracji serwera. Imię, nazwa serwera, nazwa użytkownika i hasło dla użytkownika. Naciskamy Done. Możemy zainstalować serwer OpenSSH, następnie Done. Teraz chcielibyśmy zainstalować pakiet serwera DHCP. Jednak jak tutaj widać na tej liście nie ma niestety redefiniowanej paczki więc musimy nacisnąć po prostu Done i restartujemy maszynę.
Teraz będziemy instalować serwer DHCP. Logujemy się na utworzone w poprzednim kroku konto. Sprawdźmy jaka jest konfiguracja sieciowa. Tylko przed tym musimy musimy zainstalować paczkę z net-tools’ami. Teraz możemy sprawdzić konfigurację interfejsów sieciowych, jak widać konfiguracja poprzednia została zachowana. Instalujemy teraz pakiet isc-dhcp-server. Po instalacji i wykonaniu polecenia sudo service isc-dhcp-server status w celu sprawdzenia statusu daemona widzimy komunikat Failed. Widać, że konfiguracja jest błędna na starcie. Więc niestety świeżo po zainstalowaniu tego pakietu przed skonfigurowaniem nie będzie można go użyć, dlatego musimy najpierw wyedytować plik zlokalizowany w /etc/default/isc-dhcp-server. W tym pliku należy wskazać nazwę interfejsu, który będzie służył komunikacji z serwerem DHCP. Tutaj musimy właśnie wskazać ten, który jest podłączony do VLAN-u 53, czyli interfejs pierwszy na liście. Najpierw wyjdźmy z edytora i przypomnijmy sobie jak się dokładnie nazywał ten interfejs. Jest to ens160. Ponownie edytujemy ten sam plik i wprowadzamy nazwę interfejsu ens160 w polu INTERFACESv4. Jeśli jest kilka interfejsów, które mają służyć komunikacji z serwerem DHCP to po spacji wprowadzamy te wszystkie interfejsy. Zapisujemy plik.
Kolejnym etapem będzie edycja konfiguracji serwera DHCP. Jest to ścieżka /etc/dhcp/dhcpd.conf. Tutaj mamy dokładnie opisane co każda linijka robi. Pierwsze co musimy zrobić to wskazać, że jest to serwer autorytatywny, czyli podstawowy serwer w naszej sieci. W kolejnym etapie musimy sprecyzować, jak ma wyglądać konfiguracja dostarczana przez serwer DHCP. Możemy edytować już predefiniowaną konfigurację. Wpisujemy tam adres sieci, w naszym przypadku to będzie 10.53.53.0. Maskę zachowujemy, bo jest prawidłowa 24 bitowa i poniżej wprowadzamy konfigurację, wpisujemy option routers, tutaj wskazujemy adres IP routera. W wierszu option subnet-mask wpisujemy maskę sieci. W wierszu option domain-name-servers Wpisujemy adresy serwerów DNS np Cloudflare z 1.1.1.1 Zakres adresów IP które mają być dynamicznie przydzielane przez serwer DHCP. Definiujemy to w wierszu o nazwie range to będzie przedział od adresów 100 do 200, czyli wpisujemy 10.53.53.100 i 10.53.53.200 Możemy przejrzeć dalszą konfigurację, mamy tutaj przykładowe konfiguracje serwera DHCP. Zapisujemy plik. W celu zastosowania konfiguracji, uruchamiamy serwer DHCP poleceniem sudo service isc-dhcp-server start. Nie wyświetliło żadnego błędu. Wykonujemy komendę sudo service isc-dhcp-server status. Widzimy pole active jako running.
Kolejną rzeczą, jaką chcemy zrobić to skonfigurować Firewalla, zezwolić na ruch z serwera DHCP poleceniem sudo ufw allow 67/udp reguły zostały dodane poleceniem sudo ufw reload przeładowujemy Firewalla. Tutaj mamy komunikat, że Firewall nie jest włączony, reload został pominięty. Dlatego uruchomimy komendą enable Firewalla sudo ufw enable. Firewall jest włączony, teraz przejdziemy do konfiguracji klienta DHCP. Pokażę to też na przykładzie instalatora Ubuntu Server, gdyż tam wszystko dokładnie widać. Uruchamiamy maszynę. Wybieramy język i tutaj już mamy konfigurację interfejsów. Na ten moment jeszcze nie został przydzielony adres IP ale po sekundzie pojawia się, bo akurat nastąpiła komunikacja z serwerem DHCP. Informacje przydzielone przez serwer DHCP możemy sprawdzić od razu tutaj z poziomu instalatora. Widać tutaj, że został przydzielony pierwszy adres z zakresu, 10.53.53.100 i pamiętamy, że zakres to był od 100 do 200. Wróćmy do serwera DHCP, przypomnijmy sobie konfigurację, sieć się zgadza, korzystając z tcpdump będziemy przechwytywali pakiety DHCP. Poleceniem tcpdump -i (nazwa interfejsu) ens160. Ten interfejs będzie monitorowany, Flaga -i wskazuje, że będziemy podawali interfejs, wskazujemy protokół UDP, port 67 i port 68 -vvv oznacza, że będziemy widzieli dużo szczegółów. Tutaj nie ma uprawnień, bo nie wskazaliśmy, żeby to wykonać w trybie boga, dlatego wpisujemy sudo !! Teraz odbywa się nasłuchiwanie. Każdy ruch DHCP zostanie przechwycony i wypisany na konsoli. To już widać w międzyczasie ponownie został serwer DHCP odpytany, ale teraz wymusimy odpytanie.
Czyli widać, że to działa. Konfiguracja jest przydzielana przez nasz serwer DHCP. Teraz zobaczymy dzierżawę DHCP przydzielaną przez nasz serwer. Został przydzielony. Adres 10.53.53.100, dzierżawa trwa 10 minut. Też widać nazwę klienta DHCP, domyślna nazwa tej maszyny to ubuntu-server. Dlatego w polu client hostname mamy tutaj ubuntu-server. hardware ethernet to jest adres Mac klienta. Teraz zrestartujemy serwer DHCP w celu sprawdzenia, czy jakieś dodatkowe informacje są jeszcze zbierane. W tym celu wykonujemy komendę sudo service isc-dhcp-server restart. Jak widać nie ma żadnych zmian w dzierżawie, dlatego musimy ręcznie wyczyścić dzierżawę w celu sprawdzenia pełnego ruchu w ramach DHCPa. Niestety nie ma tutaj komendy, która by opróżniła całą dzierżawę ale po wykonaniu błędnej komendy, widzimy, że plik bazy danych z dzierżawami, to ten który poprzednio otworzyliśmy, jego ścieżka to var/lib/dhcp/dhcpd.leases i ten plik musimy opróżnić. W tym celu zatrzymujemy serwer DHCP poleceniem sudo service isc-dhcp-server stop. Teraz usuwamy pliki znajdujące się właśnie w katalogu z plikiem z dzierżawą. W środowisku produkcyjnym nie powinno się czyścić tego pliku ale tutaj chcemy właśnie sprawdzić jak odbywa się pełna komunikacja w ramach DHCP, jak widać potrzebujemy znowu trybu boga.
Wyłączamy klienta, żeby nie emitował pakietów DHCP. Zobaczmy, jak wygląda stan serwera DHCP, powinien być nieaktywny. Tutaj jak widać serwer jest martwy, teraz możemy go ponownie uruchomić. Serwer jest aktywny. Sprawdźmy, jak wygląda plik dzierżawy aktualnie. Plik z dzierżawą bardzo uszczuplał, dokumentacja tego pliku jest opisana w manualu. Plik został zapisany właśnie przez ten pakiet. Ten plik jest automatycznie generowany i nie wolno go usuwać. Co oczywiście zrobiliśmy, ale to tylko z tego względu, że chcemy, aby dzierżawa była czysta i mamy świadomość konsekwencji jakie to za sobą niesie. Także aktualnie żaden adres nie jest przydzielony, ale to się zaraz zmieni. Aktualnie co chcemy zrobić, to zapisać pakiety do pliku, dlatego polecenie tcpdump troszeczkę zmodyfikujemy będzie ono brzmiało sudo tcpdump -i ens160, czyli ten interfejs sieciowy na którym działa serwer DHCP będą to pakiety UDP na porcie 67 i 68 i to co się zmieni to zmieniamy dalszą część polecenia na -w i tutaj nazwa pliku, dhcp-monitor.dmp na przykład, ten plik zostanie zapisany nie w formie tekstowej tylko w formie binarnej. Będziemy mogli go otworzyć w programie Wireshark i tym sposobem sobie wygodnie analizować zebrane pakiety, także zatwierdzamy tą komendę … monitoring, uruchamiamy maszynę wirtualną. Ona już w zasadzie w tym momencie zaczęła też wysyłać pakiet DHCP. Zatrzymamy się właśnie na konfiguracji sieci. Poszedł pakiet DHCP, otrzymaliśmy adres IP, ten sam, to w zasadzie z dwóch powodów. Pierwszy jest taki, że lista z dzierżawą została wyczyszczona, a druga jest taka, że nawet jeślibyśmy jej w sumie nie wyczyścili to ten adres IP był przypisany do tej maszyny z dzierżawy.
Zakładając, że w sieci by było kilka urządzeń to niestety konsekwencje mogłyby być takie tego czyszczenia dzierżawy, że drugie urządzenie też by mogło otrzymać adres z końcówką 100 i nastąpiłby konflikt adresów IP. Tutaj zobaczmy, konfiguracja została przydzielona, zatrzymujemy na serwerze DHCP zbieranie pakietów. Zostało zebranych 9 pakietów. Poprzednio było 7. Też widać, że po wyczyszczeniu listy z dzierżawą, mamy więcej tutaj danych dotyczących tej samej dzierżawy. Analizując, pierwsza dzierżawa jest właśnie z godziny minuta 39, druga dzierżawa też, nawet dokładnie ta sama sekunda. Tylko warto zwrócić uwagę, że już w dzierżawie 3, dotyczącej tego samego adresu IP, jest tutaj już 40, także minuta różnicy. Sprawdźmy na szybko jeszcze tutaj nazwę klienta np. Ta dzierżawa posiada przypisaną nazwę, tak jak wcześniej było wspominane instalator dodał taką nazwę hosta tymczasową. Adres Mac wszędzie jest taki sam, co nie dziwi. Ale w sumie jedyną różnicą, oprócz dat, jest fakt, że tylko w jednej dzierżawie jest wpisana dla klienta, stąd taka ilość dzierżaw.
Teraz chcemy wysłać ten pakiet na serwer transferu plików. Będziemy potrzebowali tego pliku w celu przeanalizowania pakietów w Wiresharku. Wykonujemy polecenie curl –upload-file dhcp-monitor.dmp, to tutaj jest nazwa źródłowa tego pliku. Jako nazwa docelowa pliku wpisujemy https://transfer.sh/dhcp-monitor.dmp zwrotnie otrzymujemy link do pobrania pliku. W taki sposób można sobie szybko pobrać ten plik. Następnie zapisujemy. Możemy go otworzyć w Wiresharku. Po kolei przeanalizujemy pakiety. Pakiet z time 0, został właśnie wysłany pakiet DHCP discover. Tu mamy aktualny adres IP klienta. Składa się on z samych zer, bo jest nie przypisany. A więc analizując pakiety najpierw jest wysłane zapytanie ogólnie do sieci, czy jest w niej serwer DHCP i czy może zostać przydzielony jakiś adres IP i tutaj odzywa się do klienta jeden z serwerów, czyli właściwie ten nasz skonfigurowany i aktualny adres IP klienta to jeszcze jest 0.0.0.0 on mu przydziela w zasadzie jeszcze narazie dopiero oferuje, że może mu przydzielić lub odnowić jemu adres z końcówką 100.
W kolejnym etapie klient wysyła zapytanie, że chce otrzymać konfigurację i tutaj nadal się zwraca ogólnie do wszystkich. W tym momencie jak widać nie ma konfiguracji dalej. Kolejnym etapem jest żądanie DHCP ACK. W tym żądaniu klient już otrzymuje od serwera DHCP przydział. Zostaje mu przydzielony właściwie ten adres 10.53.53.100 Serwer sobie odnotowuje w dzierżawie, że przydzielił właśnie ten adres temu konkretnemu urządzeniu na określony czas. Kolejnym etapem jest zwolnienie tego adresu z konfiguracji. Warto zwrócić uwagę, że wszystko jest właściwie w ramach jednej transakcji, mimo tego, że czas jest już odległy. W tym momencie wykonaliśmy ręcznie pozyskanie adresu IP z serwera DHCP. Także klient się wrócił w tym celu z aktualnym adresem IP ma wyczyszczoną dalszą konfigurację i żąda właśnie nowego przydziału. Zwraca się już jako nowa transakcja. To już kolejny raz to co wcześniej zwraca się ogólnie czy jest jakiś serwer DHCP, że chce adres, serwer to przechwytuje i w żądaniu o ID 7 składa wstępną ofertę, że adres klienta to będzie właśnie 100. W kolejnym etapie klient zwraca się z zadaniem adresu i w odpowiedzi ACK dostaje adres IP z całą pozostałą konfiguracją. Czyli jak tutaj widać, dostaje maskę m.in. te wszystkie opcje, które wtedy wpisaliśmy w konfiguracji serwera DHCP. Tutaj widać wszystko się zgadza. Adres Mac jest identyczny jak w żądaniu otrzymanym przez serwer DHCP.
Konfiguracja serwera DHCP na początku może wydawać się skomplikowana. Jednak jak mogłeś zauważyć, w plikach konfiguracyjnych jest dokładnie opisane co każda linijka robi. Wg dokumentacji ISC pliki konfiguracyjne można traktować jako dokumentację konfiguracji serwera DHCP. Do następnego razu.