DHCPd

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

DHCP server

Úvod


Protokol DHCP (Dynamic Host Configuration Protocol) automatizuje konfiguraci síťových rozhranní, nových i těch existujících. 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.


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í roysah 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í)

Komunikace mezi klientem s serverem

1) klient (zatím bez IP adrersy) odešle UDP paket s následujícími hlavičkami (řazeno dle síťových vrstev)

linkový rámec - cílová adresa FF:FF:FF:FF:FF:FF - zdrojová adresa MAC vlastního rozhranní

IP vrstva - cílová adresa 255.255.255.255 - zdrojová adresa 0.0.0.0

UDP - cílový port 67 - zdrojový port 68

DHCP - hlavička chaddr obsahuje vlastní MAC - všechny hlavičky s IP adresami obsahují 0.0.0.0