DHCPd
Obsah
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
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