DHCP (ang. Dynamic Host Configuration Protocol – protokół dynamicznego konfigurowania hostów) – protokół komunikacyjny umożliwiający hostom uzyskanie od serwera danych konfiguracyjnych, np. adresu IP hosta, adresu IP bramy sieciowej, adresu serwera DNS, maski podsieci. Protokół DHCP jest zdefiniowany w RFC 2131 i jest następcą BOOTP. DHCP został opublikowany jako standard w roku 1993. [Wikipedia...]
Instalacja serwera DHCP uzależniona jest od dystrybucji Linuksa. W Debianie należy wydać polecenie:
apt-get install isc-dhcp-server
Po zainstalowaniu należy odpowiednio skonfigurować usługę. Cała konfiguracja serwera DHCP zapisana jest w pliku tekstowym dhcpd.conf, który znajduje się w katalogu /etc/dhcp.
UWAGA: Po instalacji plik dhcpd.conf zawiera przykładowe zakomentowane wpisy. Na potrzeby ćwiczenia proponuję je usunąć.
Serwer DHCP może jednocześnie obsługiwać wiele podsieci. Dysponując kilkoma zainstalowanymi kartami sieciowymi w Linuksie możemy przydzielać adresy IP dla różnych podsieci. W najprostszym przypadku przydzielamy parametry sieciowe dla jednej podsieci. Podstawowy parametr, który należy ustawić w pliku dhcpd.conf to podsieć, dla której będzie pracował serwer dhcp.
DHCP skonfigurujemy dla sieci: 192.168.14.0/24, router i DNS to nasz serwer o adresie IP 192.168.14.1, a zakres przydzielanych adresów to 192.168.14.20 do 192.168.14.30. W przypadku, gdy nasza karta sieciowa ma inny adres niż 192.168.14.1 należy odpowiednio zmodyfikować wszystkie odwołania w plikach konfiguracyjnych.
Upewniamy się, że w pliku /etc/default/isc-dhcp-server znajduje się wpis:
INTERFACESv4="eth0"
gdzie "eth0" to nazwa interfejsu sieciowego, na którym ma być uruchomiona usługa DHCP. Jeżeli usługa ma działać na kilku interfejsach, to ich nazwy oddzielamy spacjami:
INTERFACESv4="eth0 eth1 wlan0"
Podsieć ustawiamy stosując parametr „subnet”. W pliku konfiguracyjnym /etc/dhcp/dhcpd.conf wpisujemy:
subnet 192.168.14.0 netmask 255.255.255.0 {
...
}
W tym momencie zdefiniowaliśmy podsieć, dla której ustawimy dokładniejsze parametry. Oczywiście adres podsieci oraz maska powinna być dopasowana do możliwości i potrzeb projektowanej sieci. Należy pamiętać, że serwer DHCP nie uruchomi się, jeżeli w pliku konfiguracyjnym nie umieścimy zakresu podsieci, do której należy jakaś karta sieciowa. Pomiędzy klamrami, zamiast trzech kropek ustawimy podstawowe parametry sieciowe. Pierwszym z nich jest zakres adresów IP do przydzielenia komputerom klienckim. Ustawia się to za pomocą parametru „range”.
range 192.168.14.20 192.168.14.30;
Po zapisaniu zmian możemy sprawdzić działanie serwera DHCP. W tym celu należy uruchomić serwer poleceniem:
/etc/init.d/isc-dhcp-server start
W sytuacji, gdy serwer jest już uruchomiony musimy go zrestartować, by zmiany zapisane w pliku konfiguracyjnym odniosły efekt.
/etc/init.d/isc-dhcp-server restart
Po wykonaniu powyższych czynności dysponujemy sprawnym (jeszcze okrojonym) serwerem DHCP. Teraz pora na sprawdzenie poprawności działania serwera. W przypadku, gdy konfigurację wykonujemy w systemie wirtualnym musimy uruchomić kolejną wirtualną maszynę z dowolnym systemem operacyjnym. W przykładzie skorzystamy z systemu Windows 7. W celu poprawnego przeprowadzenia testu obie wirtualne maszyny powinny mieć ustawione karty sieciowe na sieć wewnętrzną. Gwarantuje to, że nasz klient otrzyma adres IP z właśnie konfigurowanego serwera, a nie z routera, czy innego serwera sieciowego wpiętego do sieci razem z naszym rzeczywistym komputerem. W przypadku, gdy konfigurujemy rzeczywisty serwer podłączony do sieci należy zadbać o to, by w danym momencie w naszej sieci nie funkcjonował żaden serwer DHCP. Po włączeniu systemu klienckiego należy odświeżyć przydzielany adres IP. W Windows 7 można to zrobić na dwa sposoby. Z linii poleceń wydając polecenie:
ipconfig /renew
Drugi sposób to wyłączenie i włączenie karty sieciowej w panelu sterowania.
W efekcie powinniśmy otrzymać:
lub
Jak widać na zrzutach klient otrzymał adres IP wraz z maską podsieci. Brak podstawowych parametrów takich jak adres serwera DNS oraz adres Bramy domyślnej. Są to kolejne parametry, które należy umieścić w pliku dhcpd.conf. Bramę domyślną definiujemy podając:
option routers 192.168.14.1;
Listę serwerów DNS definiujemy podając ich adresy IP po przecinku wydając polecenie:
option domain-name-servers 192.168.14.1, 194.204.159.1;
Po dodaniu powyższych opcji nasz serwer przekaże klientowi również adres bramy domyślnej oraz adresy serwerów DNS. Poniższy zrzut pokazuje uzyskane dane z serwera DHCP.
W tym momencie możemy zakończyć podstawową konfigurację serwera DHCP. Dysponujemy sprawnym serwerem przydzielającym niezbędne do funkcjonowania sieci lokalnej informacje. Pozostał jeszcze jeden pożyteczny parametr ustawiający czas dzierżawy adresu IP przez klienta. Czas ten ustalamy z wykorzystaniem opcji:
max-lease-time 86400;
gdzie liczba podawana jako parametr to liczba sekund dzierżawy (w przykładzie 24 godziny). Kompletny plik konfiguracyjny sprawnego serwera DHCP pokazano poniżej:
subnet 192.168.14.0 netmask 255.255.255.0 {
range 192.168.14.20 192.168.14;
option routers 192.168.14.1;
option domain-name-servers 192.168.14.1, 194.204.159.1;
max-lease-time 86400;
}
Z pozycji serwera mamy możliwość sprawdzenia kiedy i jakie komputery otrzymały adres IP z serwera DHCP. Informacje te przechowywane są w pliku:
/var/lib/dhcp/dhcpd.leases
Fragment tego pliku przedstawiono poniżej:
W powyższym pliku możemy znaleźć informacje o adresie IP, czasie rozpoczęcia i zakończenia dzierżawy oraz o nazwie komputera klienckiego i adresie MAC jego karty sieciowej.
W tym momencie przejdziemy do zaawansowanej konfiguracji serwera DHCP. Na potrzeby ćwiczeń ograniczymy się wyłącznie do „statycznego” przydzielania adresów IP na podstawie adresów MAC komputerów klienckich. Często warto połączyć ze sobą automatyczne przydzielanie adresów IP z niezmiennością tych adresów dla poszczególnych maszyn klienckich. Jest to przydatne w sytuacji, gdy chcemy się odwoływać do zasobów systemowych poszczególnych klientów, czy w sytuacji, gdy chcemy logować ruch sieciowy poszczególnych użytkowników sieci. Przypisanie konkretnych adresów IP do konkretnych interfejsów sieciowych jest zadaniem bardzo prostym. Jedyne, co musimy ustalić to adresy MAC kart sieciowych klientów. Najprostszym rozwiązaniem jest skopiowanie tych adresów z pliku /var/lib/dhcp/dhcpd.leases. Wtedy mamy pewność, że konfiguracja dla poszczególnych maszyn będzie prawidłowa (nie pomylimy adresów MAC). Każdy komputer, który ma mieć przydzielony niezmienny adres IP musi posiadać odpowiedni wpis w pliku /etc/dhcp/dhcpd.conf. Struktura wpisu została przedstawiona poniżej:
host tomek{
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.14.50;
}
Jak widać opisujemy komputer nadając mu nazwę (w tym przykładzie tomek), oraz łączymy dwa parametry: adres MAC karty sieciowej z adresem IP przydzielanym danemu hostowi.
Każdy komputer, który ma mieć przydzielany stały adres IP musi mieć wpisaną powyższą sekcję w pliku konfiguracyjnym serwera DHCP. Poniżej kompletna zawartość pliku dhcp.conf uzupełniona o definicję nowego hosta:
subnet 192.168.14.0 netmask 255.255.255.0 {
range 192.168.14.20 192.168.14;
option routers 192.168.14.1;
option domain-name-servers 192.168.14.1, 194.204.159.1;
max-lease-time 86400;
host tomek{
hardware ethernet 00:11:22:33:44:55;
fixed-address 192.168.14.50;
}
}
Po odnowieniu adresu IP na komputerze klienckim uzyskamy adres zdefiniowany powyżej. Warto pamiętać o tym, że przypisywany adres IP może być z puli przeznaczonej na przydział w sekcji range, ale może być również określony spoza puli range. Dobrą praktyką jest przeznaczenie jednego zakresu na dynamiczne przydzielanie adresów IP, a drugiego na statyczne przypisanie adresów. Przykładowo zakres przydzielanych adresów dynamicznych ustalamy na 20-30, a statyczne przypisanie adresów komputerom ustawiamy dla zakresu 50-60. Poniżej potwierdzenie przydzielenia adresu IP przypisanego do konkretnego adresu MAC.