DHCP, czyli o automatyzacji konfiguracji sieci

O tym, jak ważna jest automatyzacja, nie trzeba chyba nikogo przekonywać?! Oszczędność czasu i brak konieczności podejmowania decyzji za każdym razem, a co za tym idzie eliminacja błędnych decyzji, powinna i oczywiście kusi. Dlatego warto automatyzować wszystko, co tylko można i najlepiej jak najszybciej. A co jeśli automatyzować możemy już na etapie startu komputera, zanim się do niego zalogujemy? Przyjrzyjmy się usłudze DHCP (Dynamic Host Configuration Protocol), czyli usłudze automatycznego przypisywania adresów IP i innych ustawień sieciowych naszym komputerom.

Komputer do sprawnego działania w sieci potrzebuje nie tylko adresu IP i maski sieci, ale również innych ważnych ustawień takich jak czas dzierżawy adresu, bramę sieci (default gateway) czy adresy serwerów DNS. Oprócz tych najważniejszych ustawień DHCP może też przekazywać informacje o innych ustawieniach sieciowych. Ustawienia te nazywamy opcjami DHCP i przyjrzymy się im później, ale teraz zajmiemy się najważniejszą rzeczą, czyli…

Jak działa DHCP?

Usługa DHCP jest usługą typu Client-Server czyli taką, gdzie klient wysyła żądanie a serwer na nie odpowiada. W największym uproszczeniu komunikację DHCP pomiędzy klientem i serwerem możemy opisać tak jak na poniższym schemacie:

Komunikacja DHCP

Jeśli taką komunikację przechwycimy np. za pomocą tcpdump i wyświetlimy w Wireshark, będzie ona wyglądała następująco:

Komunikacja DHCP w Wireshark

Widać tutaj, że komunikację rozpoczyna klient poprzez wysłanie pakietu DISCOVER, który wysyłany jest na adres broadcastowy sieci. Na tym etapie komputer poszukuje działającego serwera DHCP, od którego mógłby uzyskać dzierżawę adresu. Szczegóły pakietu wyglądają następująco:

Ethernet:
     Source MAC Address: 08:00:27:ff:62:f4
     Destination MAC Address: ff:ff:ff:ff:ff:ff
Internet Protocol version 4:
     Source (client) IP: 0.0.0.0
     Destination IP: 255.255.255.255
User Datagram Protocol:
     Source port: 68
     Destination port: 67
DHCP Protocol:
     Transaction ID: 0x00003d1d
     Option: (53) DHCP Message Type: Discover (1)
     Option: (61) Client identifier
     Option: (50) Requested IP Address (0.0.0.0)
     Option: (55) Parameter Request List
        Parameter Request List Item: (1) Subnet Mask
        Parameter Request List Item: (3) Router
        Parameter Request List Item: (6) Domain Name Server
        Parameter Request List Item: (42) Network Time Protocol Servers

W odpowiedzi na to zapytanie serwer odpowiada, wysyłając pakiet OFFER. Odpowiedź adresowana jest już nie do wszystkich a tylko do tego hosta, który wysłał zapytanie. W tym momencie serwer wysyła do klienta propozycję (ofertę, stąd właśnie nazwa tej wiadomości – OFFER) adresu IP, adresu sieci, maski, czasu, na jaki nastąpi dzierżawa. Może wysłać również zestaw innych ustawień nazywanych opcjami DHCP. Na tym etapie konfiguracja nie jest jeszcze przypisana na stałe, a następuje jedynie krótka rezerwacja i zapamiętanie, żeby nie oferować tego adresu innym hostom w sieci.

Ethernet:
     Source MAC Address: c0:b1:01:f4:79:ac
     Destination MAC Address: 08:00:27:ff:62:f4
Internet Protocol version 4:
     Source (server) IP: 192.168.0.1
     Destination IP: 192.168.0.10
User Datagram Protocol:
     Source port: 67
     Destination port: 68
DHCP Protocol:
     Transaction ID: 0x00003d1d
     Your (client) IP address: 192.168.0.10
     Option: (53) DHCP Message Type: Offer (2)
     Option: (1) Subnet Mask: 255.255.255.0
     Option: (3) Router: 192.168.0.1
     Option: (6) Domain Name Server: 192.168.0.1
     Option: (54) DHCP Server Identifier: 192.168.1.1
     Option: (51) IP Address Lease Time: (86400s) 1 day

Trzecim krokiem uzyskiwania adresu IP jest odpowiedź klienta na otrzymaną propozycję. Klient wysyła, ponownie na adres broadcast wiadomość DHCP REQUEST, w której potwierdza przyjęcie otrzymanej oferty.

Ethernet:
     Source MAC Address: 08:00:27:ff:62:f4
     Destination MAC Address: ff:ff:ff:ff:ff:ff
Internet Protocol version 4:
     Source (client) IP: 0.0.0.0
     Destination IP: 255.255.255.255
User Datagram Protocol:
     Source port: 68
     Destination port: 67
DHCP Protocol:
     Transaction ID: 0x00003d1e
     Option: (53) DHCP Message Type: Request (3)
     Option: (61) Client identifier - Client MAC address: 00:0b:82:01:fc:42
     Option: (50) Requested IP Address (192.168.0.10)
     Option: (54) DHCP Server Identifier (192.168.0.1)
     Option: (55) Parameter Request List
        Parameter Request List Item: (1) Subnet Mask
        Parameter Request List Item: (3) Router
        Parameter Request List Item: (6) Domain Name Server
        Parameter Request List Item: (42) Network Time Protocol Servers

Proces uzyskiwania adresu IP kończy się pakietem DHCP ACK wysłanym przez serwer. Od momentu, kiedy klient otrzyma wiadomość DHCP ACK, może w pełni korzystać z sieci, używając nowego adresu IP, mając pewność, że serwer aż do upłynięcia czasu dzierżawy nie przydzieli tego adresu nikomu innemu.

Ethernet:
     Source MAC Address: c0:b1:01:f4:79:ac
     Destination MAC Address: 08:00:27:ff:62:f4
Internet Protocol version 4:
     Source (server) IP: 192.168.0.1
     Destination IP: 192.168.0.10
User Datagram Protocol:
     Source port: 67
     Destination port: 68
DHCP Protocol:
     Transaction ID: 0x00003d1e
     Your (client) IP address: 192.168.0.10
     Option: (53) DHCP Message Type: ACK (5)
     Option: (1) Subnet Mask: 255.255.255.0
     Option: (3) Router: 192.168.0.1
     Option: (6) Domain Name Server: 192.168.0.1
     Option: (54) DHCP Server Identifier: 192.168.1.1
     Option: (51) IP Address Lease Time: (86400s) 1 day

Odnawianie dzierżawy adresu

Adres IP nie jest oczywiście przydzielany bezterminowo. Wraz z adresem IP klient otrzymuje informację o tzw. czasie dzierżawy, czyli czasie, na jaki uzyskuje adres IP i w czasie którego serwer nie przydzieli tego adresu żadnemu innemu komputerowi. Po przekroczeniu czasu dzierżawy klient nie może korzystać dłużej z przyznanego adresu IP i musi usunąć ten adres ze swojego interfejsu. Takie działanie pociąga oczywiście negatywne skutki, ponieważ wszystkie połączenia muszą zostać wtedy zerwane, a komputer do czasu uzyskania nowego adresu nie może komunikować się w sieci. Aby zapobiec tym przykrym skutkom, wprowadzono mechanizm odnawiania dzierżawy adresu IP.

Po połowie czasu, na jaki dzierżawa została przyznana (czas T1), komputer próbuj skontaktować się z serwerem DHCP w celu odnowienia czasu dzierżawy. Jeżeli komputer uzyskał dzierżawę na 1 dzień, po 12 godzinach wyśle do serwera pakiet DHCP REQUEST z prośbą o przedłużenie dzierżawy. Jeśli serwer jest dostępny, a jego konfiguracja nie zmieniła się, odpowie pakietem DHCP ACK i przedłuży dzierżawę adresu na kolejne 24 godziny.

W przypadku kiedy serwer jest niedostępny podczas pierwszej próby odnowienia adresu, klient odczeka do 87,5% czasu dzierżawy (7/8 czasu dzierżawy – czas T2) i ponownie wyśle prośbę do serwera DHCP o przedłużenie dzierżawy.

Gdyby również za drugim razem serwer był niedostępny, klient odczeka do końca czasu dzierżawy, po czym usunie adres IP, na który nie uzyskał przedłużenia dzierżawy i rozpocznie poszukiwanie nowego serwera DHCP, od którego mógłby uzyskać nowy adres.

Statyczne rezerwacje adresów IP

DHCP to nie zawsze dynamiczne przydzielanie adresów. Zdarza się, że mamy potrzebę, żeby jakiś komputer albo komputery otrzymywały zawsze taki sam adres IP. Możemy w tym celu skonfigurować tzw. statyczne rezerwacje adresów.

W przypadku konfiguracji statycznych rezerwacji adresów serwer DHCP będzie przydzielał komputerom konkretne adresy IP, zamiast wykorzystywać do tego wolne adresy ze swojej puli. Rezerwacje statyczne przydzielane są na podstawie adresu MAC komputera. Serwer odbierając pakiet DISCOVER, sprawdza, czy dla adresu MAC klienta ma zdefiniowaną rezerwację adresu i jeśli taka rezerwacja istnieje, klient otrzyma konkretny adres IP. Jeśli natomiast rezerwacji nie ma, to serwer przydzieli komputerowi wolny adres z ogólnej puli adresów.

Jak widać, rezerwacje pozwalają na uzyskanie korzyści wynikających z korzystania z serwera DHCP i ręcznej konfiguracji każdej stacji roboczej w sieci. Z jednej strony możemy przypisać stacji konkretny adres IP i mieć pewność, że pozostanie on niezmienny, a z drugiej mamy centralny punkt konfiguracji dla całej sieci i nie musimy tej konfiguracji wykonywać indywidualnie na każdym urządzeniu. W ramach rezerwacji statycznych poza adresem IP możemy konfigurować również inne ustawienia sieci i możemy je przypisywać precyzyjnie do pojedynczej stacji lub globalnie dla całej sieci. A jeśli już mówimy o innych ustawieniach sieci, niż tylko adres IP najwyższa pora powiedzieć o opcjach DHCP.

Opcje DHCP

Adres IP nie jest jedynym elementem, jaki serwer przekazuje klientowi. Poza adresem IP potrzebna jest również maska sieciowa, adres serwera DNS i bramy sieciowej. W ramach opcji DHCP przekazywane mogą być też inne ustawienia sieci zarówno globalne, jak i dedykowane dla konkretnych urządzeń jak np. telefony VOIP.

Najważniejsze opcje DHCP

Każda opcja DHCP ma swoją nazwę i identyfikator numeryczny. Lista najważniejszych opcji wygląda następująco:

  • Opcja 1: Maska sieci, w której host uzyskał adres IP
  • Opcja 3: Adres IP bramy sieciowej (Default gateway)
  • Opcja 6: Adres IP serwera DNS
  • Opcja 51: Czas dzierżawy przydzielonego adresu

Inne przydatne opcje DHCP

)Serwer może przydzielać też wiele innych opcji. Część z nich będzie przydatna dla zwykłych komputerów, a część będzie istotna szczególnie dla urządzeń IoT. Oto niektóre z nich:

  • Opcja 12: Nazwa hosta, opcja szczególnie przydatna dla urządzeń IoT i innych, na których nie logują się użytkownicy
  • Opcja 15: Nazwa domeny, którą klient powinien używać jako suffix przy wysyłaniu zapytań do DNS
  • Opcja 42: Lista serwerów NTP używanych do synchronizacji czasu
  • Opcja 58 i 59: Czas odnowienia dzierżawy adresu – T1 i T2. Opcje te są używane, jeśli czasy odnowienia dzierżawy mają być inne niż standardowe
  • Opcja 69 i 70: Konfiguracja serwera SMTP i POP3. Te opcje są często konfigurowane dla drukarek i skanerów
  • Opcja 81: Client Fully Qualified Domain Name. Przydatne przy automatycznej aktualizacji rekordów DNS
  • Opcja 121: Konfiguracja tras statycznych (zastępuje opcję 33)

Listę wszystkich opcji serwera DHCP można znaleźć na stronach iana.org

DHCP Relay Agent

Ponieważ komunikacja od klienta do serwera odbywa się w formie broadcastów, jej zasięg ograniczony jest jedynie do sieci lokalnej. Oznacza to, że w każdej podsieci powinien działać serwer DHCP, który będzie obsługiwał tylko tę sieć. Oczywiście oznaczałoby to ogromne marnotrawstwo zasobów. Jak więc rozwiązano ten problem? Wprowadzono mechanizm DHCP Relay Agenta, czyli usługi, która przekazuje zapytania klienta z podsieci A do serwera DHCP działającego w podsieci B.

DHCP Relay Agent

Usługa Relay Agenta najczęściej będzie działała na routerze. Jak widać na schemacie, zapytania wysyłane w formie broadcastów są zamieniane na komunikację Unicast i kierowane do serwera DHCP. Dodatkowo do komunikatu DISCOVER dokładana jest informacja o segmencie sieci, z którego pochodzi zapytanie. Dzięki temu serwer DHCP może obsługiwać wiele podsieci i przydzielać poprawnie adresy IP, nawet jeśli komputer jest przenoszony pomiędzy podsieciami.

Dwa serwery DHCP w jednej sieci?

Warto wiedzieć co dzieje się, kiedy w podsieci działają dwa (albo więcej) serwery DHCP. Ponieważ klient nie wysyła swojego zapytania do konkretnego serwera, tylko kieruje je do wszystkich w podsieci, oba serwery odbiorą to zapytanie i odpowiedzą na nie, wysyłając własny pakiet OFFER. Jeśli więc klient odbierze dwie oferty to, z którym z serwerów będzie kontynuował proces uzyskania dzierżawy adresu IP? Odpowiedź jest chyba oczywista – z tym, z którego odpowiedź odebrał wcześniej 🙂 a drugą odpowiedź zignoruje.

DHCP Failover

Jak widać, serwer DHCP jest niezwykle ważny dla prawidłowego działania sieci. Bez niego komputery nie uzyskają poprawnej adresacji i nie będą się w stanie komunikować ze sobą. Kluczowe staje się więc zapewnienie ciągłości przydzielania adresów przez serwer DHCP.

Można by pomyśleć, że najprostszym sposobem będzie uruchomienie kolejnego serwera DHCP w sieci. Jak już jednak zostało powiedziane wcześniej, kiedy w sieci działają dwa serwery DHCP, nasz komputer komunikuje się z tym, który odpowiedział szybciej. Na dodatek komunikacja serwera do klienta jest unicastowa, więc drugi serwer nie wie jaki adres został przydzielony klientowi. Może się więc zdarzyć, że drugi serwer przydzieli taki sam adres IP innemu komputerowi. Jak więc poradzić sobie z takim problemem?

Kiedyś stosowało się podejście 80/20 albo 50/50. Polegało ono na tym, że jeden z serwerów przydzielał część adresów w ramach adresacji, a drugi przydzielał jej drugą część, np. serwer nr 1 przydzielał adresy od 192.168.1.2 – 192.168.1.122 a drugi serwer od 192.168.1.123 do 192.168.1.254. Ważne było to, że zakresy te nie mogły się pokrywać. Nie było to jednak rozwiązanie idealne, bo w przypadku awarii jednego z serwerów i tak część komputerów, dla których zabrakło wolnych adresów na drugim serwerze, nie dostawała adresów IP.

Na całe szczęście od wielu lat dostępne są mechanizmy DHCP failower, które działają zarówno na Linuksie, jak i Windows Server. W obu typach systemów DHCP failover pozwala na utworzenie klastra serwerów DHCP, które współdzielą między sobą nie tylko konfigurację, ale również aktualną listę rezerwacji przyznanych przez jeden lub drugi serwer DHCP.

Podsumowanie

Serwer DHCP jest jednym z tych narzędzi, które najbardziej usprawniają pracę administratora. Raz włożony wysiłek w konfigurację serwera będzie przynosił korzyści przez lata. Trzeba sobie też uczciwie powiedzieć, że ten wysiłek włożony w konfigurację serwera DHCP nie jest duży. Obojętnie czy zdecydujemy się na serwer na Linuksie, czy Windowsie jego instalacja i konfiguracja dla sieci o średniej wielkości nie powinna zająć więcej niż kilkadziesiąt minut.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *