Obsah
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 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_serveruPokud bude cesta_ke_koreni_tftp_serveru, pak se použije adresář /tftpboot.
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_serveruPokud -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
parametr | popis |
---|---|
ht | typ hardwerová adresy |
ha | hardwerová adresa |
sm | maska sítě |
ip | IP adresa klienta |
hn | jméno klienta |
bf | obraz jádra systému klienta |
gw | brána |
dn | DNS |
tc | pokačování tabulky |
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:
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 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éno | popis | poznámka |
---|---|---|
group | návěstí{[parametry][deklarace]} | využívá se při potřebě nastavit několik klientů podobným způsobem |
host | návěstí{[parametry][deklarace]} | týká se jen daného klienta zadaného fixed-address |
subnet | podsí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éno | parametr | popis | pozná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ách | po jak dlouhou dobu bude IP adresa rezervována pro daného klienta, než o ni klient bude muset znovu požádat | |
filename | soubor | obraz pro zavedení systému u klienta | |
fixed-address | IP_adresa [, IP_adresa] | danému klientovi se přidělí tyto IP adresy | host |
hardware | ethernet | token-ring hardwerová_adresa | týká se klinta s touto hardwerovou adresou | |
option | volby, viz další tabulka |
Tabulka 4. Popis některých voleb
jméno | popis |
---|---|
domain-name | jméno domény |
domain-name-servers | DNS servery |
host-name | jméno klienta |
routers | směrovače |
subnet-mask | maska 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; } }
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" };
Klient DHCP od PhysTech lze najít na www.phystech.com. Žel se mi tohoto klienta na OpenBSD nepodařilo zkompilovat.
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ů.
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.
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
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_min až ip_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_min až ip_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; }; };
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.
Konfigurace jádra je standardní vyjma, že následující volby musí být přímo v jádře, a to:
# rdev obraz_jádra /dev/nfs # mknbi-linux \-\-ip=dhcp obraz_jádra cesta_k_jádruPro 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.
Stejně jako u předchozího bodu, i zde musí být některé volby povinně v jádře, jsou to tyto volby:
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
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.