Portál AbcLinuxu, 30. dubna 2025 15:54
Zjišťování informací o běžícím DHCP serveru, využití a konfigurace dynamického DNS (DNS) a spuštění relay agenta a klienta s popisem nejdůležitějších parametrů.
Tak server umíme spustit, jednoduše i nakonfigurovat, teď se podíváme, jak (kromě prohlížení syslogu) zjistíme, co se se serverem děje.
Potřebné informace o poskytovaných adresách, hostitelích a další
ukazatele zjistíme ze souboru dhcpd.leases
. Jde o databázový
soubor, ovšem v textovém tvaru, takže nám nebude dělat problémy v něm číst a díky jednoduché a jasné syntaxi se v něm orientovat. Soubor dhcpd.leases
rovněž zajišťuje uchování dat například po výpadku služby nebo serveru, protože informace se v něm zachovávají offline až do změny parametrů DHCP (typicky vypršení doby zapůjčení). Do tohoto souboru bychom neměli nikdy zasahovat, slouží pouze serveru a nám k informacím o stavu služby. Veškeré změny by se měli udávat prostřednictvím konfiguračních souborů!
Z výše uvedeného je patrné, že bez něj ISC DHCP server nemůže
pracovat. Není-li tedy v systému přítomen, musíme ho vytvořit. Implicitně
ho DHCP server hledá ve /var/lib/dhcpd/dhcpd.leases
.
Přepínačem -lf
při spouštění mu můžeme nadefinovat vlastní
cestu. Syntaxe zápisu je následující:
lease ip-adresa { údaje; }
Opět předesílám, že uvedu jen některé operátory. Pro detaily a zbytek si prostudujte manuálové stránky dhcpd.leases
.
starts datum
ends datum
hardware hw-typ MAC adresa
uid id
client-hostname
abandonet
Nakousl jsem to na začátku a teď to jenom lehce doplním. O co jde, už teda asi víme; v případě dynamického přidělování adres nám nemusí DNS korektně vracet údaje o hostitelích na naší síti. Pro synchronizaci mezi DHCP a DNS použijeme mechanismus DDNS, který zajistí, že i v případě používání DHCP budou DNS záznamy aktuální.
Předně je třeba říct, že je nutné mít verzi serveru od ISC 3.x. Starší verze to, pokud vím, neumí. Proces synchronizace je nutné nastavit jak na straně DHCP, tak na straně serveru DNS. DNS nastavení tady popisovat nebudu, jen nastíním, že je nutné doplnit do záznamů v dané doméně položku allow-update
. V případě, že aktualizaci povolujeme za pomocí klíče, tak ty správně vygenerovat a oznámit DNS a DHCP serveru. A také nezapomeneme na přístupová práva příslušných souborů.
V případě nepoužívání klíčů nám bude stačit povolit aktualizaci údajů z
určitého serveru. Do souboru dhcpd.conf
potom zapíšeme zónu i reverzní zónu spolu s informací, který server se má takto aktualizovat. Celý zápis by vypadal následovně:
zone jmeno.domeny. { primary ip-adresa-DNS-serveru; } zone 0.168.192.in-addr.arpa. { primary ip-adresa-DNS-serveru; }
Do globálních voleb stačí potom umístit vhodnou volbu
ddns-update-style
a je vymalováno. DHCP server už potom sám zajistí posílání aktualizovaných údajů DNS ze souboru
dhcpd.leases
.
V další části si ještě popíšeme předávacího DHCP agenta a podíváme se na nějakého DHCP klienta.
Jak již bylo řečeno, klienti DHCP při svém dotazu pracují s omezenou vysílací adresou. Ta bývá na směrovačích implicitně zahazována, proto je nutné v případě Linuxu použít mechanismus předávacího agenta (relay agent). V balíčku od konsorcia ISC je jeden distribuován a jelikož jsme se do teď věnovali tomuto software, zůstaneme věrni barvám a podíváme se na implementaci relay agenta a následně i klienta od tohoto dodavatele.
Výhody jsou stejné jako u serveru DHCP od ISC. Robustnost, podpora, tradice, budoucnost, open source. Navíc je jeho spuštění a konfigurace opravdu jednoduchá.
Je asi pochopitelné, že jde o démona. Tak tento server naslouchá, nejlépe na routeru, požadavkům ze sítě a v případě příchozího požadavku přepošle tento na server DHCP, který mu určíme, a zase zpětně vyřízený požadavek odešle klientovi zpět. Pro server i klienty je tento proces naprosto transparentní a do jejich konfigurace proti normálu nemusíme nijak zasahovat.
Jak už jsem řekl, konfigurace relay agenta je dost jednoduchá a ještě se to různé distribuce snaží zjednodušit. Ve Fedoře stačí do souboru
/etc/sysconfig/dhcrelay
dopsat do nadefinovaných proměnných seznam rozhraní a serverů. Spustit daemon pomocí init
skriptu. A zapomenout.
'Ruční' zprovoznění relay serveru je jen o něco málo jiné. Argumenty se pochopitelně předávají na příkazovém řádku a celá syntaxe je:
dhcrelay [ -p port ] [-d] [-q] [-i seznam_rozhraní] [-a] [-c počet] [-A délka ] [-D] [-m rozšíření] server/servery
Význam nejdůležitějších přepínačů:
-p
Určuje jiný port komunikace než standardní 67.-d
Nechá server běžet na popředí, normálně se na popředí spustí, ale pak vrátí proces na pozadí, vhodné pro ladění apod.-q
Zamezí výpisu startovací hlášky.-i
Specifikuje rozhraní, na kterém proces běží a naslouchá.-c
Pakety s hodnotou skoků větších než 10 agent implicitně zahazuje, tento přepínač nadefinuje počet možných povolených skoků.-A
týká se velikosti DHCP paketu, lze jej zvětšit
například kvůli zasílaným požadavkům agenta. Zbylé přepínače se týkají právě speciálních potřeb agenta, více
man dhcrelay
.
Nejjednodušší spuštění serveru dhcrelay
se tedy provede
příkazem dhcrelay IP serveru
. Máme-li agenta na routeru, což je asi nejběžnější funkce, musíme mu definovat pomocí přepínače -i
rozhraní pro naslouchání požadavků klientů DHCP. Pro příklad tedy zvolme spuštění agenta na rozhraní eth0 s DHCP serverem 192.128.1.1:
dhcrelay -i eth0 192.128.1.1
Zbytek už je stejný jako u většiny serverových procesů, po odzkoušení se pomocí nějakého skriptu zajistí jeho spouštění a to je asi tak vše.
Jako alternativu k relay agentovi od ISC jsem našel program dhcp-forwarder. Nezkoušel jsem ho, ale oproti námi probíranému softwaru má podle slov tvůrců například schopnost implicitně běžet v chroot prostředí jako ne-rootovský proces. Což může jednoho potěšit.
Co platilo pro relay agenta, platí v jisté míře i pro klienta. Celá záležitost je v podstatě transparentní, nastavování není většinou nutné, implicitní hodnoty stačí, dokonce klient nevyžaduje ani konfigurační soubor dhclient.conf
. I když tady ho do jisté míry supluje skriptík dhclient-script
. Jeho konfigurace tedy nemusí být problémem, může se ovšem stát, že budeme potřebovat změnit některé parametry, a proto se podíváme, jak na to.
Nenastavíme-li získávání parametrů pomocí DHCP při instalaci, musíme ve Fedoře jen do souboru
/etc/sysconfig/network-scripts/ifcfg-nazev_rozhrani
(například ifcfg-eth0
), doplnit parametr dhcp
direktivy BOOTPROTO
(také se dá samozřejmě použít
red-hat-network-config
). Většina ostatních dister to má
podobně jednoduché. Tím zařídíme, že bude systém při bootu nebo obnově síťových parametrů kontaktovat DHCP server.
Klient od ISC implicitně neposílá se svou žádostí jméno počítače. Máte-li server nakonfigurován na přidělování fixní IP adresy podle jména, může se stát, že budete mít v nejlepším případě jinou IP, v nejhorším vám nepojede síť. Situací, při kterých budete chtít serveru něco sdělit, může být více - doba trvání výpůjčky informací, identifikaci klienta apod. Může se stát, že budete potřebovat změnit některé údaje týkající se chování klienta, namátkou třeba dobu, po kterou bude čekat na odpovědi serveru, nebo například některé DHCP servery nebudete chtít kontaktovat atd. Pro všechny tyto případy je vhodné editovat soubor
dhclient.conf
. Podíváme se proto na některé konfigurační volby,
Syntaxe je obvyklá a nejčastější parametry jsou:
timeout sekundy;
retry sekundy;
reject ip-adresa;
interface "jméno" { deklarace; }
send host-name "jméno";
send dhcp-client-identifier identifikátor;
send dhcp-lese-time čas;
require požadavky;
script cesta;
supersede údaje
/etc/resolv.conf
.request požadavky;
Vhodné parametry můžeme zadat i při startu klienta dhclient
.
Syntaxe a některé přepínače:
dhclient [-p port] [-d] [-q] [-1] [-r] [-lf lease soubor] [-pf pid soubor] [-cf konfigurák] [-sf skript] [-s server] [-g adresa] [-n] [-nw] [-w] [-x] [-I identifikátor] [-B] [síťové rozhraní]
Většina voleb je jasných nebo jsou stejné jako u serveru a relay agenta. Stejně tak je většina vhodných spíš pro ladění a experimenty. Více
man dhclient
Program dhclient
používá konfigurační příkazový soubor
dhclient-script
. Je to soubor specifický pro daný operační
systém a i když je to klasický bash
skript, pro změnu definic
a nastavení se mají používat tzv. hook skripty. Většinu (všechny?) změn se však dá zadat prostrřednictvím dhclient.conf
. Pro více informací o skriptu viz man dhclient-script
.
Stejně jako dhcpd
i dhclient
používá lease soubor. Jeho umístění zavisí na distribuci, Fedora ho má v adresáři
/var/lib/dhcp/
pojmenovaný dhclient-eth0.leases
(v případě rozhraní eth0). Při restartu nebo obnově se dhclient
podívá na tento lease soubor a v případě časové platnosti údajů použije stejné informace. Jinak využije DHCP. Syntaxe je stejně pochopitelná jako u dhcp.leases
, v podstatě přebírá argumenty dhclient.conf
a zobrazuje jejich nastavení.
Důležité jsou parametry renew, rebind, expire
, které udávají
platnost zápůjčky.
Alternativní a hodně využívaný klient je dhcpcd
.
No a to by tak k software DHCP od ISC bylo ode mě vše. Nepokryl jsem všechna témata (například "záložní" failover protokol), nicméně doufám že jsem nenudil, moc to nekonil a byl srozumitelný. Rovněž tak doufám, že jste se něco nového dozvěděli a že jsem ukázal protokol a použití DHCP jako užitečný nástroj.
Nevím v čem by mohl být problém, Bindu je jedno že se mu aktualizují adresy jen z určitého rozsahu zóny.
update-static-leases on|off;
Zapne/vypne DDNS pre staticky nadefinované adresy
Nevíte někdo, jestli je možné z DHCP přidělovat "Jméno počítače" (host name) pro Windows stanice? Provádíme klonování a tohle je poslední věc, kterou bychom potřebovali zautomatizovat. Vím, že pro Linux stanice by to mělo jít.
Jinak musíme stroje všechny oběhnout a přejmenovat, protože se jmenují stejně jako původní, na kterém vznikl klon.
dhcp.leases
je překlep, má tam být abandoned
.
A když už jsme u toho opravování tak se taky ozvu, v závorce mělo být patrně DDNS, jinak ten výše uvedený překlep beru na sebe, opravovat to po mě asi nebyl žádný med...
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.