DHCP a ti ostatní

Jiří Unčovský


Obsah

protokol tftp
server
klient
protokol bootp
DHCP
Server DHCP
klient od ISC
DHCP klient od PhysTech
bezdiskové počítače
Krok 1. konfigurace síťové karty klienta
Krok 2. konfigurace serveru BOOTP
Krok 3. server TFTP
Krok 4. jádro systému
Krok 5. kořenový svazek

protokol tftp

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

server

Server lze je najít např. na ftp.kernel.org, žel tento server však podporuje jen starší verzi a to RFC 783. Server se spouští za pomocí inetd či xinetd. Řádek v konfiguračním souboru pro inetd vypadá takto:

tftp dgram udp wait nobody cesta_k_tftp.in tftp.in cesta_ke_koreni_tftp_serveru
	
Pokud bude cesta_ke_koreni_tftp_serveru, pak se použije adresář /tftpboot.

klient

Jako klieta lze použít program tftp, jenž slouží pro komunikaci s tftp serverem. Jeho ovládání je podobné, jako má program ftp. Klienti jsou spíše zařízení, jenž načítají své jádro se serveru.

protokol bootp

Protokol je definován v RFC 1533 a slouží k předání sítových informací klientu. Iniciálním portem je bootpc (68) a cílovým je bootps (67) nad UDP.

Server lze najít na ftp://ftp.ntplx.net. Server se spouští za pomocí inetd či xinetd. Řádek v konfiguračním souboru pro inetd vypadá takto:

 bootps dgram udp wait root cesta_k_bootpd bootpd -c cesta_ke_koreni_tftp_serveru
    
Pokud -c cesta_ke_koreni_tftp_serveru bude vynechána, pak se použije /tftpboot. Konfigurační soubor se nachází v bootptab. Jeho obecný tvar vypadá:
popisek[:parametr=data]*:
Pokud popisek je .def, pak jde o globální nastavení.

Tabulka 1. popis některých parametru

parametrpopis
httyp hardwerová adresy
hahardwerová adresa
smmaska sítě
ipIP adresa klienta
hnjméno klienta
bfobraz jádra systému klienta
gwbrána
dnDNS
tcpokačování tabulky
Jak si lze povšimnout, lze pouze konkrétnímu klietovi přiřadit konkrétní IP adresu. BOOTP je velmi omezený protokol a proto je lepší využít DHCP.

Příklad 1. Ukázka konfiguračního souboru pro BOOTP server

# jsme nad ethernetem
.def:ht=ethernet:

# klient s hardware_adresa_1 bude mít IP adresu ip_adresa_klienta_2 a obraz je 
# cesta_k_obrazu_1 
popisek_1:ha=hardware_adresa_1:ip=ip_adresa_klienta_1:bf=cesta_k_jadru_1:

# klient s hardware_adresa_2 bude mít IP adresu ip_adresa_klienta_2 a 
# další informace se nalézají na řádku označeném pokračování
popisek_2:ha=hardware_adresa_2:ip=ip_adresa_klienta_2:tc=pokračování:

# klient s hardware_adresa_3 bude mít IP adresu ip_adresa_klienta_3 a 
# další informace se nalézají na řádku označeném pokračování
popisek_3:ha=hardware_adresa_3:ip=ip_adresa_klienta_3:tc=pokračování:

# všichni klienti, jenž se odkazují na řádek pokračování budou mít obraz 
# cesta_k_obrazu_2
pokračování:bf=cesta_k_obrazu_2:

DHCP

Náhradou protokolu BOOTP je protokol DHCP, neboli protokol pro dynamickou konfiguraci.

Protokol funguje na bázi klient-server. V síti je spuštěn server DHCP (ne nutně jeden), který obsluhuje jistý interval IP adres. Existuje-li jiný server DHCP, pak nesmí nastat překrytí spravovaných IP adres a klientů. Na klientských počítačích DHCP, běží program, který provádí konfiguraci sítového subsystému klienta.

Když se spustí server, tak se napojí na port bootps a poslouchá. Když se spustí klient, tak vyšle všesměrově z portu bootpc na port bootps zprávu, která obsahuje jednoznačnou identifikaci ve fyzické síti na níž je klient a server připojen. A protože je vyslána všesměrově, tak ji všichni servery zachytí a prohledají své tabulky. Pokud některý server zjistí, že klient je pod jeho pravomocí, tak odpoví. Neodpoví-li žádný server, bude klient v určitých intervalech vysílat žádost o přidělení IP adresy. Jakmile klient obdrží odpověd, nakonfiguruje svou IP adresu, masku sítě a případně nastaví DNS servery. 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 hardwerové adresy sítě bude převádět IP adresu na hardwerovou adresu druhého klienta. Obnova IP adres je kvůli tomu, aby nedošlo k blokaci IP adres už nepracujícími klienty.

Server DHCP

Server DHCP od ISC lze najít na www.isc.org. Konfigurační soubor se nachází v souboru dhcpd.conf. Komentáře se značí znakem #. Obecně lze říci, že na se konfigurační soubor dělí na dvě části. První částí jsou globální parametry a druhou částí jsou deklarace.

Tabulka 2. popis některých deklarací

jménopopispoznámka
groupnávěstí{[parametry][deklarace]}využívá se při potřebě nastavit několik klientů podobným způsobem
hostnávěstí{[parametry][deklarace]}týká se jen daného klienta zadaného fixed-address
subnetpodsít netmask maska{[parametry][deklarace]}týká se jen klientů dané sítě
range[dynamic-boot] počáteční_ip_adresa [koncová adresa];server bude přidělovat klientům IP adresy z toho rozsahu

Tabulka 3. Popis některých parametrů

jménoparametrpopispoznámka
always-reply-rfc1048 server bude komunikovat s klienty BOOTP přesně podle RFC 1048
autoritative server nezasílá DHCPNAK 
not autoritative server zasílá DHCPNAK 
default-lease-timečas_v_sekundáchpo jak dlouhou dobu bude IP adresa rezervována pro daného klienta, než o ni klient bude muset znovu požádat  
filenamesouborobraz pro zavedení systému u klienta
fixed-addressIP_adresa [, IP_adresa]danému klientovi se přidělí tyto IP adresyhost
hardwareethernet | token-ring hardwerová_adresatýká se klinta s touto hardwerovou adresou 
option volby, viz další tabulka 

Tabulka 4. Popis některých voleb

jménopopis
domain-namejméno domény
domain-name-serversDNS servery
host-namejméno klienta
routerssměrovače
subnet-maskmaska sítě

Příklad 2. konfigurační soubor pro server DHCP od ISC

# DHCP server spravuje tři podsítě

# čas přidělení ip adresy vyprší za 4000 sekund
default-lease-time 4000;

# podsíť podsíť_1 s maskou sítě maska_sítě_1
subnet podsíť_1 netmask maska_sítě_1
{
   # router
   option routers ip_routeru_1;

   # DNS
   option domain-name-servers dns_server_1, dns_server_2;

   #doména
   option domain-name doména_1;
   
   # maska sítě
   option subnet_mask maska_sítě_1;
   
   # adresy se budou všem klientům přidělovat v intervalu ip_min_1 do ip_max_1
   range ip_min_1 ip_max_1;
   
   # vyjímkou je klient s mac adresou mac_adresa_1, 
   # ten má ip adresu ip_adresa_1
   host "klient_1"
   {
     hardware ethernet mac_adresa_1;
     fixed-address ip_adresa_1;
   }
}

# dvě sítě s podobným nastavením, stejny DNS server a IP adresy jsou
# přidělovány ze stejného rozsahu a ve stejné doméně 
group "skupina"
{
   # router
   option routers ip_routeru_2;

   # jméno domény
   option domain_name "domena_1";
   
   # DNS server
   option domain_name_server dns_server_3;
  
   # čas přidělení ip adresy vyprší za 1000 sekund
   default-lease-time 1000;

   # adresy se budou všem klientům přidělovat v intervalu ip_min_2 do ip_max_2.
   range ip_min_2 ip_max_2;

   # vyjímkou je klient s mac adresou mac_adresa_2, ten má ip adresu ip_adresa_2
   host "klient_2"
   {
     option subnet-mask podsíť_2;
     hardware ethernet mac_adresa_2;
     fixed-address ip_adresa_2;
   }

   # podsíť podsíť_2 s maskou sítě maska_sítě_2
   subnet podsíť_2 netmask maska_sítě_2
   {
     option domain_name_server dns_server_4;
     option subnet-mask podsíť_3;
   }
}
    

klient od ISC

Je dodáván se se serverem DNS od ISC a má jméno dhclient. Konfigurační soubor se nachází v dhclient.conf. Komentáře se uvozují znakem #. Konfigurační řádek musí končit znakem ;. Některé volby lze seskupovat.

Příklad 3. konfigurační soubor pro DHCP klienta od ISC

# za jak dlouho má klient žádat o znovou přidělení IP adresy
timeout cas

#
retry cas

# jakou IP adresu má zamítnout
reject ip_adresa;

# konfigurace rozhraní rozhrani
interface "rozhrani"
{
	send host-name retezec
	
	# adresa klienta na tomto rozhraní je mac_adresa
	send dhcp-client-identifier 1:mac_adresa;

        # po uplynutí cas sekund dojde k žádosti o
        # znovupřidělení IP adresy. Server ovšem muže žádost klienta
        # zamítnout
	send dhcp-lease-time 86400;

	# po konfuguraci spust program program
	script "program"
}; 
    

DHCP klient od PhysTech

Klient DHCP od PhysTech lze najít na www.phystech.com. Žel se mi tohoto klienta na OpenBSD nepodařilo zkompilovat.

bezdiskové počítače

Když startuje počítač, načítá firmware zavaděč ze startovacího média a následně zavaděči předá řízení. Pokud jde o klasický počítač, načte zavaděč zbytek systému z lokálního média. U bezdiskových počítaču načte zavaděč zbytek systému ze vzdáleného média.

Firmware načte ze síťové karty program, který vyšle UDP paket. Adresa odesílatele je nastavena na MAC odesílatele a adresa příjemce je nastavena na všesměrové vysílání (ff:ff:ff:ff:ff:ff). Zdrojová IP adresa je nastavena na 0.0.0.0 a zdrojový port bootpc, cílová adresa je nastavena na všesmerove vysilani s cílovým portem bootps. Server bootp, jenž má v moci klienta odpoví, že jeho IP adresa je ip_adresa_klienta, IP adresa serveru je ip_adresa_serveru a obraz je cesta_k_jádru. Následně klient pošle UDP paket serveru z portu 2001 na port tftp(69) s požadavkem na zaslání svého obrazu. Jakmile zavaděč obdrží jádro, spustí jej. Následující kroky závisí na systému, ale platí, že jádro po své inicializaci musí připojit kořenový svazek. Pokud se kořenový svazek připojuje přes NFS nebo má počítač přistupovat k síťi musí se přes DHCP nebo bootp zjistit nastavení sítě. Po připojení kořenového svazku jsou další kroky identické s normálním systémem.

Pro uspěšné nasazení bezdiskového počítače je nutné zvládnout několik kroků.

Krok 1. konfigurace síťové karty klienta

Neprve je nutné nastavit firmware, aby načetl zavaděč ze síťové karty. Pokud síťová karty už v sobě zavaděč nemá, je nutné jej do síťové karty přidat. Naneštěští neexistuje univerzální zavaděč. Proto je nutné najít ten správný obraz zavaděče pro danou síťovou kartu. Nejjedodušší je si opatřit správný obraz na http://www.rom-o-matic.rom. Tam je nutné vybrat typ čipu, konfiguraci a formát (pro floppy, eprom, dos apod.). Po stáhnutí a uložení na správné médium lze spustit počítač. Po startu počítače se bezdiskový počítač (teď v roli klienta) bude tázat DHCP nebo BOOTP serveru na svou IP adresu. A poněvadž, server není ještě nakonfigurován, tak klient nic neobdrží a bude se ptát donekonečna.

Krok 2. konfigurace serveru BOOTP

BOOTP server

Pro podporu je nutné aby existoval odkaz na obraz jádra dostupný přes tftp. To se děje přes direktivu bf. Příklad je v části věnované BOOTP

DHCP ISC server

Pro podporu BOOTP v DHCP serveru ISC je nutno upravit konfiguraci, to je však velmi jednoduché. Stačí přidat parametr filename s cestou k obrazu přes tftp.

Příklad 4. Ukázka konfiguračního souboru DHCP serveru ISC

subnet podsíť netmask maska_podsítě
{
        # klientům v této podsíti se bude přidělovat adresa IP v rozsahu 
        # ip_minip_max
	range dynamic-bootp ip_min ip_max;
	
	# jako obraz jádra bude cesta_k_jádru
	filename cesta_k_jádru;
	
	# vyjímka 1: klient s hardwerovou adresou hardware_adresa_1 adresa IP 
	# je ip_adresa_klienta_1 (nesmí patřit do rozsahu dynamicky přidělovaných
	# adres) obraz je v cesta_k_jádru_1
        host nějaké_jméno_klienta_1
      	{
		hardware ethernet hardware_adresa_1;
		fixed-address ip_adresa_klienta_1;
		filename cesta_k_jádru_1;
 	};
	
	# vyjímka 2.: klient s hardwerovou adresou hardware_adresa_2 adresa IP
	# je ip_adresa_klienta_2 (nesmí patřit do rozsahu dynamicky přidělovaných 
	# adres) obraz je v cesta_k_jádru
        host nějaké_jméno_klienta_2
      	{
		hardware ethernet hardware_adresa_2;
		fixed-address ip_adresa_klienta_2;
 	};
	
	# vyjímka 3.: klient s hardwerovou adresou hardware_adresa_3
	# adresa IP je dynamicky přidělovaná v rozsahu ip_minip_max
	# obraz je v cesta_k_jádru_3
        host nějaké_jméno_klienta_3
      	{
		hardware ethernet hardware_adresa_3;
		filename cesta_k_jádru_3;
 	};
};

Krok 3. server TFTP

Konfigurace je probírána v části věnované TFTP serveru.

Krok 4. jádro systému

Zatímco vše co bylo referováno dříve, bylo nezávislé na systému, tak od teď je to závislé na systému.

Linux s kořenovým svazkem připojným přes NFS

Konfigurace jádra je standardní vyjma, že následující volby musí být přímo v jádře, a to:

  • automatická konfigurace adresy IP přes DHCP,

  • ovladač síťové karty,

  • NFS s podporou připojení jako kořenový svazek.

Po kompilaci jádra, je ještě nutné zadat následující příkazy:

# rdev obraz_jádra /dev/nfs
# mknbi-linux \-\-ip=dhcp obraz_jádra cesta_k_jádru

Pro program mknbi-linux existuje přepínač \-\-rootdir, který specifikuje cestu v NFS (tftpboot) ke kořenovému adresáři, implicitně je to /tftpboot. Program mknbi-linux se nachází v balíčku netboot. Po spuštění počítače, a po následném načtení a spuštění jádra se jádro inicializuje a skončí na neschopnosti připojit kořenový svazek.

Linux s kořenovým svazkem připojeným přes ramdisk

Stejně jako u předchozího bodu, i zde musí být některé volby povinně v jádře, jsou to tyto volby:

  • loopback

  • iniciální ramdisk

Dále se musí vytvořit obraz kořenového svazku. Ten se musí zkomprimovat programem gzip, případně lze použít mkinitrd. Po kompilaci jádra, je ještě nutné zadat následující příkazy:

# rdev obraz_jádra /dev/loop0
# mknbi-linux -d ram -l auto -a "init=/sbin/init" -r zagzipovaný_kořenový_svazek obraz_jádra cesta_k_jádru

Krok 5. kořenový svazek

Bez ohledu na systém je nutné připravit kořenový svazek tak, aby systém na něm byl funkční. Další kroky opět záleží na tom jakým způsobem kořenový svazek připojit.

Linux s kořenovým svazkem připojným přes NFS

Kořenový svazek musí NFS exportovat z tftpboot/ip_adresa_stroje, pro daný stroj s přístupem rw. V /etc/exports bude tedy napsáno tftpboot/ip_adresa_stroje ip_adresa_stroje(rw).

Linux s kořenovým svazkem připojeným přes ramdisk

Protože ramdisk je součástí obrazu, tak není potřeba už nic víc upravovat.