DHCPd

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání

DHCP server

Naškrábal: Bongo


Úvod


Protokol DHCP (Dynamic Host Configuration Protocol) automatizuje konfiguraci síťových rozhranní, nových i těch existujících a je definován v RFC 2131. Tento článek bude pojednávat o DHCP serveru od ISC (Internet Systems Consortium). Snad všechny linuxové distribuce obsahují balíček s tímto serverem, pokud ne, lze si stáhnout zdrojové kódy a přeložit si jej. Překlad ze zdrojových kódů či instalace balíčku je tak primitivní, že ji zde nebudu zmiňovat.

Článek píšu postupně jak mi čas dovolí, proto omluvte jeho nekompletnost, postupně se budu snažit natlačit do něj maximum. Pokud máte zájem o nějakou konkrétní věc, která se týká DHCP a není zde, napište mi e-mail (bongo zavinator hkfree tecka org) a já to zkusím příště zpracovat.

Jak pracuje DHCP protokol


Jen ve stručnosti popíšu jakým způsobem probíhá komunikace mezi klientem a serverem.

Jelikož klient na začátku nezná svoji IP adresu využívá všesměrové vysílání. Pokud tedy potřebuje zjistit nastavení síťového rozhranní, odešle paket na všesměrovou adresu (255.255.255.255, adresa odesílatele je 0.0.0.0) daného rozhranní. Tento paket zachytí každé síťové rozhranní, včetně DHCP serveru (pokud se na daném síťovém segmentu nachází). Tento odpovi již na konkrétní linkovou adresu klienta. Tím se redukují všesměrové pakety na nezbytné minimum, které nezatěžuje síť. Některé starší OS vyžadovaly větší komunikaci na všesměru, ale jednalo se celkem o maximálně 4 pakety, takže tyto případy můžeme ignorovat.

Protokol DHCP komunikuje na protokolu UDP na portech 67, 68. Tyto porty jsou převzaty od protokolu BOOTP. Port 67 je označován jako serverový (též BOOTPS) a port 68 jako klientský (BOOTPC). Jelikož se pro navázání komunikace používá omezená všesměrová adresa, proto musí být DHCP server na stejném síťovém segmentu jako klient DHCP. Pro případ, kdy je mezi serverem a klientem router lze použít tzv. DHCP relay (též nazývaný přenosový agent), který musí být na routeru oddělujícím subnet se serverem od toho s klientem. Konfiguraci přenosového agenta se budu věnovat později.


Jednotlivé hlavičky DHCP paketu

(pořadí odpovídá řazení v samotném paketu, čísla na začátku udavají rozsah hlavičky v bitech)

0 - 7  op (operační kód zprávy); převzata z protokolu BOOTP, pakety klienta mají hodnotu 1 (BOOTREQUEST),
       odpovědi serveru 2 (BOOTREPLY)
8 - 15 htype (typ adresy na linkové vrstvě); definice jsou převzaty od IANA, nám
       stačí vědět, že ethernet má hodnotu 1
18 - 23 hlen (délka linkové adresy); udává velikost adresy v hlavičce chaddr v bytech
24 -31 hops (počet přenosových agentů); hodnota odpovídá počtu přenosových agentů přes které prošla
32 - 63 xid (identifikace transakce); identifikuje jaké odpovědi serveru patří ke kterým předchozím
        odpovědím (to je ale věta :-))
64 - 79 secs (uplynulý čas); obsahuje počet sekund od počátku dané komunikace DHCP
80 - 95 flags (hlavička příznaků); pokud je nejnižší bit (80) nastaven na 1, pak musejí být odpovědi
        klientovi směrovány na všesměrovou adresu
96 - 127 ciaddr (IP adresa klienta); nastavuje se pouze pokud má klient potvrzenou IP adresu, v opačném
         případě je hodnota hlavičky 0.0.0.0
128 - 159 yiaddr (IP adresa klienta); tuto hlavičku nastavuje pouze server a oznamuje v ní klientovi jaká
          je adresa klienta
160 - 191 siaddr (IP adresa serveru); adresa dalšího serveru, který má klient použít během konfigurace
          (např. adresa TFTP serveru pro stažení jádra OS při síťovém bootování)
192 - 223 giaddr (IP adresa přenosového agenta); zde přenosový agent uvádí adresu rozhranní přes které tuto
          zprávu přijal
224 - 351 chaddr (MAC adresa klienta)
352 - 863 sname (název dalšího serveru); název serveru, který má klient použít
864 - 1887 file (název souboru); název souboru, který si má klient vyžádat od dalšího serveru 
           (viz. předchozí příklad s TFTP serverem)
1888 - ... options (možnosti); hlavička options obsahuje řadu možností pomocí nichž si mohou server a
           klient vyměňovat doplňující konfigurační údaje. Celková velikost hlavičky je proměnlivá. Každá
           možnost obsahuje kód možnosti, délku možnosti udávající velikost dat možností (v bytech) a
           samotná data možnosti.


Možnosti (options)
  • DHCP message type

Kód: 53

Určuje typ zprávy přenášené paketem. Krom toho tato možnost odlišuje zda se jedná o DHCP či BOOTP paket. BOOTP pakety tuto možnost neobsahují, v DHCP protokolu je povinná. Podle názvů typů též pojmenováváme jednotlivé DHCP pakety

(vlevo hodnota možnosti v hlavičce, vpravo název možnosti)

1 - DHCPDISCOVER
2 - DHCPOFFER
3 - DHCPREQUEST
4 - DHCPDECLINE
5 - DHCPACK
6 - DHCPNAK
7 - DHCPRELEASE
8 - DHCPINFORM
9 - DHCPFORCERENEW


  • subnet mask

Kód: 1

Obsahuje masku sítě, kterou si má klient nastavit. Samotná IP adresa je obsažena v hlavičce ciaddr. Délka hlavičky jsou 4 byte a obsahuje masku ve formě 32bitové IP adresy.


  • router

Kód: 2

Obsahuje IP adresy defaultních routerů přítomných na síti. Velikost možnosti je počet adres x 4 byte.


  • DNS server

Kód: 6

Obsahuje IP adresy DNS serverů. Velikost viz. router


  • requested IP address

Kód: 50

Pokud měl již klient IP přidělenou a žádá o obnovení zápůjčky, nastaví do t0to mo6nosti po6adovanou IP adresu


  • end

Kód: 255

Tato možnost je vždy uvedena jako poslední a označuje konec hlavičky možností. Její formát je lehce odlišný od ostatních možností. Možnost je pevné délky (1 byte) a neobsahuje žádná data ani velikost možnosti.



Druhy DHCP paketů

Jednotlivé druhy DHCP packetů jsou určeny možností DHCP message type v části options a podle této možnosti se též jmenují.


  • DHCPDISCOVER - Tento paket je klientem vyslán jako první ve chvíli, kdy klient nemá přidělenou IP adresu a hledá DHCP server. Tímto paketem klient zahajuje komunikaci.
  • DHCPOFFER - Tento paket je odpovědí serveru na klientovo voláni DHCPDISCOVER. V případě, že server může klientovi přidělit IP adresu, pak posílá DHCPOFFER jako odpověč na DHCPDISCOVER a do možností vkládá konfigurační parametry. Tuto yprávu server odesílá na všesměrovou adresu i na přidělovanou IP adresu obsaženou v hlavičce yiaddr.
  • DHCPREQUEST - Klientova odpověč na DHCPOFFER. Klient touto zprávou žádá o přidělení adresy a konfigurací předaných v DHCPOFFER. Paket DHCPREQUEST je odeslán na všesměrovou adresu. Pokud je klient s již přidělenou IP adresou restartován, pak použije paket DHCPREQUEST pro obnovení původní adresy bez ohledu na to zda vypršela doba zápůjčky. DHCPREQUEST zasílá klient i v případě, že se blíží vypršení zápůjčky.
  • DHCPDECLINE - Tento typ paketu odesílá klient serveru v případě, že nějakým způsobem zjistí, že přidělená IP adresa koliduje s jiným zařízením. Server bz si měl tuto adresu pamatovat jako nedostupnou.
  • DHCPPACK - Pokud je klientem požadovaná IP adresa stále volná a konfigurace platná, pak server odpovídá na DHCPREQUEST paketem DHCPACK. Klient po přijetí paketu DHCPACK nakonfiguruje síťové rozhraní.
  • DHCPNAK - Tento tzp paketu se odesílá v případě, že server donutil klienta znovu požádat o obnovení IP adresy (DHCPFORCERENEW) a server požaduje, aby klient inicializoval rozhraní od začátku (DHCPDISCOVER)
  • DHCPRELEASE - Pokud klient chce ukončit platnost zápůjčky ještě před jejím vypršením, pak odešle serveru zprávu DHCPRELEASE.
  • DHCPINFORM - Tento typ paketu se používá v případě, že klient má IP adresu nastavenou jinak než pomocí DHCP, ale přesto některé konfigurační parametry přebírá pomocí DHCP ze serveru. DHCPINFORM je tedy požadavek klienta na zaslání ostatních konfiguračních parametrů (DNS, NTP servery, apod.). Server odpovídá opět paketem DHCPACK. V tomto případě není platná žádná doba zápůjčky a klient sám musí požádat o opětovné zaslání konfigurace. Pokud to obě strany podporují, může server donutit klienta k ynovuyaslání DHCPINFORM pomocí paketu DHCPFORCERENEW.
  • DHCPFORCERENEW - Pokud chce server donutit klienta znovu načíst konfiguraci, odešle mu paket DHCPFORCERENEW. Klient odpoví zasláním požadavku DHCPREQUEST. Pokud server pouze mění konfigurační parametry odpoví paketem DHCPACK s patřičnými parametry. Pokud vyžaduje novou konfiguraci IP, pak odešle paket DHCPNAK.



...pokračovat budu zase příště ;-)