DHCP

Viktor Bulánek, xbulanek@fi.muni.cz


Obsah


Úvod

Protokol DHCP (Dynamic Host Configuration Protocol) je náhradou za protokol BOOTP. Používáme ho ke konfiguraci klíčových síťových parametrů jednotlivých klientů. Jejich nastavení umožňují DHCP servery, které přidělují klientům předem definované prostředky. V síti nemusí být pouze jeden DHCP server, ale pouze za předpokladu. že nedojde k překrytí spravovaných IP adres a klientů.

Jak to funguje

DHCP rozšiřuje BOOTP protokol, se kterým je zpětně kompatibilní. Po spuštění se server napojí na port bootps a poslouchá. Po spuštění klienta se vyšle do sítě multicast UDP požadavek DHCPDISCOVER. DHCP servery zachytí požadavky a zašlou opět multicastově zprávu DHCPOFFER. Klient si poté jednu z odpovědí vybere a pošle serveru DHCPREQUEST. Oslovený server poté žádost potvrdí - DHCPACK nebo zamítne - DHCPNAK. Klient si nemusí hned také vybrat odpověď a může poslat zprávu, že si to rozmyslí - DHCPDECLINE. Tím to ovšem nekončí. Klient je povinen po určité době požádat o obnovu své IP adresy, pokud tak neučinní, riskuje že server IP adresu přidělí jinému klientovi a server pro převod IP adres na hardwarové adresy sítě bude převádět IP adresu na hardwarovou adresu druhého klienta. Obnova IP adres je kvůli tomu, aby nedošlo k blokaci IP adres už nepracujícími klienty. Pokud chce klient zkončit před lhůtou, zasílá zprávu DHCPRELEASE.

Instalace

Protokol vyvinula a také zpravuje
ISC(Internet Software Consorcium), kde také najdete příslušný software, který je šířen jako open source a to jak serverová tak i klientská část. Instalace probíhá obvyklým configure; meke; make install. Pokud se rozhodneme pro instalaci z rpm baliků, tak klientská část se nachází v balíku dhcpcd-*.rpm a serverová je v dhcpd-*.rpm. Důležité je míti v jádře zakompilovanou podporu pro multicast.

Konfigurace serveru

Konfigurace serveru se provádí v souboru /etc/dhcpd.conf, kde máme vždy část globální a části lokální pro jednotlivé podsítě. Nejdůležitější řádky jsou:
option domain-name "nazev";			název domény
option routers ip_routeru_1, ip_routeru_2;	adresy routerů
option domain-name-servers ip_DNS_1, ip_DNS_2;	DNS servery
option subnet-mask maska_sítě;			maska podsítě
option broadcast-address  			všesměrové vysílání
default-lease-time implicit_cas;		přiděluje adresy implicitně na cas v sekundách
max-lease-time max_cas;				ale maximalne na
option netbios-name-servers WINS_server;
Potom můžeme definovat podsíť
subnet podsit netmask maska_podsite{
	range ip_min ip_max		#rozsah přidělovaných adres
}
Můžeme také nakonfigurovat, aby určitému počítači byla přidělována stejná IP adresa:
host "klient{
	hardware ethernet mac_adresa;
	fixed-address ip_adresa;
}
DHCP démon se jmenuje dhcpd. Obvykle se spouští pomocí skriptu /etc/init.d/dhcpd. Při startu se vytvoří soubor /var/state/dhcp/dhcpd.leases nebo /var/lib/dhcp/dhcpd.leases, kde si server ukládá informace o poskytnutých adresách.
Protože si DHCP server přímo říká o útok, kdy útočník může server účelně zbavit všech adres. Proto je dobré zakázat dhcpd naslouchání požadavkům z Internetu na UDP porty 67 a 68.

Klienti

BOOTP

Protokol BOOTP slouží k předání síťových informací klientům. Protokol je definován v RFC 951. Iniciálním portem je bootpc(host)-68 a cílovým portem je bootps(server)-67. Vse je nad UDP.

Jak to pracuje

Server obdrží pomocí broadcastu MAC adresu klienta, kterou začne vyhledávat ve své databázi. Pokud ji v databázi najde, bude schopen vrátit klientovi jeho IP adresu, masku sítě a bránu.
Databáze BOOTP serveru je jednoduchý textový soubor (BOOTPTAB) s následujícím formátem:
   devicename: \			
   sm=subnet mask: \		#maska sítě
   gw=gateway: \		#brána
   ht=hardware type: \		#typ hardware- ethernet nebo Token
				#Ring
   bf=bootfile path: \		#cesta k bootovacímu souboru
   ha=hardware (mac) address: \ #MAC adresa klienta
   ip=ip address: \		#přidělená IP adresa
Z konfiguračního souboru je patrné, že se musí klientovi přiřadit pevná IP adresa, proto je vhodnější používat protokol DHCP.

TFTP

Protokol TFTP je zjednodušením protokolu FTP a slouží k zavedení obrazu jádra systému ze serveru. Protokol je definován v RFC 1250. Přijímacím portem je port tftp(69) nas UDP.

server

Server můžete nainstalovat z rpm balíku tftp-server-*.rpm, který najdete třeba na
rpmfind.net. Server se spouští za pomocí inetd nebo xinetd. V inetd vypadá řádek takto:
tftp dgram udp wait nobody cesta_k_tftp.in tftp.in cesta_ke_koreni
Pokud se při spouštění neuvede cesta ke kořeni tftp serveru, bere se implicitně adresář /tftpboot.

klient

Jako klienta lze použít program tftp, jehož ovládání je podobné s programem ftp.

Zdroje

http://www.isc.org/products/DHCP/
http://info.internet.isi.edu/in-notes/rfc/files/rfc2131.txt
http://info.internet.isi.edu/in-notes/rfc/files/rfc2132.txt
http://www.linuxdoc.org/HOWTO/mini/DHCP/
http://www.dhcp.org/